2017-10-25 23 views
-1

전역 포인터를 선언하고 초기화하는 C 코드가 있습니다. 이런 식으로 뭔가 : 나는에있는 콘텐츠에 액세스 할 때마다 때문에 정말 불편 내가 ASM의 86에 통근 상징으로 VAR를 선언 할 때ASM 데이터 섹션에서 포인터를 역 참조하는 방법은 무엇입니까?

my_type* var = malloc(...) 

내가 포인터에 대한 참조를 가져, 즉 이중 포인터, 같은 것을 할 : 나는 즉, 나는 C 코드에서 가지고 my_type에 대한 포인터 malloc에 ​​의해 반환 된 값을 보유 ASM의 심볼을 얻고 싶은

extern var 
mov ax, [var] 
mov dx, [ax] 

.

이 방법이 있습니까?

+1

ASM 코드의 관련 부분을 표시 할 수 있습니까? –

+0

'& var'은 이중 포인터를 의미합니까? 따라서 malloc 된 메모리에 액세스하려면 두 번로드해야합니까? 예, 레지스터로 전달하는 대신 malloc 반환 값을 메모리에 저장할 때 발생합니다. –

+0

ASM에 코드 샘플을 추가했습니다. 대괄호를 두 번 사용하지 마십시오! –

답변

3

변수가 작동하는 방식입니다. 기호 (즉, 주소)의 값은 런타임에 변경할 수 없기 때문에 기호는 일반적으로 데이텀 자체가 아닌 데이터의 주소로 해석됩니다. 주소 malloc 반환은 링크 시간에 알 수 없기 때문에 원하는 정확한 동작을 얻을 수있는 방법은 없습니다.

포인터가 포함 된 변수를 다루지 않으려면 대신 정적 저장소에 배열을 만드는 것이 좋습니다.