首页
社区
课程
招聘
[旧帖] [原创]Radasm之多模块汇编程序 0.00雪花
发表于: 2012-8-13 19:34 1201

[旧帖] [原创]Radasm之多模块汇编程序 0.00雪花

2012-8-13 19:34
1201
FONT="微软雅黑"]看书看到创建多模块程序这段时,顺便在radasm中写了个小程序想看看实现过程,结果在链接时发现出问题了:error LNK2001: unresolved external symbol,再一看输出窗口,竟然只链接了主程序的obj,没有链接我新建的模块的obj文件。立马百度+谷歌,回答基本都是针对语法的,寥寥无几的针对radasm的回答也没有令人满意的答案,甚至有人很肯定的说,radasm根本就不支持多模块工程,推荐用其他IDE。没办法只好回头看radasm自带的英文帮助,这篇文档我一直作为珍藏,平时是舍不得拿出来看的。。。。。。好吧,我承认是因为我英文比较菜。一看里面就有我想要的答案,具体位置在文档- projects –using modules。
接下来为了和我碰到同样问题然后又搜索不到答案的朋友提供一点方便,用中文讲述一下实现步骤,其实帮助文档里提供了两种实现方法,我这里是第一种,还有一种是通过修改link命令行参数的方式来实现的,我试了一下没成功,希望成功的朋友也和大家分享一下你们的经验、步骤。
原文:You must enable Assemble Modules in Project Options in order to activate module support for a particular project. To add a module to a project requires two steps. First you must select Add New from the Project Menu and add a new module. You will be prompted to create an asm source file. Once you are finished editing the source file you select Assemble Modules form the Make Menu to assemble it. For the linker to see your file you must add it to the list of linked files by adding it's object file to the project using Add Existing and selecting the newly created module.
 步骤:
1.  激活“编译模块”菜单项:如果你新建工程时是选择下一步一路过来的,你会发现菜单“构建”—“编译模块”是灰色不可选的。这时你可以在菜单“工程”—“工程选项”—“构建菜单”中勾选“编译模块”来激活该功能。其实除了原文提供的方法,你还可以在新建工程时就勾选上“编译模块”选项。
2.  新建及编译模块:首先“工程”—“新建”—“模块”,这时会弹出一个对话框,让你给模块命名和选择保存路径,一切就绪后会在你选择的路径下生成一个asm源文件,这就是新建的模块了,接下来给模块写上代码,然后选择“构建”—“编译模块”。如果编译通过,则会在工程文件夹根目录下生成(模块名).obj。
3.  将模块的obj文件添加至工程:“工程”—“导入”—“目标文件”,在弹出的对话框内选择(模块名).obj,接下来在右边的工程窗口内会看到选择的obj被添加进去了。如果步骤没错,接下来在输出窗口中可以看到你添加到obj也被链接进去了。
PS:步骤2、3除了原文中提到的方法外,还可以在右边工程窗口内选中某工程组。如Assembly,然后通过鼠标右键菜单进行同样操作。如果你的模块asm已经事先写好代码了,也可以不选择新建模块,而选择导入你已经完成的模块,当然你非要新建再把代码复制过来也不是不可以。
另外说一点,在我搜索该问题的时候,看到有人回答在主程序中用include(模块名).asm的方法来解决radasm下多模块链接的问题,这个方法是能顺利链接,但却是错误的方法。因为多模块的优势除了便于管理之外还有一个最重要之处是可以提高效率,当修改了某段代码后,只需要把代码所在的模块单独编译一下,然后重新链接就OK了。而链接需要的时间可比编译快的多的多。用include的话,如果修改了代码则需要把所有代码都编译一遍,这点上等价于把所有代码都写在一个源文件里。所以对于多模块的语法还是以教科书为准吧,注意多观察输出窗口你就知道编译和链接的过程中到底发生了什么。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//