linux-gdb调试汇编_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > linux-gdb调试汇编

linux-gdb调试汇编

 2010/9/19 23:30:39  deepfuture  http://deepfuture.javaeye.com  我要评论(0)
  • 摘要:1、调试hello,要求编译时指定了-gstabs选项2、运行hellodeepfuture-lx@deepfuture-lx-desktop:~/private/mytest$./hellohello,worldABCD3、用gdb打开hellodeepfuture-lx@deepfuture-lx-desktop:~/private/mytest$gdbhelloGNUgdb(GDB)7.1-ubuntuCopyright(C)2010FreeSoftwareFoundation,Inc
  • 标签:linux gdb调试汇编

1、调试hello,要求编译时指定了-gstabs选项

2、运行hello

deepfuture-lx@deepfuture-lx-desktop:~/private/mytest$ ./hello

hello,world

ABCD

3、用gdb打开hello

deepfuture-lx@deepfuture-lx-desktop:~/private/mytest$ gdb hello

GNU gdb (GDB) 7.1-ubuntu

Copyright (C) 2010 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. ?Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-linux-gnu".

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>...

Reading symbols from /home/deepfuture-lx/private/mytest/hello...done.

4、列出源代码

(gdb) list

warning: Source file is more recent than executable.

1 .section .data#初始化的变量

2 output:

3 ? .ascii "hello,world\n"

4 ? #要打印的字符串,.data为初始化值的变量。output是标签,指示字符串开始的位置,ascii为数据类型

5 .section .bss#未初始化的变量,由0填充的缓冲区

6 ? .lcomm num,20

7 ? #lcomm为本地内存区域,即本地汇编外的不能进行访问。.comm是通用内存区域。

8 .section .text#汇编语言指令码

9 ? .globl _start#启动入口

10 ? _start:

(gdb) list

11 ? movl $4,%eax#调用的系统功能,4为write ??

12 ? movl $output,%ecx#要打印的字符串

13 ? movl $1,%ebx#文件描述符,屏幕为1 ??

14 ? movl $12,%edx#字符串长度

15 ? int $0x80#显示字符串hello,world

16 ??

17 ? movl $0,%eax

18 ? movl $num,%edi

19 ? movl $65,1(%edi)#A 的ascii

20 ? movl $66,2(%edi)#B 的ascii?

5、设置断点

(gdb) break 17

Breakpoint 1 at 0x4000c6: file hello.s, line 17.

6、运行至断点

(gdb) run

Starting program: /home/deepfuture-lx/private/mytest/hello?

hello,world

?

Breakpoint 1, _start () at hello.s:17

7、运行下条语句

17 ? movl $0,%eax

(gdb) next

18 ? movl $num,%edi

8、显示所有寄存器的值

(gdb) info registers

rax ? ? ? ? ? ?0x0 0

rbx ? ? ? ? ? ?0x1 1

rcx ? ? ? ? ? ?0x60011c 6291740

rdx ? ? ? ? ? ?0xc 12

rsi ? ? ? ? ? ?0x0 0

rdi ? ? ? ? ? ?0x0 0

rbp ? ? ? ? ? ?0x0 0x0

rsp ? ? ? ? ? ?0x7fffffffe2d0 0x7fffffffe2d0

r8 ? ? ? ? ? ? 0x0 0

r9 ? ? ? ? ? ? 0x0 0

r10 ? ? ? ? ? ?0x0 0

r11 ? ? ? ? ? ?0x0 0

r12 ? ? ? ? ? ?0x0 0

r13 ? ? ? ? ? ?0x0 0

r14 ? ? ? ? ? ?0x0 0

r15 ? ? ? ? ? ?0x0 0

rip ? ? ? ? ? ?0x4000cb 0x4000cb <_start+27>

eflags ? ? ? ? 0x202 [ IF ]

cs ? ? ? ? ? ? 0x33 51

ss ? ? ? ? ? ? 0x2b 43

ds ? ? ? ? ? ? 0x0 0

es ? ? ? ? ? ? 0x0 0

fs ? ? ? ? ? ? 0x0 0

---Type <return> to continue, or q <return> to quit---

gs ? ? ? ? ? ? 0x0 0

(gdb) next

19 ? movl $65,1(%edi)#A 的ascii

9、按十六进制格式输出edi寄存器的值。/x表示16进制,/d表示10进制,/t表示二进制

(gdb) print/x $rdi

$3 = 0x600128

10、显示所有寄存器值

(gdb) info registers

rax ? ? ? ? ? ?0x0 0

rbx ? ? ? ? ? ?0x1 1

rcx ? ? ? ? ? ?0x60011c 6291740

rdx ? ? ? ? ? ?0xc 12

rsi ? ? ? ? ? ?0x0 0

rdi ? ? ? ? ? ?0x600128 6291752

rbp ? ? ? ? ? ?0x0 0x0

rsp ? ? ? ? ? ?0x7fffffffe2d0 0x7fffffffe2d0

r8 ? ? ? ? ? ? 0x0 0

r9 ? ? ? ? ? ? 0x0 0

r10 ? ? ? ? ? ?0x0 0

r11 ? ? ? ? ? ?0x0 0

r12 ? ? ? ? ? ?0x0 0

r13 ? ? ? ? ? ?0x0 0

r14 ? ? ? ? ? ?0x0 0

r15 ? ? ? ? ? ?0x0 0

rip ? ? ? ? ? ?0x4000d0 0x4000d0 <_start+32>

eflags ? ? ? ? 0x202 [ IF ]

cs ? ? ? ? ? ? 0x33 51

ss ? ? ? ? ? ? 0x2b 43

ds ? ? ? ? ? ? 0x0 0

es ? ? ? ? ? ? 0x0 0

fs ? ? ? ? ? ? 0x0 0

---Type <return> to continue, or q <return> to quit---?

gs ? ? ? ? ? ? 0x0 0

(gdb) next

20 ? movl $66,2(%edi)#B 的ascii?

?

11、显示某个内存位置的值,x/nyz,其中n为字段数,y为格式(c为字符,d为10进制,x为16进制),z为字段长度(b为字节,n为16位字,w为32位字)

(gdb) next

21 ? movl $67,3(%edi)#C 的ascii?

(gdb) x/3cb &num

0x600128 <num>: 0 '\000' 65 'A' 66 'B'

(gdb) next

22 ? movl $68,4(%edi)#D 的ascii

(gdb) next

23 ? movl $10,5(%edi)#\n的ascii?

(gdb) next

25 ? movl $4,%eax#调用的系统功能,4为write ? ?

(gdb) x/4cb &num

0x600128 <num>: 0 '\000' 65 'A' 66 'B' 67 'C'

12、退出gdb

(gdb)quit

深未来技术原创,http://deepfuture.javaeye.com 。附件为源文件和目标文件,解压密码为:deepfuture.javaeye.com

发表评论
用户名: 匿名