Làm cách nào để người ta có thể xem nội dung của ngăn xếp với GDB?


95

Tôi mới sử dụng GDB, vì vậy tôi có một số câu hỏi:

  • Làm cách nào để xem nội dung của ngăn xếp? Ví dụ: để xem nội dung của sổ đăng ký, tôi gõ info registers. Đối với ngăn xếp, nó phải là gì?

  • Làm thế nào tôi có thể xem nội dung của $0x4(%esp)? Khi tôi nhập print /d $0x4(%esp), GDB báo lỗi.

Nền tảng: Linux và GDB


Câu trả lời:


114

info frame để hiển thị thông tin khung ngăn xếp

Để đọc bộ nhớ tại các địa chỉ đã cho, bạn nên xem x

x/x $espđối với hex x/d $espcho x/u $espcó dấu cho không dấu, v.v. x sử dụng cú pháp định dạng, bạn cũng có thể xem hướng dẫn hiện tại qua x/i $eipv.v.


69

Sử dụng:

  • bt - backtrace: hiển thị các chức năng ngăn xếp và args
  • info frame - hiển thị con trỏ bắt đầu / kết thúc / args / local
  • x/100x $sp - hiển thị bộ nhớ ngăn xếp
(gdb) bt
#0  zzz () at zzz.c:96
#1  0xf7d39cba in yyy (arg=arg@entry=0x0) at yyy.c:542
#2  0xf7d3a4f6 in yyyinit () at yyy.c:590
#3  0x0804ac0c in gnninit () at gnn.c:374
#4  main (argc=1, argv=0xffffd5e4) at gnn.c:389

(gdb) info frame
Stack level 0, frame at 0xffeac770:
 eip = 0x8049047 in main (goo.c:291); saved eip 0xf7f1fea1
 source language c.
 Arglist at 0xffeac768, args: argc=1, argv=0xffffd5e4
 Locals at 0xffeac768, Previous frame's sp is 0xffeac770
 Saved registers:
  ebx at 0xffeac75c, ebp at 0xffeac768, esi at 0xffeac760, edi at 0xffeac764, eip at 0xffeac76c

(gdb) x/10x $sp
0xffeac63c: 0xf7d39cba  0xf7d3c0d8  0xf7d3c21b  0x00000001
0xffeac64c: 0xf78d133f  0xffeac6f4  0xf7a14450  0xffeac678
0xffeac65c: 0x00000000  0xf7d3790e

56

Bạn cần sử dụng các lệnh hiển thị bộ nhớ của gdb. Điều cơ bản là x, để kiểm tra . Có một ví dụ trên trang được liên kết đến sử dụng

gdb> x/4xw $sp

để in "bốn từ ( w) bộ nhớ phía trên con trỏ ngăn xếp (ở đây, $sp) ở dạng thập lục phân ( x)". Báo giá được diễn giải một chút.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.