2012-07-11 68 views
0

我一直在尝试使可执行程序进入WINDOWS进程,程序编译时没有任何错误,但是当我运行程序时(通过Microsoft Visual Studio的调试模式),我得到一个运行时错误。视觉工作室突出一条线(我已标记它的评论)运行时错误,同时在运行时从应用程序中获取PE头

#include <windows.h> 
#include "resource.h" 

int main() 
{ 
PIMAGE_DOS_HEADER IDH; 
PIMAGE_NT_HEADERS INTH; 
PIMAGE_SECTION_HEADER ISH; 

//Lets load the resource 
HRSRC hResource=FindResourceA(NULL,(LPCSTR)MAKEINTRESOURCE(IDR_EXE1),"EXE"); 
DWORD ResourceSize=SizeofResource(NULL,hResource); 
HGLOBAL hGlob=LoadResource(NULL,hResource); 
LPSTR lpFileMaped=(LPSTR)LockResource(hGlob); 

//obtain the DOS and PE headers 
IDH=(PIMAGE_DOS_HEADER)&lpFileMaped[0]; 
INTH=(PIMAGE_NT_HEADERS)&lpFileMaped[IDH->e_lfanew]; //this is the highlighted line 
             // which supposedly causes an error at runtime 

.... 

为什么这样,任何人都可以详细说明?

+1

和错误会偏移......? – 2012-07-11 18:21:55

+0

完全没有任何错误检查将最终使AccessViolation上的代码炸弹,当你遵从0xcccccccc – 2012-07-11 18:57:18

+0

+ 1上述评论 - 你确定最初的FindResource调用成功吗?它总是*更好地检查可能失败的函数的返回值。 – reuben 2012-07-15 19:32:19

回答