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:


댓글 달기