2011-12-07 12 views
7

Czy ktoś może dać mi jakieś informacje na temat funkcji pośrednie wywołuje w zespole x86, czyli instrukcje jakx86 instrukcja montażu: call * Reg

call *Reg 

So gdy adres etykiety funkcji są przechowywane w rejestrze. Jakoś nie mogłem znaleźć informacji o tym za pośrednictwem google.

Co ponadto oznacza, że ​​otrzymam wyjątek Trace/breakpoint podczas uruchamiania programu do montażu x86, który ma taką instrukcję?

Odpowiedz

6

Intel i AMD publikują bardzo dobrą dokumentację dotyczącą x86. Oto link do zbioru instrukcji instrukcji Intels, który (oczywiście) ma sekcję o 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 

Korzystanie nasm składni

lbl_start: 
MOV EAX, lbl_function1 
CALL EAX 
RETN 

lbl_function1: 
MOV EAX, 1 
RET 0 

Jeśli otrzymujesz wyjątek może to oznaczać niemal wszystko. Oto kilka typowych problemów ...

  • nie jesteś ustawienie rejestru do adresu w programie
    • jesteś ustalającego wartość rejestru, ale to jest zmieniony przez wywołanie API, co dzieje się przed wezwanie reg32
    • jesteś ustawienie wartości rejestru do danych znajdujących się pod określonym adresem aniżeli adres samej
  • jesteś kodowania wezwanie reg32 Kodeksu pO nieprawidłowo (ex: FF D0 jest CALL EAX w hex)