2011-12-07 10 views
7

Qualcuno può darmi qualche informazioni sulla funzione indiretto chiamate in assembly x86, cioè istruzioni comex86 istruzioni di montaggio: chiamata * Reg

call *Reg 

Allora, dove è memorizzato l'indirizzo dell'etichetta funzione in un registro. In qualche modo non sono riuscito a trovare informazioni su di esso tramite Google.

E inoltre, cosa significa se ottengo un'eccezione Traccia/punto di interruzione durante l'esecuzione di un programma di assemblaggio x86 che dispone di tale istruzione?

risposta

6

Intel e AMD pubblicano un'ottima documentazione su x86. Ecco un link al riferimento alle istruzioni Intels che (ovviamente) ha una sezione su 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 

Utilizzando NASM sintassi

lbl_start: 
MOV EAX, lbl_function1 
CALL EAX 
RETN 

lbl_function1: 
MOV EAX, 1 
RET 0 

Se stai ricevendo un'eccezione potrebbe significare qualsiasi cosa. Ecco alcuni problemi comuni ...

  • non sta impostando il registro a un indirizzo all'interno del programma
    • si sta impostando il valore del registro, ma si tratta di essere cambiato da una chiamata API che accade prima la sua chiamata reg32
    • si sta impostando il valore di registro per i dati che si trovano ad un indirizzo specifico piuttosto che l'indirizzo in sé
  • si sta codificando la chiamata reg32 codice OP in modo non corretto, (es: FF D0 è CALL EAX in esadecimale)
Problemi correlati