ensamblador GNU: obtener la dirección de etiqueta / variable de [INTEL SINTAXIS]
-
19-09-2019 - |
Pregunta
Tengo un código como el siguiente:
.bss
woof: .long 0
.text
bleh:
...some op codes here.
Ahora me gustaría para trasladar la dirección de la trama en EAX. ¿Cuál es la sintaxis de Intel código aquí para hacer eso? Lo mismo ocurre con el movimiento de la dirección del bleh en, digamos, EBX.
Su ayuda es muy apreciada!
Solución
La sección BSS no puede tener objetos reales en el mismo. Algunos ensambladores pueden todavía le permiten cambiar a la sección .bss, pero todo lo que puede hacer allí es decir algo como: x: . = . + 4
.
En la mayoría de los ensambladores en estos días y en concreto en GNU para Intel, ya no es una directiva .bss
, por lo que cambiar temporalmente a bss y crear el símbolo BSS de una sola vez con algo como: .comm sym,size,alignment
. Es por eso que está supuestamente recibiendo un error " Directiva bss no reconocido " o algo por el estilo.
Y entonces se puede obtener la dirección, ya sea con:
lea woof, %eax
o
movl $woof, %eax
Actualización: AHA, la sintaxis Intel, no la arquitectura Intel. Aceptar:
.intel_syntax noprefix
lea esi,fun
lea esi,[fun]
mov eax,OFFSET FLAT:fun
.att_syntax
lea fun, %eax
mov $fun, %eax
.data
fun: .long 0x123
Todas las formas lea
deben generar el mismo código.