elf 재배치파일에서 심볼을 해석하는 것에 대하여...

글쓴이: 익명 사용자 / 작성시간: 수, 2011/09/07 - 3:23오전
자료를 찾다보니
elf 파일구조에서
.rel.name 섹션에서
심볼테이블을 참조해서 재배치를 수행한다고 알고 있는데요.
여기서 재배치할 항목의 타입이
R_386_32 이면 S+A로 계산한다고 하는데
이게 도통 무슨뜻인지 모르겠습니다.
A가 가수라 하였는데
이 A는 재배치 목적지에 저장되어있다고 하더군요.
S는 해당 심볼의 값이라고 하는데
재배치 파일에서 심볼의 값은 그 심볼이 위치해있는 섹션으로부터의 오프셋이라고 합니다.
제가 본 샘플에서 보면
msg 라는 캐릭터 포인터를 코드내에서 참조할경우
mov msg , eax 뭐 이런식으로 되어있고
msg 위치에 실제 msg심볼의 값이 들어가야 한다는 것 같습니다.
이값은 데이터 섹션의 시작부터의 오프셋인데 데이터가 msg하나 뿐이라 오프셋은 0이었습니다.
근데 재배치 되기전의 코드에서는 msg가 0으로 되어있으니 가수는 0이란 뜻으로 해석했습니다.
그렇다면
재배치될 장소에 들어갈 값은
S+A 즉 0+0 이 되는 것입니까?
mov 0,eax 가 되는군요.
하지만 32비트 운영체제에서 데이터 세그먼트 레지스터를 사용하지도 않는데
어째서 0이란 값이 나오는지 궁금하네요.
제가 생각하기에는 msg의 실제 주소값이 들어가야 할것 같은데요.
그리고
또 P라는것은 뭔지...
S+A-P는 외부참조 함수를 배치할때 쓰더군요. 도통 무슨말은지 모르겠습니다.
조언이나 도움좀 주십시요.
Forums:
sadf
질문자인데
답을 알았습니다.
A는 섹션의 머지후에 계산되는 값이므로 0이라고 되어있는건 후에 바뀌게 되고,
함수는 현재 위치로부터의 상대주소로 접근하는데 P는 현재위치입니다. 고로 S+A-P는 상대주소가 됨.
댓글 달기