gdb에서 bt 사용시에 ??가 나오는데요...

dorado2의 이미지

현재, linux 상에서 ns라는 시뮬레이터로 작업중인데요.

시뮬레이션을 돌리면 도중에 세그멘테이션 에러가 나옵니다.

그런데, 제가 짜거나 추가한 부분은 아직 없고, 제공되는 코드를 돌리는데 저 문제가 나서, 어디쯤에서 문제가 나는지 알 수 없네요.

모든 부분에 다 printf 를 해줄수도 없는 노릇이고...

gdb 상에서 run 해주면

#0 0x4019ecd3 in strlen () from /lib/libc.so.6

에러가 나구요. bt 명령을 해보면 아래처럼 나옵니다.
그런데 마지막에 ?? 라고 나와서, 어디 문제인지 알 수가 없네요.


#0  0x4019ecd3 in strlen () from /lib/libc.so.6
#1  0x40175975 in vfprintf () from /lib/libc.so.6
#2  0x4018d5cb in vsprintf () from /lib/libc.so.6
#3  0x08175d2d in rcsid ()
#4  0xbfffcf10 in ?? ()
#5  0x083eb15c in ?? ()

gdb 매뉴얼 사이트를 봐도...
(http://database.sarang.net/study/gdb/html/gdb-man.html)

해당 메모리 주소가 어떤 함수 내에 위치하는지 보는 명령어를 못 찾겠네요.

적당한 방법이 없을지요? 도움을 부탁드립니다.

bejoy4him의 이미지

Quote:
#0 0x4019ecd3 in strlen () from /lib/libc.so.6
#1 0x40175975 in vfprintf () from /lib/libc.so.6
#2 0x4018d5cb in vsprintf () from /lib/libc.so.6
#3 0x08175d2d in rcsid ()
#4 0xbfffcf10 in ?? ()
#5 0x083eb15c in ?? ()

0번이라고 되어있는 스택이 가장 마지막에 실행된 스택아닌가요?
#5번이 가장 먼저 호출된거구 그 함수 안에서 #4번호출,
#4번에서 #3번 rcsid()를 호출 이런식으로 해서
가장 나중에 #0 strlen()이 호출되었다는 내용인거 같은데...

strlen에서 에러가 난다면... 뭐가문제일까? 버퍼에 쓰레기 값이 들어있어서 그 쓰레기값이 정상적인 주소로 알고 접근해서 발생하는게 아닐까 하는 생각이 드는데요...

결국 그렇다면 rcsid에 인자로 줄때부터 쓰레기 값이 들어있는 버퍼를 인자로 준게 아닌지 의심스럽네요.. 문제는 rcsid()가 어디에서 호출 되었느냐인데... ??로 나오는것을 볼때는 컴파일할때 -g옵션을 빼고 했나봅니다.

dorado2의 이미지

먼저 답변 주셔서 감사드립니다.

근데, rcsid 라는게, 함수는 아니구요, 소스 상에서 여러군데 cc 파일에 포함되어 있는건데요.


static char rcsid[] =
    "@(#) $Header: /usr/cvs/ns/ns-src/trace.cc,v 1.10 1998/02/20 05:35:17 broch Exp $ (LBL)";

보면 그냥 static char 배열이거든요... 함수가 아니고... 그래서 이유를 더더욱 잘 모르겠고, 앞에서, strlen 에러나 vsprintf에서 from /lib/libc.so.6 이라고 되어있는건 크게 고려치 않아도 되나요?

저것도 결국 소스 내의 vsprintf나 strlen 때문 인 것 맞죠? 소스에서 사용한 라이브러리 내의 함수가 내부적으로 콜한 게 아니라?

흠, 더 찾아봐야겠네요. rcsid 가 변수인데 vsprintf를 콜할 일도 없을텐데...

peccavi의 이미지

-g 옵션 확실히 주셨나요?

----
jai guru deva om...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.