F
finger
Unregistered / Unconfirmed
GUEST, unregistred user!
这个问题在论坛中被提过多次了。但是回答我并不满意。<br>不过,我也看到较好的回答。比如:<br>来自:xf-wangyi, 时间:2002-7-3 21:20:00, ID:1187629 <br>我没有试过,你试一下<br><br>这样取得的地址实际上是这个封装代码的,而这段代码又处于 UnmapViewOfMap 解除映像范围类,因此,到调用 DeleteFile 函数的时候就无法反问到这段代码了。<br><br>解决的办法是,用GetProcAddress动态取得这几个API的地址。 <br><br>Delphi&CB代码如下: <br><br>//////////////////////////////////////////////<br>procedure DeleteSelf;<br>var<br> pExitProcess: Pointer;<br> pDeleteFile: Pointer;<br> pUnmapViewOfFile: Pointer;<br> hModule: THANDLE;<br> cBuf:array[0..MAX_PATH]of Char;<br>begin<br> hModule := GetModuleHandle('kernel32');<br> if hModule <> 0 then<br> begin<br> pExitProcess := GetProcAddress(hModule, 'ExitProcess');<br> pDeleteFile := GetProcAddress(hModule, 'DeleteFileA');<br> pUnmapViewOfFile := GetProcAddress(hModule, 'UnmapViewOfFile');<br> end else<br> begin<br> pExitProcess := nil;<br> pDeleteFile := nil;<br> pUnmapViewOfFile := nil;<br> end; <br> hModule := GetModuleHandle(nil);<br> GetModuleFileName(hModule, cBuf, Sizeof(cBuf));<br> CloseHandle(THANDLE(4));<br> asm<br> XOR EAX, EAX;<br> PUSH EAX;<br> PUSH EAX;<br> LEA EAX, cBuf;<br> PUSH EAX;<br> MOV EAX, pExitProcess; PUSH EAX; MOV EAX, hModule; PUSH EAX; MOV EAX, pDeleteFile;<br> PUSH EAX;<br> MOV EAX, pUnmapViewOfFile;<br> PUSH EAX;<br> RET;<br> end;<br>end;<br>但是,我在调试时发现它只是杀掉进程,大家用什么好方法吗?最好有源码。<br> <br>