-
-
[原创]VC++使用OD反汇编引擎(非BC做DLL或LIB包装)
-
发表于:
2012-1-27 14:35
8956
-
[原创]VC++使用OD反汇编引擎(非BC做DLL或LIB包装)
这几天一直在用OD调试一带tmd壳程序,断点时而成功时而崩溃,不知何故。侥幸在某次内存访问断点时,找到我要找的代码,于是准备向上追溯直到拿到全局实例的地址。可断点经常崩溃,又不会写OnlyScript,每次修改代码查看堆栈均很麻烦。于是萌生出自己写个反汇编器,打印出某处的反汇编,在需要下断查看堆栈处写一个hook,打印堆栈后还原hook并继续执行。
首先要解决的是反汇编问题,在网上狂搜,找到OD反汇编引擎,它竟然是开源的,再加上对OD的反汇编出来的文本风格比较熟悉,用它最合适了。(下载地址:http://www.ollydbg.de/disasm.zip)。
在官网看文档发现,官网只在BC和gcc下编译过,没有测试过VC是否能编译。用VC编译,提示缺少头文件<dir.h>。直接注释掉缺少的头文件,再次编译报告找不到pow10l库函数。
再次在网上找资料,无果,试图用BC编译成LIB,在VC中引用,可LIB格式不一致,仍不行。退而求其次,准备编译成DLL动态引用,可引擎是C写的使用了多个全局变量,这个封装以后要调整就麻烦了。于是决定继续试试用VC编译。
在网上查pow10l,发现原来只是以10为底的幂函数即10的n次方,于是换成pow(10,N),编译通过,测试程序正常。
(在assembl.c文件中把:floating*=pow10l(decimal*base);改为:floating*=pow(10,decimal*base);)
在使用过程中还发现一个问题,打印输出的OpCode总是莫名其妙多出很多FF,后来**C多次调试对比后才发现,VS2008默认的char是有符号的,而BC的char默认是无符号的。在项目属性C++选项里设置后,问题解决。
转载请全文转载并注明出处。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!