加壳上碰到的问题
2018-04-10 本文已影响8人
JasonChen8888
最近由于公司项目原因,开始学习入手C++的加壳技术壳的编写,参考文献oBuYiSeng的博客里面详细的介绍了加壳的原理和开发步骤。
个人在开发的时候碰到了一些问题,总结一下,希望对在做加壳的朋友有帮助,如果有不足的地方,望大家指出
个人的开发环境:vs2015
-
问题一
在构建项目加壳代码Stub.DLL的时候出现LNK2001:无法解析外部符号 __free 和LNK2001:无法解析外部符号 __memove 等错误的问题
原因:在构建dll项目的时候选择win32的时候选择了支持MFC,当时构建项目是基于mfc的项目,所以勾选了MFC的支持
图一.png
解决:在构建的时候默认不要添加支持MFC的支持
-
问题二:
在解决问题一后,构建项目后,实现加壳代码后,添加了指定程序入口函数
#pragma comment(linker, "/entry:\"StubEntryPoint\"") // 指定程序入口函数为StubEntryPoint()
#pragma comment(linker, "/merge:.data=.text") // 将.data合并到.text
#pragma comment(linker, "/merge:.rdata=.text") // 将.rdata合并到.text
#pragma comment(linker, "/section:.text,RWE") // 将.text段的属性设置为可读、可写、可执行
这个时候编译,会报错误,如下:
![](https://img.haomeiwen.com/i10761725/22b15793a26b7cc8.png)
原因:因为在各种尝试后,最后在切换编译SDK版本的时候发现可以编辑过,因为在VS2015不支持该参数
命令
解决:目前的解决方案是将平台的工具集切换到2012的,编译正常通过,个人试过了2013也是可以编译通过
![](https://img.haomeiwen.com/i10761725/f41f1f1158b0869d.png)
以上问题,目前还没有发现其他的解决方法,如果有哪位大神有其他解决方案,欢迎下方留言指导