estoy experimentando un accidente, y al investigar me encontré totalmente bloqueado por el siguiente código:problemas para comprender un preámbulo función x86-64
0000000000000a00 <_IO_vfprintf>:
a00: 55 push %rbp
a01: 48 89 e5 mov %rsp,%rbp
a04: 41 57 push %r15
a06: 41 56 push %r14
a08: 41 55 push %r13
a0a: 41 54 push %r12
a0c: 53 push %rbx
a0d: 48 81 ec 48 06 00 00 sub $0x648,%rsp
a14: 48 89 95 98 f9 ff ff mov %rdx,0xfffffffffffff998(%rbp)
Esto se genera mediante la ejecución de objdump --disassemble /usr/lib64/libc.a
en un sistema Linux x86 de 64 bits sistema, y luego buscar a través de la salida. Esto es AT&T syntax, por lo que los destinos están a la derecha.
Específicamente, no entiendo la última instrucción. Parece escribir el valor del registro rdx
en la memoria en alguna parte de la pila (muy, muy lejos), antes de que la función haya tocado ese registro. Para mí, esto no tiene ningún sentido.
Intenté leer las convenciones de llamadas, y mi mejor teoría ahora es que rdx
se usa para un parámetro, por lo que el código básicamente "devuelve" el valor del parámetro directamente. Este no es el final de la función, por lo que en realidad no regresa, por supuesto.
Tal vez podría ayudarle a Raymond: http://blogs.msdn.com/b/oldnewthing/archive/2004/01/ 14/58579.aspx – ruslik