1

외부에서 정의 된 것이 아니라 모듈에 정의 된 비 정적 전역 변수를 의미합니다.GOT를 사용하여 공유 객체에 정의 된 비 정적 전역 변수가 참조되는 이유는 무엇입니까?

왜 GOT를 통해 참조해야합니까? 상대 주소를 사용하지 않는 이유는 무엇입니까? (.data 섹션의 전역 변수와 .text 섹션의 참조 사이의 거리가 상수이기 때문에 위치 독립적입니다.)

+0

동적 라이브러리가 있으며 GOT를 통해 참조되는 전역 변수가 포함되어 있지만 다른 방식으로 액세스하려고합니다. 그 맞습니까? – jweyrich

+0

아니요 동적 링커가 작동하는 방식을 읽었을 때 읽은 바에 따르면 전역 변수가이 방법으로 참조되지만 그 이유는 알 수 없습니다. – Haiyang

답변

1

변수가 static이 아니므로 ELF는 삽입 될 수 있습니다 (LD_PRELOAD를 생각해보십시오).

0

나는 또한 동일한 혼란을 가지고 있습니다. 두 개의 DSO에 동일한 이름의 전역 변수가 정의되어 있고 하나의 실행 파일에 동적으로 링크되어있는 경우 두 라이브러리 모두 변수의 동일한 복사본에 액세스합니까? 변수가 위치한 라이브러리 (라이브러리의 데이터 섹션)는 라이브러리로드 순서에 따라 다릅니다.

+0

나는 혼자 힘으로 테스트했다. 대답은 '예'입니다. 두 라이브러리는 같은 이름의 동일한 변수 사본을 사용합니다. – xingchong

관련 문제