免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8525 | 回复: 11
打印 上一主题 下一主题

gdb调试汇编代码断点不起作用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-05 00:35 |只看该作者 |倒序浏览
我写了一个求和的汇编程序,sum.asm
nasm -f elf -g -F stabs sum.asm
ld -o sum sum.o io.o
生成 sum的可执行文件
运行 gdb sum
设置断点,可以通过 list查看代码,证明已经成功绑定
运行 后
input first number:123
input second number:456
sum is

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2008-09-05 01:12 |只看该作者

回复 #1 pigcrying 的帖子

你怎么设的断点?

论坛徽章:
0
3 [报告]
发表于 2008-09-05 01:36 |只看该作者
就是 b 21    对第二十一行设置断点
(gdb) b 21
Breakpoint 1 at 0x8049414: file sum1.asm, line 21.
(gdb) info b
Num Type           Disp Enb Address    What
1   breakpoint     keep y   0x08049414 sum1.asm:21

另外,21行执行的是call sum
sum:
28              mov     AX,CX
29              add     AX,DX
30              ret

我同时设置的很多个断点 ,都不管用。

我换了个版本的gdb还是一样的错误

[ 本帖最后由 pigcrying 于 2008-9-5 01:38 编辑 ]

论坛徽章:
8
2015年辞旧岁徽章
日期:2015-03-03 16:54:15午马
日期:2015-02-04 12:00:07羊年新春福章
日期:2015-02-04 11:57:56双子座
日期:2014-12-02 11:44:59金牛座
日期:2014-10-08 16:47:08狮子座
日期:2014-08-29 13:37:46巳蛇
日期:2014-08-26 17:32:29NBA常规赛纪念章
日期:2015-05-04 22:32:03
4 [报告]
发表于 2008-09-05 09:01 |只看该作者

回复 #3 pigcrying 的帖子

没错啊
(gdb) b 21
就是这样设断点的嘛

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2008-09-05 09:43 |只看该作者
原帖由 pigcrying 于 2008-9-5 01:36 发表
我同时设置的很多个断点 ,都不管用。

我换了个版本的gdb还是一样的错误

贴个完整的 session. 从你启动 gdb 开始到退出,把你的输入和gdb 的输出原封不动的贴上来。

论坛徽章:
0
6 [报告]
发表于 2008-09-05 13:15 |只看该作者
GNU gdb Red Hat Linux (6.6-45.fc8rh)
源文件 sum1.asm
执行nasm -f elf -g -F stabs sum1.asm
执行ld -o sum1 sum1.o io.o
生成sum1可执行文件
[root@cryingpig sumAdd]# gdb sum1
GNU gdb Red Hat Linux (6.6-45.fc8rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) l
1       ;
2       ;       Objective: To show parameter passing via registers.
3       ;           Input: Two integers from the user.
4       ;          Output: Outputs the sum of the input integers.
5
6       %include "io.mac"
7
8       .DATA
9       prompt_msg1     DB      "input first number:",0
10      prompt_msg2     DB      "input second number:",0
11      sum_msg         DB      "sum is ",0
12
13      .CODE
14              .STARTUP
15              PutStr prompt_msg1    ; request first number
16              GetInt CX             ; CX = first number
17
18              PutStr prompt_msg2    ; request second number
19              GetInt DX             ; DX= second number
20
21              call sum              ; returns sum in AX
22              PutStr sum_msg        ; display sum
23              PutInt AX
24              nwln
25      done:
26              .EXIT
27      sum:
28              mov     AX,CX
29              add     AX,DX
30              ret
(gdb) b 21
(gdb) b 18
Breakpoint 2 at 0x80493fc: file sum1.asm, line 18.
(gdb) info b
Num Type           Disp Enb Address    What
1   breakpoint     keep y   0x08049414 sum1.asm:21
2   breakpoint     keep y   0x080493fc sum1.asm:18
(gdb) r
Starting program: /root/work/asm/sumAdd/sum1
input first number:123
inpu

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2008-09-05 14:28 |只看该作者
是不是调试信息的问题?把断点直接打在具体的地址上呢?

论坛徽章:
0
8 [报告]
发表于 2008-09-05 14:53 |只看该作者
什么调试信息?另外在设置断点的同时,断点已经对应到具体的地址了,如何将断点重新映射到其他地址上?而且为什么要这样做?
既然gdb能够将断点数据放入地址,证明此地址是有效的阿!

这个问题一点提示信息都没有,不知道问题到底在哪里?
(gdb) info b
Num Type           Disp Enb Address    What
1   breakpoint     keep y   0x080493f0 sum1.asm:16
2   breakpoint     keep y   0x0804943f sum1.asm:28
3   breakpoint     keep y   0x08049425 sum1.asm:23
(gdb) x/1xb 0x80493f0
0x80493f0 <prompt_msg1+12>:     0x6e
(gdb) x/1xb 0x804943f
0x804943f <?range_msg+38>:      0x37
(gdb) x/1xb 0x8049425
0x8049425 <?range_msg+12>:      0x20
(gdb) x/1sb 0x80493f0
0x80493f0 <prompt_msg1+12>:      "number:"
(gdb) x/1sb 0x804943f
0x804943f <?range_msg+38>:       "767).\r\nPlease try again:\t "
(gdb) x/1sb 0x8049425
0x8049425 <?range_msg+12>:       " of range (-32,768 to +32.767).\r\nPlease try again:\t "
为什么   23              PutInt AX 会产生貌似超出范围的提示?

[ 本帖最后由 pigcrying 于 2008-9-5 15:08 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2008-09-05 15:02 |只看该作者
原帖由 pigcrying 于 2008-9-5 14:53 发表
什么调试信息?另外在设置断点的同时,断点已经对应到具体的地址了,如何将断点重新映射到其他地址上?而且为什么要这样做?
既然gdb能够将断点数据放入地址,证明此地址是有效的阿!

你先试一下。用 b *address 这种方式打断点,address 是断点所在的地址。

论坛徽章:
0
10 [报告]
发表于 2008-09-05 15:08 |只看该作者
(gdb) info b
Num Type           Disp Enb Address    What
1   breakpoint     keep y   0x080493f0 sum1.asm:16
2   breakpoint     keep y   0x0804943f sum1.asm:28
3   breakpoint     keep y   0x08049425 sum1.asm:23
(gdb) x/1xb 0x80493f0
0x80493f0 <prompt_msg1+12>:     0x6e
(gdb) x/1xb 0x804943f
0x804943f <?range_msg+38>:      0x37
(gdb) x/1xb 0x8049425
0x8049425 <?range_msg+12>:      0x20
(gdb) x/1sb 0x80493f0
0x80493f0 <prompt_msg1+12>:      "number:"
(gdb) x/1sb 0x804943f
0x804943f <?range_msg+38>:       "767).\r\nPlease try again:\t "
(gdb) x/1sb 0x8049425
0x8049425 <?range_msg+12>:       " of range (-32,768 to +32.767).\r\nPlease try again:\t "
为什么   23              PutInt AX 会产生貌似超出范围的提示?


(gdb) b *0x80493f0
Breakpoint 1 at 0x80493f0
(gdb) info b
Num Type           Disp Enb Address    What
1   breakpoint     keep y   0x080493f0 <prompt_msg1+12>
(gdb) r
Starting program: /root/work/asm/sumAdd/sum1
input first
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP