GNU Assembler: احصل على عنوان التسمية / المتغير [بناء جملة Intel
-
19-09-2019 - |
سؤال
لدي رمز مثل هذا:
.bss
woof: .long 0
.text
bleh:
...some op codes here.
الآن أود نقل عنوان Woof إلى EAX. ما هو بناء الجملة Intel. كود هنا للقيام بذلك؟ الشيء نفسه ينطبق مع تحريك عنوان Bleh، على سبيل المثال، EBX.
مساعدتكم هو محل تقدير كبير!
المحلول
لا يمكن أن يكون قسم BSS أي كائنات فعلية فيها. قد لا يزال بعض المجمعين يسمح لك بالتحول إلى قسم .bss، ولكن كل ما يمكنك فعله هناك يقول شيئا مثل: x: . = . + 4
.
في معظم المجمعين هذه الأيام وخاصة في جنو من أجل إنتل، لم يعد هناك .bss
التوجيه، لذلك يمكنك التبديل مؤقتا إلى BSS وإنشاء رمز BSS في طلقة واحدة مع شيء مثل: .comm sym,size,alignment
. وبعد هذا هو السبب في أنه من المفترض أن تحصل على خطأ ".BSS التوجيه غير معترف به" أو شيء من هذا القبيل.
ثم يمكنك الحصول على العنوان إما:
lea woof, %eax
أو
movl $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
يجب أن تولد النماذج نفس الرمز.