如果我設置類似0x00000040(我的代碼位於該地址),然後程序崩潰與此錯誤:我可以在PE頭中的代碼中設置入口點嗎?
The application was unable to start correctly (0xc000007b)
但是,如果我從代碼段JMP到0x00400040,然後它工作。
爲什麼我得到那個奇怪的地址(0xc000007b)的錯誤?是否有可能從位於章節之外的代碼開始執行程序?
我使用的是Windows 8
如果我設置類似0x00000040(我的代碼位於該地址),然後程序崩潰與此錯誤:我可以在PE頭中的代碼中設置入口點嗎?
The application was unable to start correctly (0xc000007b)
但是,如果我從代碼段JMP到0x00400040,然後它工作。
爲什麼我得到那個奇怪的地址(0xc000007b)的錯誤?是否有可能從位於章節之外的代碼開始執行程序?
我使用的是Windows 8
0xc000007b
是從Windows錯誤代碼。你可以看看他們here。你的是STATUS_INVALID_IMAGE_FORMAT
。
我假設你在PE標題中修改了AddressOfEntryPoint
。對於here:
AddressOfEntryPoint: A pointer to the entry point function, relative to the image base address. For executable files, this is the starting address. For device drivers, this is the address of the initialization function. The entry point function is optional for DLLs. When no entry point is present, this member is zero.
因此,如果您將此值設置爲0x40,它會指向在DOS頭(你的模塊的開始)的地址。內存中的頭文件塊沒有正確的內存保護來執行,所以OS加載程序將失敗。
我的猜測是,你實際上想要跳到0x1040,在典型的可執行文件的Windows 8系統上,它將在代碼段的第一個地址之後是0x40字節。