메모리 주소값 알아오는 방법 질문입니다...
글쓴이: zippiest / 작성시간: 일, 2007/01/28 - 10:42오후
C에서 작성한 프로그램의 변수나 함수의 메모리 주소를 알아오는 방법을 알고 싶습니다..
예를들어
#include
int main()
{
int s=5;
printf("%d"s);
return 0;
}
이런 프로그램을 작성하고 실행했을때
여기에 s 라는 변수가 올라가 있는 메모리의 주소값을 알고 싶습니다..
물론 VC 같은 툴로 디버깅 해보면 알 수 있겠지만...
메모리 주소값을 읽어올 수 있는 프로그래밍 방법을 알고 싶습니다...
지금 간단한 디버거를 만들려고 생각중이라서요.....
부탁 드립니다...
Forums:
간단합니다
주소연산자 &와 메모리번지 포맷 %p를 이용하시면 됩니다
간단한 예입니다.
int k;
printf("address of local variable k : %p\n", &k);
네
네 답변감사합니다...
제가 질문에 중요한 사항을 빼먹었군요....
제가 알고 싶은것은.. 소스를 컴파일한 실행파일을 실행해 실행중인 파일.. 소스를 모르는 상태에서...
각 변수들이 저장된 메모리의 스택주소를 추출하는 방법을 질문한것이었습니다~~
아무튼 감사해요...
컴파일러 종속적입니다.
일단 소스 파일내의 변수나 관련 디버깅 정보등은 컴파일러 마다 다르게 구현합니다.
(컴파일러가 아니라 플랫폼 표준 형태로 구현된 경우가 있을 수도 있습니다.)
최소한 gcc와 vc, bolanc c 등의 구현이나 스펙이 제각각이라 현재 사용하는 컴파일러와 디버거 관련 문서를 참고하셔야 할 듯합니다.
일반적인 관점에서 이야기하기에는 구현이 전부 다르기 때문에 쉽게 답할 수 없는 문제입니다.
디버깅 심볼이 없는
디버깅 심볼이 없는 상태에서 알아내기는 힘듭니다..
소스에 보이는 변수 이름은 단순히 사람이 보기 편한 인식자이므로
컴파일후 실행파일에 디버깅 심볼이 들어가있지 않으면 알수가 없습니다.
디버거도 이 디버깅심볼을 이용하여 추적을 하니까요..
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
네~그렇쿤요...
아... 죄송하지만 또 질문 드릴께요..ㅋㅋ
리눅스 실행포맷인 ELF 파일에서 물론 디버깅정보가 추가된 ELF 파일입니다...
이 ELF 파일을 보면 .debug_info 라는 섹션에 각 디버깅 심볼이 저장되어 있는걸 확인했거든요...
그런데 만약 .debug_info에 어떤 함수심볼이 저장되어 있다면 이 함수가 call 되기전 return 주소도
.debug_info 섹션에 저장되어 있나요??
댓글 달기