2014在同一个进程空间运行两个程序.docVIP

  • 4
  • 0
  • 约6.53千字
  • 约 15页
  • 2017-01-02 发布于北京
  • 举报
在同一个进程空间运行两个程序众所周知,bo2k可以在一个指定的进程空间(比如explorer.exe进程)做为一个线程运行。本文试图找出一种方法,使得任意exe都可以在其他进程中以线程运行(当然,这里说的任意是有条件的,下面会讲到)。   为行文简单起见,我把先加载的exe称为宿主,后加载的exe称为客户。对于上面的例子,explorer.exe为宿主,bo2k.exe为客户。 基本知识   每一个exe都有一个缺省加载基址,一般都是0x400000。如果实际加载基址和缺省基址相同,程序中的重定位表就不需要修正(fixup),否则,就必须修正重定位表;   如果一个程序没有重定位表,而且如果程序不能在缺省基址处加载,那么程序将不能运行。举个例子,Windows95的最低加载基址是0x400000,你在Windows NT上开发了一个exe,指定其加载基址为0x10000,如果连接时让连接器剥离重定位表,那么他将无法在Windows95下运行。   bo2k为了避免和普通程序冲突,选了一个极其特殊的基址:0这个地址一般不会有程序用到。这样bo2k启动后,用WriteProcessMemory将自身复制到宿主进程的0址处,再用CreateRemoteThread远程启动一个线程,从入口点开始执行。   bo2k能够在其他进程空间正常运行

文档评论(0)

1亿VIP精品文档

相关文档