x86 assembly instruction: call *Reg

前端 未结 1 467
别跟我提以往
别跟我提以往 2021-01-04 18:49

Can anybody give me some information about indirect function calls in x86 assembly, i.e. instructions like

call *Reg

So where the address

相关标签:
1条回答
  • 2021-01-04 19:18

    Intel and AMD publish very good documentation regarding x86. Here's a link to Intels instruction set reference which (of course) has a section on CALL. 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
    

    Using NASM syntax

    lbl_start:
     MOV EAX, lbl_function1
     CALL EAX
     RETN
    
    lbl_function1:
     MOV EAX, 1
     RET 0
    

    If you're getting an exception it could mean almost anything. Here's a few common issues...

    • you're not setting the register to an address within the program
      • you're setting the register value but it's being changed by an API call that happens before your CALL reg32
      • you're setting the register value to the data located at a specific address rather than the address itself
    • you're encoding your CALL reg32 OP Code incorrectly, (ex: FF D0 is CALL EAX in hex)
    0 讨论(0)
提交回复
热议问题