使用WDK开发普通XP应用程序注意点

这几天尝试拿WDK的库和编译器编译普通程序。目的是为了能链接到MSVCRT.DLL上去,减小自身程序体积。

很长时间了也没有人报有什么问题,自己是Win7的系统,其实也没有测试过XP下能不能使用。

但是很坑爹的是,事实证明不行……今天贴吧上有人报了XP下无法启动,报msvcrt.dll中找不到_except_handler4_common入口。

我检查了一下我编译出来的程序的导入表,果不其然有_except_handler4_common……

网上搜了一下,出来的基本都是说你把dwmapi.dll改名吧。但是我现在是导入表中直接有这一项,明显不是这个的问题。

继续阅读使用WDK开发普通XP应用程序注意点

EasyHook的使用

在函数调用下钩子的做法,在制作非想天则对战平台以及Vorbis版的东方弹幕游戏,以及数据文件压缩版的东方非想天则的时候都做过了。无非也就是两种做法,一个是修改IAT,编译器在生成调用DLL里函数的代码的时候,用的是JMP DWORD [mm32]这样的语句,Windows在把EXE读入内存以后,查找它引用的DLL里的函数,然后加载这些DLL,然后把函数的地址填入一个表(数组)中,mm32就是这样的函数地址被填入的地方。那么只要修改这个地址,就能修改调用DLL中的函数的时候真正调用的函数。另一做法是修改函数入口处的机器代码,改为一个JMP rel32这样的语句,使得调用指定函数的时候会直接JUMP到自己的函数里面。这两种做法都要注意自己要调用真实函数的时候不要受影响就好了:导入表是以模块区分的,一个进程中的各个模块的导入表互不影响,所以如果是一个DLL把EXE的导入表改了,那么只要这个DLL的导入表是正常的,那么这个DLL中就可以随意调用原函数不受影响;修改入口处机器代码的做法,因为只修改了一个入口,所以能够执行入口处的几条指令,然后跳转到没有修改的地方继续执行下去,问题就能解决了。

继续阅读EasyHook的使用