六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 54|回复: 0

搭建《虚拟机的设计与实现:c/c++》中的HEC虚拟机的调试环境

[复制链接]

升级  20%

2

主题

2

主题

2

主题

童生

Rank: 1

积分
10
 楼主| 发表于 2013-1-27 05:17:29 | 显示全部楼层 |阅读模式
在阅读编程书籍的时候,如果能边看书边对着机器操作,那么效果会非常好,刚才在看Bill Blunden的《Virtual Machine Design and Implemetation in  C/C++》(中文翻译书名叫做《虚拟机的设计与实现:c/c++》)的第三章,作者从main函数入手,将虚拟机的执行流程娓娓道来。如果能边调试那段代码边看书,这样效果会很不错。因此打开随书的源码的目录,进入win32\hecvm目录(这里是vm的源代码),打开hecvm.mak进行分析(内容如下):
#  /Fefilename  sets the name of the executable
#  /Idirectory    sets a single include directory
#  /linksets linker options to include extra libraries
#  /Ddefinedefines a macro

OPTIONS=/nologo /FeHECVM.EXE /I.\ /DWINDOWS_32  
LINK_OPTIONS=/link /DEFAULTLIB:ws2_32.lib

HECVM.EXE:
CL.EXE $(OPTIONS) main.c $(LINK_OPTIONS)

虽然从来没用过nmake,不过这段make脚本非常简单(作者的注释也非常仔细),直接看最后一行,调用cl.exe编译main.c,参数为
/nologo /Fe /I /D, 查查msdn,马上就知道,需要包含当前目录(/I.\), 需要定义一个预处理定义WINDOWS_32(/D WINDOWS_32),
然后进行link操作,需要包含库ws2_32.lib,因此,打开vs2005,创建一个空项目,将hecvm里的代码全部都拷贝到空项目的vcproj文件所在
的那个目录下去,然后把main.c加入到空项目中,设置项目属性(包含当前目录,增加预处理定义WINDOWS_32, 链接选择附加ws2_32.lib),生成
改项目,成功了!

可以调试了!
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表