punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
阅读:2219回复:22

SoftIce求助!SOS

楼主#
更多 发布于:2003-03-02 11:56
softice有没有象TRW2000那样中断在程序入口处的功能
我设了个端点bpx 401000但是不管用.
我希望程序能够单步执行以便发现问题-目前迫切需要这个功能.
它那个loader32.exe是干啥用的?
(因为在win2000下调试,所以用softice.)  
多谢了!  
不停学习
lzwf4
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2006-06-09
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-02 15:40
softice有没有象TRW2000那样中断在程序入口处的功能
我设了个端点bpx 401000但是不管用.
我希望程序能够单步执行以便发现问题-目前迫切需要这个功能.
它那个loader32.exe是干啥用的?
(因为在win2000下调试,所以用softice.)  
多谢了!    


你是按Ctrl+D后再下断点bpx 401000吗?这当然不行的,因为你知道在WINDOWS中各个进程都有自己的虚拟空间,你按Ctrl+D时,SoftIce弹出时并不是在你程序的虚拟空间内,所以断点bpx 401000中虚拟地址401000并不是你程序的虚拟地址,这怎么怎么行呢?
解决方法:
1、可以用loader32.exe来加载你的程序。此时SoftIce会在你的程序的WinMain入口弹出。
2、对一些加过壳的程序loader32.exe有可能不起作用,这时你可以用BPX API名 (这个API函数你一定要肯定在你的程序会运行),这时你在下bpx 401000断点。
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-02 17:10
问题是我的程序是汇编程序,
没有winmain啊,怎么办?
也没有引用API函数!
TRW2000是加载程序的时候会默认的停在程序的入口点,
loader32有没有这项功能呢?
要是有的话,怎么使用loader32?
多谢!
这个问题浪费了我很多时间了。
我的程序是win2000下的.
不停学习
w8zz
驱动小牛
驱动小牛
  • 注册日期2001-12-12
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望23点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-03-02 18:22
我的是  2kPRO   ,安了DS2.7  
现在的启动模式是 system,对应的comperiler为,microsoft visual C++6.XX  

我试了,我用vc写的app,release版的调不了~~~
debug版的可以调入,而且是源码级调试,


在老罗的地方看到下文,你的冬冬是不是不包括debug信息阿~~

奇怪:难道symblo loader在2k下只可以调debug版的




  
=======================================================
==========================================================
========================================================
========================================================




 
| 首页 >> 编程详解 >> Win32汇编编程  | Win32ASM 论坛 | 联系站长 |
 
 
 用Soft-ICE实现源码级调试  
作者:罗云彬?发布日期:2000-7-21?阅读次数:3898
 

--------------------------------------------------------------------------------
   在 Windows 编程中,Soft-ICE 是一件必不可少的调试工具,但 Windows 程序的编程中有很多的时候是和数据结构和 API 打交道,经过编译以后,原来的 mov stRect.left,eax 之类的代码也就变成了 mov [xxxx],eax,invoke UpdateWindow,hWnd 之类的语句也就变成了 push [xxxx]/call [xxxxx] 之类的语句,如果你不记的源程序了,你就根本无法知道你在向什么数据写或者调用什么 API,在 C++ 编程的时候,我们都可以进行源代码级别的跟踪调试,但在汇编中,这可能吗?
   答案是可以的,用 Soft-ICE 就可以实现,本文讨论使用 Masm 的情况下用 Soft-ICE 实现源码调试,具体的实现如下:

   首先,在编译的时候要生成带符号信息的 Object 文件,这需要打开 ML 程序的两个选项

ML /coff /Zi ...

/coff 告诉编译器产生符号调试格式的 Object 文件。
/Zi 使 Object 文件中包括符号调试信息。

   然后也要设置 Link 文件,因为 Soft-ICE 使用 CodeView 格式的调试信息,所以 Link 也要包括下面的选项

Link /DEBUG /DEBUGTYPE:CV ...

/DEBUG 选项告诉 Link 在 exe 文件中包含调试信息。
/DEBUGTYPE:CV 当然是调试信息要用 CodeView 格式啦。

   最后,就是如何使用 Soft-ICE 了,如果要使用符号调试功能,你不能再用 Loader32.exe 程序来装入 exe 文件,而是必须用符号转换程序 nmsym,使用方法是在命令行中打入 nmsym /translate:source,package,always /source:. /load:execute,break 你的exe文件,你可以把它编写成一个 bat 文件如下 nmsym /translate:source,package,always /source:. /load:execute,break %1,假定文件名为 debug.bat ,然后你就可以用 debug xxx.exe 来享受源代码调试的乐趣了。
   别的一些必要的设置:你必须把 Soft-ICE 的目录和 Masm 的 bin 目录设置到 path 中,因为这些路径中还有些文件要用到。

