assembleur gnu: obtenir l'adresse de l'étiquette / variable [INTEL SYNTAX]
-
19-09-2019 - |
Question
J'ai un code comme ceci:
.bss
woof: .long 0
.text
bleh:
...some op codes here.
maintenant, je voudrais passer l'adresse de Woof dans eax. Quel est le code syntaxe intel ici pour le faire? La même chose avec le déplacement de l'adresse bleh dans, disons, EBX.
Votre aide est très appréciée!
La solution
La section bss ne peut pas avoir des objets réels en elle. Certains assembleurs peuvent encore vous permettent de passer à la section .bss, mais tout ce que vous pouvez y faire est de dire quelque chose comme: x: . = . + 4
.
Dans la plupart des assembleurs ces jours-ci et plus particulièrement dans gnu pour les processeurs Intel, il n'y a plus une directive .bss
, de sorte que vous passez temporairement au NFI et de créer le symbole bss d'un seul coup avec quelque chose comme: .comm sym,size,alignment
. C'est pourquoi vous obtenez probablement une erreur « directive bss non reconnu » ou quelque chose comme ça.
Et vous pouvez alors obtenir l'adresse soit:
lea woof, %eax
ou
movl $woof, %eax
Mise à jour: aha, syntaxe intel, pas l'architecture 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
Toutes les formes de lea
devraient générer le même code.