| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3460 人关注过本帖
标题:问个debug调试的问题(问题部分解决 万分感谢高人ONEPROBLEM)
取消只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
结帖率:100%
收藏
 问题点数:0 回复次数:8 
问个debug调试的问题(问题部分解决 万分感谢高人ONEPROBLEM)
用debug调试时  遇到 int 3h 的断点后 如何使程序继续运行?


D:\MASMPlus\Project\100add>debug dos.exe
-g

AX=FFFF  BX=0031  CX=0000  DX=0042  SP=0200  BP=0000  SI=002E  DI=0000
DS=13CD  ES=13B9  SS=13D6  CS=13C9  IP=002D   NV UP EI PL NZ NA PE NC
13C9:002D CC            INT     3
-t

AX=FFFF  BX=0031  CX=0000  DX=0042  SP=01FA  BP=0000  SI=002E  DI=0000
DS=13CD  ES=13B9  SS=13D6  CS=0DD7  IP=13B1   NV UP DI PL NZ NA PE NC
0DD7:13B1 55            PUSH    BP
-t

AX=FFFF  BX=0031  CX=0000  DX=0042  SP=01F8  BP=0000  SI=002E  DI=0000
DS=13CD  ES=13B9  SS=13D6  CS=0DD7  IP=13B2   NV UP DI PL NZ NA PE NC
0DD7:13B2 8BEC          MOV     BP,SP
-p

AX=FFFF  BX=0031  CX=0000  DX=0042  SP=01F8  BP=01F8  SI=002E  DI=0000
DS=13CD  ES=13B9  SS=13D6  CS=0DD7  IP=13B4   NV UP DI PL NZ NA PE NC
0DD7:13B4 FF8E0200      DEC     WORD PTR [BP+0002]                 SS:01FA=002E
-p

AX=FFFF  BX=0031  CX=0000  DX=0042  SP=01F8  BP=01F8  SI=002E  DI=0000
DS=13CD  ES=13B9  SS=13D6  CS=0DD7  IP=13B8   NV UP DI PL NZ NA PE NC
0DD7:13B8 5D            POP     BP
-p

AX=FFFF  BX=0031  CX=0000  DX=0042  SP=01FA  BP=0000  SI=002E  DI=0000
DS=13CD  ES=13B9  SS=13D6  CS=0DD7  IP=13B9   NV UP DI PL NZ NA PE NC
0DD7:13B9 EB21          JMP     13DC
-


偶是菜鸟 要怎样才能让程序继续运行?  先谢谢了

[[it] 本帖最后由 zklhp 于 2008-7-28 02:15 编辑 [/it]]
搜索更多相关主题的帖子: debug 调试 FFFF INT PUSH 
2008-07-05 21:43
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
高手一句话就说明了 是不是要清什么标志位?

指点下
2008-07-07 19:59
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
顶到出答案为止
2008-07-12 16:43
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
再顶  高人说下
2008-07-20 01:39
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]zklhp[/un] 在 2008-7-5 21:43 的发言:[/bo]

用debug调试时  遇到 int 3h 的断点后 如何使程序继续运行?

我说各位高手 是无法实现 无此功能    还是问题太弱 不屑于回答    还是大家都不知道呀 给个说法 偶在网上找了半天啥也没找到

D:\MASMPlus\Projec ...



是不是要清什么标志位?
2008-07-22 16:39
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]ONEPROBLEM[/un] 在 2008-7-25 17:37 的发言:[/bo]

3号中断是“断点中断”啊,在使用DEBUG的时候,遇到这里当然会引发中断的(而且引发的就是断点中断处理程序)。
否则,只有修改中断向量表了。
不知道我说的对不对?


讲的太好了 谢谢了 论坛里真是热心人多

偶问的是 怎么让程序继续运行  就像在 win32 里那样  好象执行了 int 3h 后 那个单步的标志位会被设置上  怎么让它继续运行

好象直接用  g p t 都不行 怎么办

谢谢了
2008-07-27 15:16
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]ONEPROBLEM[/un] 在 2008-7-27 23:17 的发言:[/bo]

哥们,你的问题是不是太复杂了?
遇到int 3h,必然要处理断点中断的。而断点,就是程序停下来的地方,为什么要停下来?是为了等待我们去处理(这个断点),我们去处理了,程序才会继续运行。
什么单步标志位?是不是 ...


偶不太懂dos里的那些东西 问的问题可能有些愚蠢 还望您别笑话我  

偶在用debug调试是 有时要在一个地方停一下 看看内存 寄存器之类的东西

可我不知道怎么在debug里下断点  就直接改程序 在想断的地方加 int 3
 
在win32里 用od时 这种方法还很实用(个人意见 呵呵)

可看完后 还想继续运行程序 可用 g t p 都不能达到目的 就发了这个帖

其实 是可以的 只要用 g =**  让它在下一条指令处运行就行了

既然您对dos很了解 偶就再问深一点

在debug里 正确的 或比较好的 调试方法是什么呢  可否给个例子?

int 3h 是调试中断 有什么用处?该怎样用呢?

“在进入任何中断前,TF都要置0 。”  那在偶断下来时

