GNU 어셈블러 : 레이블/변수의 주소 얻기 [Intel Syntax
-
19-09-2019 - |
문제
다음과 같은 코드가 있습니다.
.bss
woof: .long 0
.text
bleh:
...some op codes here.
이제 Woof의 주소를 EAX로 옮기고 싶습니다. 무엇입니까 인텔 구문 이를 위해 여기에 코드가 있습니까? Bleh의 주소를 Ebx로 옮기는 것도 마찬가지입니다.
당신의 도움은 대단히 감사합니다!
해결책
BSS 섹션에는 실제 객체가 없습니다. 일부 어셈블러는 여전히 .BSS 섹션으로 전환 할 수 있지만 다음과 같은 말을 할 수 있습니다. x: . = . + 4
.
요즘 대부분의 어셈블러와 특히 인텔 용 GNU에서는 더 이상 .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
양식은 동일한 코드를 생성해야합니다.
제휴하지 않습니다 StackOverflow