首页
社区
课程
招聘
[原创]使用VC6调试器源码级调试win32汇编程序
发表于: 2005-6-3 16:29 18083

[原创]使用VC6调试器源码级调试win32汇编程序

2005-6-3 16:29
18083

首先声明:本人是菜鸟,以下是我在使用中的心得,请不要笑话我^_^

                使用VC6调试器源码级调试win32汇编程序

   本人拙笨,如有错误请批评指正,或有更好的方法或者技巧,欢迎互相交流。hejiwen2001@sohu.com。
       
   使用一个好的调试器无疑对学习win32汇编是至关重要的,本人更偏爱VC的强大调试环境,能否用VC调试器调试哪,于是从网上搜搜,找到一篇Spring.W的文章《贴个用VC++在源码级下调试MASM32汇编程序的方法。。。大家交流。。》,此文就是在此基础上的改进,好像效率更高耶。

编程环境:VC6.0,Masm32v8

方法如下:
1、使用VC6新建一个空工程test(win32 console,win32 application等均可)。
2、把汇编工程中的文件拷至新建工程目录下(hello.asm,makefile),并把这些文件加入工程中管理。
3、配置IDE:
(1)、tools/customize…/tools中添加一个工具nmake。在menu contens中添加一项nmake,Command中填入:nmake.exe,Initial Directory中填入: $(WkspDir),选中use output window。这样就在tools菜单下出现了一个新的菜单项nmake。可以把这个菜单项添加到工具栏中。
(2)、tools/option…/editor在save option中选中save befor running tools。
4、制作makefile文件:

EXE = test.exe                #指定输出文件
OBJS = hello.obj                #需要的目标文件

LINK_FLAG = /subsystem:windows /DEBUG /OUT:debug\test.exe   #连接选项        
#注: (1)/DEBUG必须存在 。
#(2)/OUT:debug\test.exe输出可执行文件名要与VC建立的工程名一致。
#(3)/subsystem:windows:如果是控制台程序,这里需要改为/subsystem:console

ML_FLAG = /c /coff /Zi         #编译选项         
#注: /Zi必须存在

$(EXE): $(OBJS)
   Link $(LINK_FLAG) $(OBJS)
.asm.obj:
   ml $(ML_FLAG) $<
5、点击菜单项tools/nmake,调用masm32中的ml,link进行编译连接程序。

至此就可以使用VC调试器源码级调试汇编程序了,可以设置断点,察看变量、内存、寄存器等,nmake出现语法错误时可以双击output window中的错误行定位到程序中的指定行,改代码时别忘了要用nmake编译。
注:变量最好不要以@开头定义,比如@num,这样的变量名无法再vc下察看。

参考:
http://www.pediy.com/bbshtml/bbs5/pediy50355.htm        作者:Spring.W
http://bbs.pediy.com/showthread.php?threadid=12067 作者:Spring.W
http://www.aogosoft.com/bbs/mixpage.asp?mode=viewoktext&fileid=123 作者:crige
http://asm.yeah.net 《Windows环境下32位汇编语言程序设计》pdf及代码 作者:罗云彬
附件:代码及配置图片。
                                                                                                                                                2005/6/2


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
2
学习,支持。
2005-6-3 22:17
0
雪    币: 257
活跃值: (369)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
3
源码或程序在哪里呢?
2005-6-5 14:15
0
雪    币: 288
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
上传文件!附件:DebugAsmUseVC.rar
2005-6-6 08:29
0
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
5
论坛附件增加上传权限,条件是“发帖数>30”或“精华帖一篇以上”。
2005-6-6 09:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
szy
6
呵呵
我也学习了
2005-6-6 23:45
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
呵呵, 我是新手, 想知道如何在VC中调试多 ASM文件的 项目.  

或者比如, 用Radasm软件组织的项目如何进行调试?  谢谢哈
2005-6-7 16:54
0
雪    币: 288
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
最初由 guoj 发布
呵呵, 我是新手, 想知道如何在VC中调试多 ASM文件的 项目.

或者比如, 用Radasm软件组织的项目如何进行调试? 谢谢哈


我也是新手,相互学习!
我没有用过Radasm,一般用vc.
你可以新建一个asm文件,然后在makefile中修改一下就可以了。
我添加了一个memcpy.asm文件,项目在附件中,你可以看一下。

附件:TEST.rar
2005-6-8 10:10
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢, 但是编译时有个问题需要注意, 就是路径的设置, 设错的话,就编译通不过了
2005-6-8 17:55
0
雪    币: 288
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
最初由 guoj 发布
谢谢, 但是编译时有个问题需要注意, 就是路径的设置, 设错的话,就编译通不过了

甭客气,我们共同进步!
是这样的,需要在环境变量中设置ml.exe,link.exe的路径x:\masm32\bin.
2005-6-9 09:07
0
雪    币: 193
活跃值: (1434)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
NAME=yC

$(NAME).exe: $(NAME).obj rsrc.res
                E:\masm32\bin\Cvtres.exe /machine:ix86 rsrc.res
        E:\masm32\bin\Link  /SUBSYSTEM:WINDOWS /Debug /MERGE:.idata=.text /MERGE:.data=.text /MERGE:.rdata=.text /SECTION:.text,EWR /IGNORE:4078 $(NAME).obj rsrc.obj
$(NAME).obj: $(NAME).asm
        E:\masm32\bin\ml /c /coff /Zi  /Zp1 $(NAME).asm

加了/Debug参数,编译成功以后,居然加的壳不能运行!
去掉了/Debug参数,加壳后的程序可以运行!!

是什么原因呢???

用PEID一查,变成了:yoda's cryptor 1.x / modified
2005-9-19 16:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
有趣的是 看了楼主的文章 我便想在我的vs 2005上试一下 结果惊喜的发现 当我将源文件添加进去的时候 asm后缀被自动识别 对应到专门的配置中了 于是可以直接编译 release debug都不用配置了 哈哈 调试也没问题呢
2005-9-27 23:11
0
雪    币: 193
活跃值: (1434)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
13
yC 1.2的编译能够调试吗????
2005-9-29 16:08
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
不错,不错,受教了!
2006-9-4 13:37
0
游客
登录 | 注册 方可回帖
返回
//