2012-03-22 21 views
12

Tiene una duda con respecto a la conversión de código hexadecimal de la instrucción de máquina JMP. Tengo la dirección absoluta a la que quiero saltar, decir "JMP 0x400835". Antes que nada, ¿está permitido? En caso afirmativo, ¿cuál sería el código hexadecimal correspondiente? En caso negativo, ¿puedo primero almacenar la dirección en algún registro, por ejemplo EAX y luego poner "JMP EAX"? Estoy trabajando en la arquitectura x86 (64b).Instrucción JMP - Código hexadecimal

He intentado imprimir el código hexadecimal de la salida de la diassema en gdb, pero no hay consistencia, es decir, no veo la dirección de destino en el código hexadecimal.

Soy nuevo en el código hexadecimal y las instrucciones de la máquina, así que disculpe mi ignorancia.

Respuesta

23

No hay salto del formulario JMP absaddr a una dirección absoluta en el modo de 64 bits. El operando de un salto es siempre un desplazamiento relativo de 32 bits a rip, que obtiene el signo extendido a 64 bits.

La razón por la que no ve ninguna coherencia es posiblemente que el desplazamiento depende del puntero de instrucción actual y usted no lo reconoció.

jmp eax tampoco, ya que las direcciones son, por supuesto, siempre de 64 bits de ancho en una arquitectura de 64 bits. Una secuencia mov rax, addr + jmp rax es posible, se vería como

48 c7 c0 35 08 40 00   mov rax, 0x00400835 
ff e0       jmp rax 

o

48 b8 35 08 40 00 00 00 00 00 mov rax, 0x0000000000400835 
ff e0       jmp rax 

¿Cómo sabía que estos códigos hexadecimales? Bueno, le pregunté a mi compilador. Compilé con gcc -c y lo desensamblé con objdump. No me molesté en usar la sintaxis de Intel, porque no la necesito. Así que esto está en AT & T sintaxis.

echo 'asm("mov $400835, %rax\n jmp *%rax\n");' > test.c 
gcc -c test.c 
objdump -d test.o 
+0

Gracias por la respuesta. Esto realmente me ayudó. objdump es en verdad una buena herramienta! –

+0

Hola ... He marcado su publicación como "útil" ... eso es lo que se necesita, ¿no es así? –

+0

@DeepanjanMazumdar Debe hacer clic en la marca de verificación – hirschhornsalz

Cuestiones relacionadas