gnu assembler: get address of label/variable [INTEL SYNTAX]

ぃ、小莉子 提交于 2019-12-01 03:51:18

问题


I have a code like this:

.bss
woof: .long 0

.text
bleh:
...some op codes here.

now I would like to move the address of woof into eax. What's the intel syntax code here for doing that? The same goes with moving bleh's address into, say, ebx.

Your help is much appreciated!


回答1:


The bss section can't have any actual objects in it. Some assemblers may still allow you to switch to the .bss section, but all you can do there is say something like: x: . = . + 4.

In most assemblers these days and specifically in gnu for intel, there is no longer a .bss directive, so you temporarily switch to bss and create the bss symbol in one shot with something like: .comm sym,size,alignment. This is why you are presumably getting an error ".bss directive not recognized" or something like that.

And then you can get the address with either:

lea woof, %eax

or

movl $woof, %eax

Update: aha, intel syntax, not intel architecture. 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

All the lea forms should generate the same code.



来源:https://stackoverflow.com/questions/1897401/gnu-assembler-get-address-of-label-variable-intel-syntax

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!