--------------------------------------------------------------------------------
 
【关闭本窗口】
 
 
 
 
Copyright? 1998-2002 by 罗云彬,All Rights Reserved,所有文章版权各属于其作者,如转载请务必注明作者!
 
  
小熊和二申公豹 [img]http://www.driverdevelop.com/forum/upload/w8zz/2003-08-11_黑爸.jpg[/img] 二哥,三娃儿,快帮忙!
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-02 20:41
3x!
能告诉我debug版的怎么用loader32调试吗?
具体的操作步骤,
我怎么用它调试还是不能出现winice的调试窗口呢?
我的步骤是:
File(菜单)->Open(菜单)->(选择我需要调试的exe文件)->Module(菜单)->Load;
还是不能出现winice的调试界面。
是不是loader32不应该这样使用啊?
见笑了!
不停学习
w8zz
驱动小牛
驱动小牛
  • 注册日期2001-12-12
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望23点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-03-02 21:53
但我是vc编的阿~~
你看看Module(菜单)->setting弹出的设置的debug


我也是先open那个exe 再Module(菜单)->Load的阿
要不你先translate

动作不成功 symbol loader会显示在右栏信息中的阿

  



`  
小熊和二申公豹 [img]http://www.driverdevelop.com/forum/upload/w8zz/2003-08-11_黑爸.jpg[/img] 二哥,三娃儿,快帮忙!
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-02 22:30
显示:
loading module E:\\masm32\\works\\loadDll\\loaddll.exe...
Module E:\\masm32\\works\\loadDll\\loaddll.exe successfully loaded.
----- \'E:\\masm32\\works\\loadDll\\loaddll.exe\' symbols not loaded -----

应该是没问题的,但是就是不出现softice的调试窗口!?
实在郁闷!

不停学习
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-02 22:39
刚才那个不对,现在这个才是loader32的提示信息:
Translating file: E:\\masm32\\works\\loadDll\\loaddll.exe...
Translated E:\\masm32\\works\\loadDll\\loaddll.exe successfully.
----- Loading symbols for \'E:\\masm32\\works\\loadDll\\loaddll.exe\' -----
E:\\masm32\\works\\loadDll\\loaddll.exe opened successfully
Translating file: E:\\masm32\\works\\loadDll\\loaddll.exe...
Translated E:\\masm32\\works\\loadDll\\loaddll.exe successfully.
Loading symbols for E:\\masm32\\works\\loadDll\\loaddll.nms...
Symbols for E:\\masm32\\works\\loadDll\\loaddll.nms successfully loaded.
Loading module E:\\masm32\\works\\loadDll\\loaddll.exe...
Module E:\\masm32\\works\\loadDll\\loaddll.exe successfully loaded.
----- \'E:\\masm32\\works\\loadDll\\loaddll.exe\' symbols loaded -----
在我点击了load之后,loader32窗口缩小到任务栏上,但是还是没出现softice的调试界面。
下面是makefile:
#this file is for debug
NAME=loaddll
OBJS=$(NAME).obj
EXE=$(NAME).exe
#MYRES=x.res

LINK_FLAG=/subsystem:windows
ML_FLAG=/c /coff

$(EXE): $(OBJS) $(NAME).NMS  
Link  /subsystem:windows /DEBUG /DEBUGTYPE:CV /PDB:NONE $(LINK_FLAG) /out:$(EXE) $(OBJS)
$(OBJS):$(NAME).asm


.asm.obj:
ml /coff /Zi  $(ML_FLAG) $<
.rc.res:
rc $<

兄弟们,帮个忙吧
不停学习
yanghui
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2009-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-03 00:57
你的DS2.7打了补丁没有,不打的话就会有这毛病(不中断在程序的入口处,不一定是WinMain),在这里下载
http://211.86.67.4/myweb/kanxue/tools/tools/Debuggers/softice%20tools/Nmtranspath/Nmtranspath.zip
顺便说一句,不管是debug版还是release版,都能中断在程序的入口处,只是debug版能进行源码级调试,而release版就纯粹是汇编指令级了
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-03-03 18:47
你的DS2.7打了补丁没有,不打的话就会有这毛病(不中断在程序的入口处,不一定是WinMain),在这里下载
http://211.86.67.4/myweb/kanxue/tools/tools/Debuggers/softice%20tools/Nmtranspath/Nmtranspath.zip
顺便说一句,不管是debug版还是release版,都能中断在程序的入口处,只是debug版能进行源码级调试,而release版就纯粹是汇编指令级了


谢谢你的建议,但是softice还是不能停在入口位置,Loader32过后,一点反应都没有?
是不是要讲softice设在开机时自动启动啊?
我用的是win2000,现在是手工启动softice
不停学习
lzwf4
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2006-06-09
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-03-03 19:28
自己写的程序那简单了,在你的入口加上一个INT 3不一下就OK了!!!

但很遇到你问题!!要真是这样只好加 INT 3了啊!!!
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-03-03 19:47
是不是要将softice设在开机时自动启动啊?
怎么设置才能使softice开机时就启动呢?
 :)
不停学习
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-03-03 19:51
自己写的程序那简单了,在你的入口加上一个INT 3不一下就OK了!!!

但很遇到你问题!!要真是这样只好加 INT 3了啊!!!  

我试了!
还是没用!
郁闷啊 :)
不停学习
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-03-04 09:43
问题还没解决呢!
大侠们帮帮我啊
不停学习
lzwf4
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2006-06-09
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-03-04 20:51
[quote]自己写的程序那简单了,在你的入口加上一个INT 3不一下就OK了!!!

但很遇到你问题!!要真是这样只好加 INT 3了啊!!!  

我试了!
还是没用!
郁闷啊 :) [/quote]

你当然要设置 I3HERE ON 才行啊!!你倒底用没用SoftIce啊!!!

你的程序是用 ASM 写的?当然也有WinMain的,如非你是DOS下的程序!!!
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-03-05 09:26
[quote][quote]自己写的程序那简单了,在你的入口加上一个INT 3不一下就OK了!!!

但很遇到你问题!!要真是这样只好加 INT 3了啊!!!  

我试了!
还是没用!
郁闷啊 :) [/quote]

你当然要设置 I3HERE ON 才行啊!!你倒底用没用SoftIce啊!!!

你的程序是用 ASM 写的?当然也有WinMain的,如非你是DOS下的程序!!!  [/quote]

I3HERE ON --是什么意思啊?
MASM写的,就一定有WinMain吗?winmain是c语言特有的吧?
不停学习
silan
驱动小牛
驱动小牛
  • 注册日期2002-02-04
  • 最后登录2004-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-03-05 09:28
楼上说得很有道理:你可以在你的程序的入口处加一条指令int 3,然后Ctrl+D弹出softice,I3HERE ON,再运行你的程序,SOFTICE会在执行到int 3时截住。你要是想用loader32,还要改一下那个设置选项:softice停在程序入口处。然后你就可以load了。
/***************************/ 认认真真学好三个代表,踏踏实实做好无产阶级接班人。 /***************************/
Kerry80
驱动牛犊
驱动牛犊
  • 注册日期2002-11-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分54分
  • 威望36点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-03-05 11:19
我在苦冬瓜那里下过一个辅助程序int3。exe
可以帮助在入口处加int3指令,很方便。
但如果你中断后,改回原来的指令后,
就不能再次中断,不知怎么才能解决
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-03-05 23:44
楼上说得很有道理:你可以在你的程序的入口处加一条指令int 3,然后Ctrl+D弹出softice,I3HERE ON,再运行你的程序,SOFTICE会在执行到int 3时截住。你要是想用loader32,还要改一下那个设置选项:softice停在程序入口处。然后你就可以load了。


是不是在loader32->module->setting->debugging中设置停在程序的入口处,我已经设了,还是没用!这两天被softice气死了!
那位高手救我于水火!
另:
我加了int 3指令(在程序的入口处)
也设了I3HERE ON
但是执行道int 3的时候还是没停!
我是在ttdown下的driverstudio2.7。
深为苦恼!不知道什么原因?
不停学习
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-03-05 23:53
是不是因为我的计算机装了norton?
我恐怕不能找别的原因了! :)
不停学习
上一页
游客

返回顶部