gnu汇编程序:获取标签/变量的地址[INTEL SYNTAX]

jia*_*587 5 syntax label gnu intel object-address

我有这样的代码:

.bss
woof: .long 0

.text
bleh:
...some op codes here.
Run Code Online (Sandbox Code Playgroud)

现在我想将woof的地址移到eax中.这样做的英特尔语法代码是什么?将bleh的地址移动到ebx也是如此.

非常感谢您的帮助!

Dig*_*oss 8

bss部分中不能包含任何实际对象.有些汇编程序可能仍允许你切换到.bss部分,但你可以做的就是:x: . = . + 4.

在大多数汇编程序中,特别是在gnu for intel中,不再有.bss指令,所以你暂时切换到bss并在一次创建bss符号,例如:.comm sym,size,alignment.这就是为什么你可能会收到错误" .bss指令未被识别 "或类似的东西.

然后您可以使用以下任一方式获取地址:

lea woof, %eax
Run Code Online (Sandbox Code Playgroud)

要么

movl $woof, %eax
Run Code Online (Sandbox Code Playgroud)

更新: aha,intel语法,而不是intel架构.好:

.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
Run Code Online (Sandbox Code Playgroud)

所有lea表单都应该生成相同的代码.