2011-12-07 1 views
7

는 아무도 나에게 몇 가지 정보를 제공 할 수 있습니다. 어떻게 든 Google을 통해 정보를 찾을 수 없었습니다.86 어셈블리 명령어 : 간접 기능은 x86 어셈블리에서 호출 즉 지시 기능 레이블의 주소가 레지스터에 저장되어</p> <pre><code>call *Reg </code></pre> <p>과 같이 대해 호출 * 등록

그런 지침이있는 x86 어셈블리 프로그램을 실행할 때 Trace/breakpoint 예외가 발생하면 무엇을 의미합니까?

답변

6

Intel 및 AMD는 x86에 관한 아주 좋은 설명서를 게시합니다. 다음은 (물론) CALL에 대한 섹션이있는 Intels 명령어 세트에 대한 링크입니다. 당신은 예외가 거의 아무 의미도 할 수 있어요 경우 NASM 구문

lbl_start: 
MOV EAX, lbl_function1 
CALL EAX 
RETN 

lbl_function1: 
MOV EAX, 1 
RET 0 

를 사용 http://www.intel.com/design/intarch/manuals/243191.HTM

OP Code: FF /2 
Instruction: CALL r/m32 
Description: Call near, absolute indirect, address given in r/m32 

. 여기

  • 당신이 레지스터 값을 설정하고 있지만,이 전에 일어나는 API 호출에 의해 변경되는 것
    • 프로그램 내에서 주소로 레지스터를 설정하지 않는 ... 몇 가지 일반적인 문제입니다 전화는
    • 당신이 아니라 주소 자체
  • 잘못 OP 코드 reg32 전화를 인코딩하고보다 특정 주소에있는 데이터에 대한 레지스터 값을 설정하는 reg32, (예는 : FF D0는 CALL이다 EAX 16 진수)