大神們好是這樣的,最近在做一個用C# 記憶體加載PE檔案的東西,前面獲取PE頭等一切順利,但是到了最后,獲取到PE的程式入口地址,
用kernel32.dll 的 CreateThread 傳入 程式入口指標, 但是卻什么錯都不報,行程會直接關閉,下面的代碼也不會執行,傳入的PE檔案當然也沒有執行。實在找不到方法,特來此請教各位。加載PE的.net 關鍵代碼如下
IntPtr threadStart = IntPtr.Add(codebase, (int)pe.OptionalHeader64.AOEP);
Console.WriteLine("threadStart location: " + (int)threadStart);
IntPtr hThread = NativeDeclarations.CreateThread(IntPtr.Zero, 0, threadStart, IntPtr.Zero, 0, IntPtr.Zero);
NativeDeclarations.WaitForSingleObject(hThread, 0xFFFFFFFF);
然后我傳入的C++的exe檔案,是直接打開一個計算器用作測驗.僅此而已
void main() {
// insert code here...
WinExec("calc.exe", SW_SHOWMAXIMIZED);
}
查了一些資料如果是程式入口地址不正確會給hThread回傳null吧?我反編譯的時候,逐步執行,到了CreateThread這一行代碼,直接就退出了,也沒法看到報什么錯,和什么例外。。
初學開發,代碼寫的有問題請大家指出,謝謝。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/181594.html
標籤:C#
下一篇:在類檔案中呼叫控制元件的問題
