linux 에서 C 프로그램의 경우 SIGSEGV 로 죽는 경우 core dump 를 남기는 것으로 알고 있습니다.
근데 gdb 로 보니 libc 관련 함수에서 죽은 것처럼 보이고
call trace 정보에는 함수이름이 ??? 로 출력됩니다.
이렇게 출력이 되다 보니 추적하기가 힘듭니다
libc 관련 함수이름을 정상적으로 출력하려면 어떻게 해야 하나요?
알려주시면 감사하겠습니다.
compile 시에 optimizing option 이 높았거나 또는 해당 binary 가 strip 이 되었을 경우일 겁니다.
RHEL, CentOS 의 경우에는 glibc-debuginfo 패키지를 설치해서 디버깅을 시도해 볼 수 있습니다.http://ships95.blogspot.com/2017/12/gdb-missing-separate-debuginfos-use.html 참조 하세요.
corrupt stack인 경우일 수 있는데, stack에 할당한 버퍼크기보다 더 큰 메시지를 복사하거나 문자열을 복사하는 부분이 있는지 점검해 보세요, -fstack-protector-strong 옵션을 켜고 컴파일 해보셔도 좋을 듯 합니다..
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
compile 시에 optimizing option
compile 시에 optimizing option 이 높았거나 또는 해당 binary 가 strip 이 되었을 경우일 겁니다.
RHEL, CentOS 의 경우에는 glibc-debuginfo 패키지를 설치해서 디버깅을 시도해 볼 수 있습니다.
http://ships95.blogspot.com/2017/12/gdb-missing-separate-debuginfos-use.html 참조 하세요.
stack overrun
corrupt stack인 경우일 수 있는데, stack에 할당한 버퍼크기보다 더 큰 메시지를 복사하거나 문자열을 복사하는 부분이 있는지 점검해 보세요, -fstack-protector-strong 옵션을 켜고 컴파일 해보셔도 좋을 듯 합니다..
댓글 달기