gnu assembler: endereço get de label / variável [INTEL SYNTAX]
-
19-09-2019 - |
Pergunta
Eu tenho um código como este:
.bss
woof: .long 0
.text
bleh:
...some op codes here.
agora eu gostaria de mudar o endereço da trama em eax. Qual é o intel sintaxe código aqui para fazer isso? O mesmo acontece com o movimento de endereços do bleh em, digamos, a EBX.
Sua ajuda é muito apreciada!
Solução
A seção BSS não pode ter objetos reais na mesma. Algumas montadoras ainda pode permitir que você alternar para a seção .bss, mas tudo o que você pode fazer lá é dizer algo como: x: . = . + 4
.
Na maioria dos montadores nos dias de hoje e, especificamente, em gnu para a Intel, não há mais uma directiva .bss
, para que mudar temporariamente para o BSS e criar o símbolo bss em um tiro com algo como: .comm sym,size,alignment
. É por isso que você está presumivelmente recebendo um erro " BSS directiva não reconhecido " ou algo parecido.
E então você pode obter o endereço com:
lea woof, %eax
ou
movl $woof, %eax
Atualização: aha, sintaxe intel, não arquitetura 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
Todas as formas lea
deve gerar o mesmo código.