원글(이글루): 2010-06-11 18:12:15
gdb로 map을 까봤으면 string같은게 파싱이 잘안되어서 이상하게 나올수 있는데, 그냥 무식하게 char* 로한번에 봐보도록 하자.
1) 추출한 것을 일단 파일로 몰아 넣고
$ cat > kk
elem[0].left: $2 = (void *) 0x89bf07c
elem[0].right: $3 = 0x89bf008 "BABO-0"
elem[1].left: $4 = (void *) 0x89bf11c
elem[1].right: $5 = 0x89bf0a8 "BABO-1"
elem[2].left: $6 = (void *) 0x89bf1bc
elem[2].right: $7 = 0x89bf148 "BABO-2"
elem[3].left: $8 = (void *) 0x89bf25c
elem[3].right: $9 = 0x89bf1e8 "BABO-3"
elem[4].left: $10 = (void *) 0x89bf2fc
elem[4].right: $11 = 0x89bf288 "BABO-4"
elem[5].left: $12 = (void *) 0x89bf39c
elem[5].right: $13 = 0x89bf328 "BABO-5"
elem[6].left: $14 = (void *) 0x89bf43c
elem[6].right: $15 = 0x89bf3c8 "BABO-6"
elem[7].left: $16 = (void *) 0x89bf4dc
elem[7].right: $17 = 0x89bf468 "BABO-7"
elem[8].left: $18 = (void *) 0x89bf57c
elem[8].right: $19 = 0x89bf508 "BABO-8"
elem[9].left: $20 = (void *) 0x89bf61c
elem[9].right: $21 = 0x89bf5a8 "BABO-9"
2) 왼쪽 놈을 몰아서 t.gdb로 넣는다.
$ grep left kk |awk ' { print "p (char*) " $6 } ' > t.gdb
$ echo "quit" >> t.gdb
- 각 "p (char*) 0x89bf07c" 요런게 들어가고 마지막에 quit가 있을 것이다.
3) gdb로 추출하자
$ gdb a.out core.11356 -x t.gdb > o
4) 추출한것을 봐볼까?
$ cat o
GNU gdb (GDB) 7.0
...
...
#0 0x0043b7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
$1 = 0x89bf07c "A"
$2 = 0x89bf11c "B"
$3 = 0x89bf1bc "C"
$4 = 0x89bf25c "D"
$5 = 0x89bf2fc "E"
$6 = 0x89bf39c "F"
$7 = 0x89bf43c "G"
$8 = 0x89bf4dc "H"
$9 = 0x89bf57c "I"
$10 = 0x89bf61c "J"
- 본래 넣었떤 string이 깔쌈하게 있구나.
'IT > 프로그래밍' 카테고리의 다른 글
[bash] 코드 변경사항 vimdiff로 열어주는 스크립트 (0) | 2023.09.13 |
---|---|
[python] dict 를 sort해서 list로 넣기 (0) | 2023.09.13 |
gdb stl의 list나 vector등 값 까보기 (0) | 2023.09.13 |
[Linux] 공유 라이브러리 생성 (0) | 2023.09.13 |
[Linux] 정적 라이브러리 생성 (0) | 2023.09.13 |