builtin_return_address와 -fomit-frame-pointer
글쓴이: novicero / 작성시간: 금, 2005/12/09 - 4:43오후
foo(void) { printf("Stack trace:\n"); printf("0: %p\n", __builtin_return_address(0)); printf("1: %p\n", __builtin_return_address(1)); printf("2: %p\n", __builtin_return_address(2)); printf("3: %p\n", __builtin_return_address(3)); printf("4: %p\n", __builtin_return_address(4)); printf("5: %p\n", __builtin_return_address(5)); printf("6: %p\n", __builtin_return_address(6)); printf("7: %p\n", __builtin_return_address(7)); } bar(void){ int b; foo(); } int main(void) { int a; bar(); return 0; }
gcc로 이 파일을 컴파일을 하였습니다.
gcc test.c
실행결과
Stack trace:
0: 0x804842a
1: 0x8048441
2: 0x42015574
3: 0x8048299
Segmentation fault
gcc -fomit-frame-pointer test.c
실행결과
Stack trace:
0: 0x8048427
1: 0x42015574
2: 0x8048299
Segmentation fault
질문은 3가지입니다.
1번.
0x42015574
이 주소는 뭐죠??
nm이나 objdump로 봐도 이런 주소는 없군요.
2번.
-fomit-frame-pointer를 쓰며는
"'-fomit-frame-pointer' 옵션을 쓰면 frame pointer가 필요없는 함수들을 컴파일할 때, frame pointer를 생략합니다."라고 설명이되어 있는데 frame pointer가 필요없는 함수라는게 어떤 것인지?
3번.
-fomit-frame-pointer로 결과가 달라졌는데 이유가 무엇인지?
Forums:
댓글 달기