linghuchong 该用户已被删除
|
回复: 装入一个exe, 并执行
楼上的回复我觉得是不对的.
因为这和操作系统的版本没有关系. 问题是如果按照进程装入一个exe, 那么它的基址就是MODULE是0x00400000,而LoadLibrary()装入则不是这个地址. 而exe文件中引用系统函数是间接引用, 就是先把系统函数的地址放入内存地址__imp__XXX, xxx是函数名,然后调用该地址指向的函数. 这样系统装入exe或者DLL的时候, LoadLibrary()会自动修改__imp_xxx的值, 使之指向当前系统函数的地址.
现在是LoadLibrary()已经正确修改了LoadLibrary()装入的exe文件中的__imp_XXX的值, 但是变量__imp_xxx本身的地址是以LoadLibrary()装入的地址作为基址的. 而exe中引用的__imp_xxx却是以0x00400000为基址的, 那么指令中变量__imp_xxx的地址自然就不是LoadLibrary()修改的那个地方, 因而导致出错了.
所以问题不是在系统函数地址装错了, 而是那个间接引用错了. 但是如何改正这个间接引用的错误呢? LoadLibraryEx()有什么不同呢? 即使自己重新设置引入表还是不能解决问题啊.
高手请帮忙啊. |
|