Syntax gnu汇编程序:获取标签/变量的地址[英特尔语法]
我有这样一个代码:Syntax gnu汇编程序:获取标签/变量的地址[英特尔语法],syntax,label,gnu,intel,object-address,Syntax,Label,Gnu,Intel,Object Address,我有这样一个代码: .bss woof: .long 0 .text bleh: ...some op codes here. 现在我想把woof的地址移到eax。英特尔的语法是什么?将bleh的地址移动到(比如)ebx也是如此 非常感谢你的帮助 bss部分中不能有任何实际对象。某些汇编器可能仍然允许您切换到.bss部分,但您在那里所能做的只是说一些类似于:x:.=.+4 如今,在大多数汇编程序中,特别是在gnu for intel中,不再有.bss指令,因此您可以临时切换到bss,并使用类
.bss
woof: .long 0
.text
bleh:
...some op codes here.
现在我想把woof的地址移到eax。英特尔的语法是什么?将bleh的地址移动到(比如)ebx也是如此
非常感谢你的帮助 bss部分中不能有任何实际对象。某些汇编器可能仍然允许您切换到.bss部分,但您在那里所能做的只是说一些类似于:
x:.=.+4
如今,在大多数汇编程序中,特别是在gnu for intel中,不再有.bss
指令,因此您可以临时切换到bss,并使用类似以下内容一次性创建bss符号:.comm-sym、size、alignment
。这就是为什么您可能会遇到错误“.bss指令未识别”或类似的错误
然后您可以通过以下任一方式获得地址:
lea woof, %eax
或
更新:啊哈,英特尔语法,而不是英特尔体系结构。好:
.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
所有
lea
表单都应该生成相同的代码。谢谢,非常有启发性。不过,我在这里关心的并不是bss或数据部分。我只需要知道如何使用gnu INTEL语法(而不是AT&T语法)将标签地址加载到地址中。我试过mov-eax,woof和mov-eax,dword-ptr[woof],但都得到了相同的结果。我想做一些像movl$woof,%eax,但使用gnu英特尔语法。谢谢!我也在用lea,但我想知道我是否可以用mov来做。我想偏移平面是这里的关键?对,有多种寻址模式;MOV可以加载一个立即数,它可能恰好也是一个地址,也可以加载一个地址的内容。通常在Unix上,这是movl$woof,%eax
vsmovlwoof,%eax
,但在Intel语法中,这有点老生常谈。无论如何,“是”,lea和mov都可以加载一个地址。
.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