阅读:2219回复:22
SoftIce求助!SOS
softice有没有象TRW2000那样中断在程序入口处的功能
我设了个端点bpx 401000但是不管用. 我希望程序能够单步执行以便发现问题-目前迫切需要这个功能. 它那个loader32.exe是干啥用的? (因为在win2000下调试,所以用softice.) 多谢了! |
|
|
沙发#
发布于:2003-03-02 15:40
softice有没有象TRW2000那样中断在程序入口处的功能 你是按Ctrl+D后再下断点bpx 401000吗?这当然不行的,因为你知道在WINDOWS中各个进程都有自己的虚拟空间,你按Ctrl+D时,SoftIce弹出时并不是在你程序的虚拟空间内,所以断点bpx 401000中虚拟地址401000并不是你程序的虚拟地址,这怎么怎么行呢? 解决方法: 1、可以用loader32.exe来加载你的程序。此时SoftIce会在你的程序的WinMain入口弹出。 2、对一些加过壳的程序loader32.exe有可能不起作用,这时你可以用BPX API名 (这个API函数你一定要肯定在你的程序会运行),这时你在下bpx 401000断点。 |
|
板凳#
发布于:2003-03-02 17:10
问题是我的程序是汇编程序,
没有winmain啊,怎么办? 也没有引用API函数! TRW2000是加载程序的时候会默认的停在程序的入口点, loader32有没有这项功能呢? 要是有的话,怎么使用loader32? 多谢! 这个问题浪费了我很多时间了。 我的程序是win2000下的. |
|
|
地板#
发布于: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,所有文章版权各属于其作者,如转载请务必注明作者! |
|
|
地下室#
发布于:2003-03-02 20:41
3x!
能告诉我debug版的怎么用loader32调试吗? 具体的操作步骤, 我怎么用它调试还是不能出现winice的调试窗口呢? 我的步骤是: File(菜单)->Open(菜单)->(选择我需要调试的exe文件)->Module(菜单)->Load; 还是不能出现winice的调试界面。 是不是loader32不应该这样使用啊? 见笑了! |
|
|
5楼#
发布于:2003-03-02 21:53
但我是vc编的阿~~
你看看Module(菜单)->setting弹出的设置的debug 我也是先open那个exe 再Module(菜单)->Load的阿 要不你先translate 动作不成功 symbol loader会显示在右栏信息中的阿 ` |
|
|
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的调试窗口!? 实在郁闷! |
|
|
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 $< 兄弟们,帮个忙吧 |
|
|
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版就纯粹是汇编指令级了 |
|
9楼#
发布于:2003-03-03 18:47
你的DS2.7打了补丁没有,不打的话就会有这毛病(不中断在程序的入口处,不一定是WinMain),在这里下载 谢谢你的建议,但是softice还是不能停在入口位置,Loader32过后,一点反应都没有? 是不是要讲softice设在开机时自动启动啊? 我用的是win2000,现在是手工启动softice |
|
|
10楼#
发布于:2003-03-03 19:28
自己写的程序那简单了,在你的入口加上一个INT 3不一下就OK了!!!
但很遇到你问题!!要真是这样只好加 INT 3了啊!!! |
|
11楼#
发布于:2003-03-03 19:47
是不是要将softice设在开机时自动启动啊?
怎么设置才能使softice开机时就启动呢? :) |
|
|
12楼#
发布于:2003-03-03 19:51
自己写的程序那简单了,在你的入口加上一个INT 3不一下就OK了!!! 我试了! 还是没用! 郁闷啊 :) |
|
|
13楼#
发布于:2003-03-04 09:43
问题还没解决呢!
大侠们帮帮我啊 |
|
|
14楼#
发布于:2003-03-04 20:51
[quote]自己写的程序那简单了,在你的入口加上一个INT 3不一下就OK了!!! 我试了! 还是没用! 郁闷啊 :) [/quote] 你当然要设置 I3HERE ON 才行啊!!你倒底用没用SoftIce啊!!! 你的程序是用 ASM 写的?当然也有WinMain的,如非你是DOS下的程序!!! |
|
15楼#
发布于:2003-03-05 09:26
[quote][quote]自己写的程序那简单了,在你的入口加上一个INT 3不一下就OK了!!! 我试了! 还是没用! 郁闷啊 :) [/quote] 你当然要设置 I3HERE ON 才行啊!!你倒底用没用SoftIce啊!!! 你的程序是用 ASM 写的?当然也有WinMain的,如非你是DOS下的程序!!! [/quote] I3HERE ON --是什么意思啊? MASM写的,就一定有WinMain吗?winmain是c语言特有的吧? |
|
|
16楼#
发布于:2003-03-05 09:28
楼上说得很有道理:你可以在你的程序的入口处加一条指令int 3,然后Ctrl+D弹出softice,I3HERE ON,再运行你的程序,SOFTICE会在执行到int 3时截住。你要是想用loader32,还要改一下那个设置选项:softice停在程序入口处。然后你就可以load了。
|
|
|
17楼#
发布于:2003-03-05 11:19
我在苦冬瓜那里下过一个辅助程序int3。exe
可以帮助在入口处加int3指令,很方便。 但如果你中断后,改回原来的指令后, 就不能再次中断,不知怎么才能解决 |
|
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。 深为苦恼!不知道什么原因? |
|
|
19楼#
发布于:2003-03-05 23:53
是不是因为我的计算机装了norton?
我恐怕不能找别的原因了! :) |
|
|
上一页
下一页