代码如下:
HANDLE hFile;
HANDLE hMapFile;
LPVOID pMapping;
OPENFILENAME ofn;
TCHAR szError[MAX_PATH};
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ZeroMemory(szError,MAX_PATH);
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner=hwnd;
ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_EXPLORER;
ofn.nMaxFile = sizeof(szError);
ofn.lpstrFile = szError;
ofn.lpstrFilter = "ALL\0*.exe\0*.dll\0*.sys\0";
GetOpenFileName(&ofn);
hFile = CreateFile(ofn.lpstrFile,GENERIC_READ,FILE_SHARE_READ,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
hMapFile = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
pMapping = MapViewOfFile(hMapFile,FILE_MAP_READ,0,0,0);
dosHeader = (PIMAGE_DOS_HEADER)pMapping;//转换成Dos MZ 头
问题在于: pMapping 得到的应该是00000000这样的值,但我得到的是
f00000. 直接导致dosHeader为f00000.
继续用这个错误的地址,却能得到正确的信息.比如能得到
魔术数 :dosHeader->e_magic 其值与Stud_PE的值一样.
其他的头的地址也随dosHeader的怪异而怪异:
NtHeader = (PIMAGE_NT_HEADERS)((UINT32)dosHeader+
dosHeader->e_lfanew);
NtHeader的值也成了f000d0.通过NtHeader访问的结构和项
的值都和Stud_PE相同.怎么会这样?
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法