2011-12-07 5 views
7

¿Alguien puede dar alguna información acerca de la función indirecta llama en ensamblador x86, es decir, las instrucciones como86: Llamada * Reg

call *Reg 

Así que cuando la dirección de la etiqueta de la función se almacena en un registro. De alguna manera no pude encontrar información al respecto a través de google.

Y además, ¿qué significa si obtengo una excepción Trace/breakpoint cuando ejecuto un programa de ensamblaje x86 que tiene tal instrucción?

Respuesta

6

Intel y AMD publican muy buena documentación sobre x86. Aquí hay un enlace a la referencia del conjunto de instrucciones Intels que (por supuesto) tiene una sección en 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 

Usando NASM sintaxis

lbl_start: 
MOV EAX, lbl_function1 
CALL EAX 
RETN 

lbl_function1: 
MOV EAX, 1 
RET 0 

Si usted está recibiendo una excepción que podría significar casi cualquier cosa. He aquí algunos problemas comunes ...

  • no está configurando el registro a una dirección dentro del programa
    • está configurando el valor del registro pero está siendo cambiado por una llamada a la API que sucede antes su llamada reg32
    • está configurando el valor del registro de los datos ubicados en una dirección específica en lugar de la dirección en sí
  • que estés codificar su llamada reg32 Código OP incorrectamente, (por ejemplo: FF D0 es LLAMADA EAX en hex)
Cuestiones relacionadas