我用vb内存映射文件类建立了内存映射文件,并知道了首地址。也就是说文件已经在内存中了。如何运行这个文件呢?---这个文件类型是不确定的,有可能是exe,有可能是txt或doc或jpg...,我想在程序用shell方式调用这个内存中的文件,该如何操作?
 请教高手了!如果有答案请发[email protected]

解决方案 »

  1.   

    意向天开~~除非自己在ring0层拦截PE的加载过程,这个过程非常复杂相当于自己实现PE Load再简单的方法就是自己写个EXE解析相关的文件格式
      

  2.   

    虽然PE文件是以内存影射的方式读入并执行的,但以前我说过,系统在调入PE时,要做几次重定位,同时,该地址是属于独立的2G地址(另外2G由系统使用了,这就可我们常说的32位内存地址空间)。举例说吧,假如现在PE文件中有一个静态变量(或函数入口)地址为0x000ff000,调入内存时不需要重定位,但在自己的进程中读入时,由于进程已占用了一些地址,内存影射根本无法保证这个变量或函数地址仍然为0x000ff000,那么在CALL或JMP或LEA或MOV等操作时,显然会出现地址错误。就算你使用虚拟内存强制指定了正确的地址,但由于你的进程有完全不同的栈顶,直接CAL或JMP时,根本就转不到0x000ff000这个地址,就算碰巧可以正确寻址,也由于无法正确平栈而导致栈溢出。尤其某些资源需要重定位时,更增加了地址确定的难度。所以,直接使用同存影射方式在自己的空间里执行另一个PE,是一项根本实现不了的任务。如果真的需要,只能使用远程线程注入的方式调入另一个PE到自己进程的空间执行。或者,如果你懂得反编译,可以使用虚拟内存调入PE后,自己重定位所有需要重定位的地址,同时实现栈平衡就可以了。不过,这些都应该不是VB编程者所关心或需要掌握的内容。
      

  3.   

    可以自己写个壳,加到exe上。PELoder加载壳部分,壳控制你的EXE。
      

  4.   

    原先没看清楚LZ的问题,原来是想SHELL内存中的文件,这好办,下载一个虚拟磁盘软件就可以了。