GNU汇编:获取标签的地址/变量[Intel语法]
-
19-09-2019 - |
题
我有一个这样的代码:
.bss
woof: .long 0
.text
bleh:
...some op codes here.
现在我想纬的地址移动到eax中。什么是 Intel语法代码这里做吗?这同样与移动的Bleh的地址转换成,比方说,EBX。
您的帮助深表感谢!
解决方案
bss段不能在它的任何实际对象。一些装配可能仍然允许你切换到.bss段,但是你能做的一切有这样说:x: . = . + 4
。
在大多数编译器这些天,特别是在GNU对于英特尔来说,也不再是.bss
指令,让你暂时切换到BSS和喜欢的东西建立在一杆的BSS符号:.comm sym,size,alignment
。这就是为什么你可能得到一个错误。“ BSS指令无法识别的”或类似的东西。
然后就可以用得到的地址之一:
lea woof, %eax
或
movl $woof, %eax
更新 AHA,Intel语法,而不是英特尔架构。 OK:
.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
形式应产生相同的代码。
不隶属于 StackOverflow