白色海岸线 该用户已被删除
|
回复: 装入一个exe, 并执行
大体看了下原帖子,有一部分还是冒看懂...
对于楼主的问题:为什么必须LoadLibraryEx(), 然后自己搞定引入表?
我知道使用LoadLibrary()装入exe后,执行入口不成功,而且会出错, 但是自己搞定
引入表有什么不同吗?
LoadLibraryEx()是把其载入内存,这你是知道的,对于导入表中的函数的地址,这是每个windows装载器在装载的时候都必须重新覆盖的.因为不同版本的系统,其提供的动态库的相同API的导出地址是不同的.系统必须用GetProAddress来重新获取其正确地址并进行覆盖.否则一个win2000下编译的程序中所产生的函数导入地址,到了xp上将不能正确使用.我想你所说的GetVersionExA的错误便是如此.
该程序实际的功能便是模拟了该过程,找到导入表的函数地址,然后根据导入函数名和模块名获取在本机上的正确的导入地址,然后修改内存属性,最后重新覆盖了导入表的函数地址,使其能正确实现跳转.在修改完导入表后,找到启动进程的加载地址和入口地址,然后定义一个函数指针,使流程跳转到该文件入口地址运行.这样就似乎以一个线程的方式运行了该进程. |
|