문제

다음과 같은 코드가 있습니다.

.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 양식은 동일한 코드를 생성해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top