AX=0000  BX=0000  CX=0014  DX=0000  SP=0200  BP=0000  SI=0006  DI=0000
DS=13DD  ES=13C7  SS=13E6  CS=13D7  IP=0012   NV UP EI PL ZR NA PE NC
13D7:0012 CC            INT     3
-g

AX=0000  BX=0000  CX=0014  DX=0000  SP=0200  BP=0000  SI=0006  DI=0000
DS=13DD  ES=13C7  SS=13E6  CS=13D7  IP=0012   NV UP EI PL ZR NA PE NC
13D7:0012 CC            INT     3
-g

AX=0000  BX=0000  CX=0014  DX=0000  SP=0200  BP=0000  SI=0006  DI=0000
DS=13DD  ES=13C7  SS=13E6  CS=13D7  IP=0012   NV UP EI PL ZR NA PE NC
13D7:0012 CC            INT     3
-g

AX=0000  BX=0000  CX=0014  DX=0000  SP=0200  BP=0000  SI=0006  DI=0000
DS=13DD  ES=13C7  SS=13E6  CS=13D7  IP=0012   NV UP EI PL ZR NA PE NC
13D7:0012 CC            INT     3
-g

AX=0000  BX=0000  CX=0014  DX=0000  SP=0200  BP=0000  SI=0006  DI=0000
DS=13DD  ES=13C7  SS=13E6  CS=13D7  IP=0012   NV UP EI PL ZR NA PE NC
13D7:0012 CC            INT     3

直接用 g 怎么不会继续运行?此处用 t p 就转到 int 3 的中断处理程序 用 g 怎么就不行呢?

“2、禁止其它的可屏蔽中断(指外中断的)。” 怎么理解呀? 这个功能好象是 IF 的呀?

IF(Interrupt Flag)中断标志,当IF为1时,允许中断,否则关闭中断
TF(Trap Flaga)陷井标志,用于单步方式操作。当TF位为1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF位为0时,CPU正常工作不产生陷阱。

如果偶真要在 debug 里设置或清除 TP  该怎么做?好象没有现成的指令

能碰到您这样的高手真是幸运呀  能者多劳嘛  还望您能给俺解惑 谢谢了

可否留个联系方式 有问题随时咨询 可以吗

btw 如果这些都说明白了   这个帖就够当个精华帖了 哈哈
2008-07-28 02:12
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]ONEPROBLEM[/un] 在 2008-7-28 09:00 的发言:[/bo]


先声明哈:
1、我真的是一只小小的菜鸟啊;2、我对DOS了解不多;3、我们都是相互学

习的,希望共同提高哦。
回复:
1、在debug里下断点,直接 g address就可以了;address这个地 ...


高手有时也谦虚  反正您比我水平高 呵呵

第一个debug里下断的方法以前还真不会  不过 不反汇编 怎么知道在哪里断  又不是像在od里那样 呵呵

根据实践  直接跳过 int 3h  也没什么大问题  不知道实际情况是不是这样 会不会搞乱堆栈 再研究吧 偶认为 既然  int 3h 是自己加的 应该可以跳过的

偶还是不太懂你说的那个中断处理程序之类的  到底 int 3h 的处理程序在干啥 保护现场  跳过有什么危害?

AX=0000  BX=0000  CX=0014  DX=0000  SP=0200  BP=0000  SI=0006  DI=0000
DS=13DD  ES=13C7  SS=13E6  CS=13D7  IP=0012   NV UP EI PL ZR NA PE NC
13D7:0012 CC            INT     3
-g

AX=0000  BX=0000  CX=0014  DX=0000  SP=0200  BP=0000  SI=0006  DI=0000
DS=13DD  ES=13C7  SS=13E6  CS=13D7  IP=0012   NV UP EI PL ZR NA PE NC
13D7:0012 CC            INT     3
-g

AX=0000  BX=0000  CX=0014  DX=0000  SP=0200  BP=0000  SI=0006  DI=0000
DS=13DD  ES=13C7  SS=13E6  CS=13D7  IP=0012   NV UP EI PL ZR NA PE NC
13D7:0012 CC            INT     3
-g

AX=0000  BX=0000  CX=0014  DX=0000  SP=0200  BP=0000  SI=0006  DI=0000
DS=13DD  ES=13C7  SS=13E6  CS=13D7  IP=0012   NV UP EI PL ZR NA PE NC
13D7:0012 CC            INT     3
-g

用 g 时  到底干了什么?这里也不太明白 还望指点下

你说你罗嗦  偶看是讲的详细 讲的深刻 呵呵

再次感谢  还望指教
2008-07-28 10:54
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]lvyanan[/un] 在 2008-7-31 12:31 的发言:[/bo]

用G命令如下格式:
  G=  [断点偏移1],.....[断点偏移9]
例:
  G=100 120,130,145,177
程序从100开始执行,遇到120、130、145、177处的指令时,会产生软int3断点中断,最多允许设9个断点。120、130、145、1 ...


要是直接用 g= 下一条指令   的方法直接跳过去  会有什么危险 是否影响堆栈
2008-07-31 13:57
快速回复:问个debug调试的问题(问题部分解决 万分感谢高人ONEPROBLEM)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017952 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved