ELF format을 공부하고 있습니다. c코드중에 지역변수는 심볼이
글쓴이: dionysos / 작성시간: 수, 2005/09/14 - 12:19오전
#include<stdio.h> /* well comment */ /* well2 comment */ int glovalvariable=10; double uninitvariable; void callfunction1() { printf("printfunc1"); } void callfunction2() { printf("printfunc2"); } int main() { int loccal1; int loccal2; int loccalinit1; int loccalinit2; loccal1 = 100; loccal2 = 300; loccalinit1 = loccal1; loccalinit2 = loccal2; printf("mainprint %d",loccalinit1); callfunction1(); callfunction2(); getchar(); return 1; }
gcc3.2 version 에서 컴파일에서 ELF포멧을분석하고 있습니다.
여기에서 전역변수, 함수이름등은 .strtab 에 등록되어 있고
.symtab 에도 등록되어 있는데 지역변수인 loccal1, loccal2,
loccalinit1, loccalinit2은 .strtab 이나 .symtab 에서 찾을
수 없습니다. 왜 그럴까요.
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 22.63 KB |
Forums:
objdump 명령을 사용해서 심볼테이블을 보니 있다고나오네요..
지역변수들의 정보는 어디에 저장될까요.
이상하군요..
노력은 배반하지 않는다.
지역변수는 그냥 스택에 들어가지 않나요?
지역변수는 그냥 스택에 들어가지 않나요?
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
스텍에는 들어가는건 맞는데 심볼은 들록되야 되는게 아닌가요
하나의 소스파일이면 몰라도 심볼이 등록이 안되어 있다면
링커가 여러개의 소스를 합칠때 문제가 되는걸로 알고 있습니
다. 아닌가요..;;
노력은 배반하지 않는다.
지역변수에 다른 오브젝트파일에서 접근할 방법이 있던가요? 같은 오브젝트에
지역변수에 다른 오브젝트파일에서 접근할 방법이 있던가요? 같은 오브젝트에서도 다른 scope 에 있는 변수는 접근할 방법이 없는데요... (포인터로 어떻게 적당히 계산해서 하는 방법은 예외지만요 :evil:) 때문에 상관 없을 듯 한데요 ;)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
제가 잘몰라서 겠지만 어셈블 결과 push하는 스텍에 넣는것 까지
그럼 컴파일 하여 obj 파일을 생성할때 지역변수 사용하는부분은 셈블러(예를들어 push)로 바 뀌고 심볼테이블[위치정보]이나 스트링테이블[변수이름]등의 부가정도가 들어가지 않나요
노력은 배반하지 않는다.
예전 kldpconf 에서 세미나 했던 자료가 아직도 웹상에 그대로 있군
예전 kldpconf 에서 세미나 했던 자료가 아직도 웹상에 그대로 있군요 :)
제 외장하드가 날라가면서 그 때 자료들 받아놨던게 날라가서 아쉬웠는데... 참 다행입니다...
http://wiki.kldp.org/wiki.php/KLDPConf/20031011
여기서 어셈블리 관련 강좌 동영상을 보면 C Calling Conversion 에 대해서 설명하고 있습니다 :) 파워포인트 자료 33페이지 쯤에 나오는 부분을 잘 찾아서 보시면 도움이 될 듯 싶습니다... 마지막 페이지에 나온 내용을 인용해보면...
지역 변수는 automatic 이 될 거 같네요 +_+
(사실 저도 잘 몰라서 :evil:)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
감사합니다.. 한참 고민했었는데.. 해결되었습니다.
소스를 간단하게 해서 역어셈블 해본결과 제가 잘못 이해한거 같군요
지역변수는 저장 안되는게 맞습니다.
무지가..ㅡ.ㅡ.;; 답변감사드립니다.
노력은 배반하지 않는다.
댓글 달기