一个dos程序,需要在windows XP下运行,由一个vc写的win32程序加载作为子进程,然后win32程序要改写dos程序的内存,请问:
如果已经知道要改写的进程的内存地址,如何进行改写?因为dos的地址是段:偏移量的形式,与win32程序的虚拟地址不同,请教如何解决?
谢谢!
如果已经知道要改写的进程的内存地址,如何进行改写?因为dos的地址是段:偏移量的形式,与win32程序的虚拟地址不同,请教如何解决?
谢谢!
假定我要改写子进程0x1200:0058这个地址,我的win32程序如何定位子进程这个地址?
另外,在改写之前,我肯定要将子进程挂起,如果我用下述代码来创建一个进程:
CreateProcess(Pchar(sDir + 'a.exe'), //lpApplicationName
'DialogServer.exe', //lpCommandLine
NIL, //lpProcessAttributes
NIL, //lpThreadAttributes
false, //bInheritHandles
Create_Suspended + NORMAL_PRIORITY_CLASS, //dwCreateFlags
NIL, //lpEnvironment
Pchar(sDir), //lpCurrentDirectory
siInfo, //lpStartupInfo
piInfo); //lpProcessInformation;其中参数Create_Suspended表示进程创建时先挂起,但我发现这个16位dos程序不起作用,也就是16位程序不会停在入口处,这样,改写就不起作用了。
像这样的情况应该如何解决?
个人认为XP里面的win16子系统是个虚拟系统,也就是说是通过虚拟机制来运行dos程序的,那么楼主就是要对虚拟系统里面的程序进行修改,就像通过native code修改java application运行时状态,不是没有可能,但肯定非常麻烦。