다음과 같은 코드가 있습니다.GNU 어셈블러 : 레이블/변수의 주소를 가져옴 [INTEL SYNTAX]
.bss
woof: .long 0
.text
bleh:
...some op codes here.
이제 woof의 주소를 eax로 옮기고 싶습니다. 인텔 구문 코드는 무엇을 할 수 있습니까? bleb의 주소를 ebx로 옮기는 것도 마찬가지입니다.
귀하의 도움에 감사드립니다!
다음과 같은 코드가 있습니다.GNU 어셈블러 : 레이블/변수의 주소를 가져옴 [INTEL SYNTAX]
.bss
woof: .long 0
.text
bleh:
...some op codes here.
이제 woof의 주소를 eax로 옮기고 싶습니다. 인텔 구문 코드는 무엇을 할 수 있습니까? bleb의 주소를 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
양식은 동일한 코드를 생성해야합니다.
감사합니다. 매우 계몽적입니다. 하지만, 그것은 정말로 여기에 내 관심사가되는 bss 또는 데이터 섹션이 아닙니다. 나는 AT & T가 아닌 gnu INTEL 구문을 사용하여 주소에 레이블의 주소를로드하는 방법을 알아야한다. 나는 mov eax, woof 및 mov eax, dword ptr [woof]를 시도했지만, 둘 다 나에게 같은 결과를 준다. movl $ woof, % eax와 같은 것을하고 싶지만 gnu intel 구문을 사용하고 싶습니다. – jian2587
감사합니다. DigitalRoss! 나는 lea도 사용하고 있었지만 mov를 사용하여 할 수 있는지 궁금합니다. 나는 OFFSET FLAT가 열쇠라고 여기는가? – jian2587
오른쪽에는 여러 가지 주소 지정 모드가 있습니다. MOV는 즉시 주소를로드 할 수도 있고 주소의 내용을로드 할 수도 있습니다. 일반적으로 유닉스에서는'movl $ woof, % eax'와'movl woof, % eax'가 있지만 인텔 구문에서는 좀 더 진부합니다. 어쨌든 "예", lea 및 mov 모두 주소를로드 할 수 있습니다. – DigitalRoss