求解答 到底是怎么回事,如果我包含winnt.h文件进来的话,错误提示更多,不包含的的话,又找不到定义,是不是头文件冲突啊,在线等解答~~~~~
就这几个头文件
#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
#include <ntddk.h>
#ifdef __cplusplus
}
#endif
#include <windef.h>
部分代码
//通过函数名和DLL的基地址查找函数地址
PVOID GetSectionDllFuncAddr(IN PCHAR lpFunctionName, IN PVOID BaseAddress)
{
PVOID functionAddress = NULL;
PIMAGE_DOS_HEADER dosheader;
PIMAGE_OPTIONAL_HEADER opthdr;
PIMAGE_EXPORT_DIRECTORY pExportTable;
PDWORD arrayOfFunctionAddresses;
PDWORD arrayOfFunctionNames;
PWORD arrayOfFunctionOrdinals;
DWORD Base;
STRING ntFunctionName, ntFunctionNameSearch;
PCHAR functionName;
DWORD functionOrdinal;
ULONG x;
ASSERT(lpFunctionName && BaseAddress);
dosheader = (PIMAGE_DOS_HEADER)BaseAddress;
opthdr =(PIMAGE_OPTIONAL_HEADER)((PBYTE)BaseAddress+dosheader->e_lfanew+24);
pExportTable =(PIMAGE_EXPORT_DIRECTORY)((PBYTE)BaseAddress + opthdr->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
arrayOfFunctionAddresses = (PDWORD)( (PBYTE)BaseAddress + pExportTable->AddressOfFunctions);
arrayOfFunctionNames = (PDWORD)( (PBYTE)BaseAddress + pExportTable->AddressOfNames);
arrayOfFunctionOrdinals = (PWORD)( (PBYTE)BaseAddress + pExportTable->AddressOfNameOrdinals);
Base = pExportTable->Base;
RtlInitString(&ntFunctionNameSearch, lpFunctionName);
for (x = 0; x < pExportTable->NumberOfFunctions; x++)
{
functionName = (PCHAR)( (PBYTE)BaseAddress + arrayOfFunctionNames[x]);
RtlInitString(&ntFunctionName, functionName);
functionOrdinal = arrayOfFunctionOrdinals[x] + Base - 1;
if (RtlCompareString(&ntFunctionName, &ntFunctionNameSearch, TRUE) == 0)
{
functionAddress = (PBYTE)BaseAddress + arrayOfFunctionAddresses[functionOrdinal];
break;
}
}
return functionAddress;
}
下面是出现的错误
>SSDTHOOK.cpp(592): error C2065: “PIMAGE_OPTIONAL_HEADER”: 未声明的标识符
1>SSDTHOOK.cpp(592): error C2146: 语法错误: 缺少“;”(在标识符“opthdr”的前面)
1>SSDTHOOK.cpp(592): error C2065: “opthdr”: 未声明的标识符
1>SSDTHOOK.cpp(593): error C2065: “PIMAGE_EXPORT_DIRECTORY”: 未声明的标识符
1>SSDTHOOK.cpp(593): error C2146: 语法错误: 缺少“;”(在标识符“pExportTable”的前面)
1>SSDTHOOK.cpp(593): error C2065: “pExportTable”: 未声明的标识符
1>SSDTHOOK.cpp(604): error C2065: “opthdr”: 未声明的标识符
1>SSDTHOOK.cpp(604): error C2065: “PIMAGE_OPTIONAL_HEADER”: 未声明的标识符
1>SSDTHOOK.cpp(605): error C2065: “pExportTable”: 未声明的标识符
1>SSDTHOOK.cpp(605): error C2065: “PIMAGE_EXPORT_DIRECTORY”: 未声明的标识符
1>SSDTHOOK.cpp(605): error C2065: “opthdr”: 未声明的标识符
1>SSDTHOOK.cpp(605): error C2227: “->DataDirectory”的左边必须指向类/结构/联合/泛型类型
1> 类型是“'unknown-type'”
1>SSDTHOOK.cpp(605): error C2065: “IMAGE_DIRECTORY_ENTRY_EXPORT”: 未声明的标识符
1>SSDTHOOK.cpp(605): error C2228: “.VirtualAddress”的左边必须有类/结构/联合
1>SSDTHOOK.cpp(607): error C2065: “pExportTable”: 未声明的标识符
1>SSDTHOOK.cpp(607): error C2227: “->AddressOfFunctions”的左边必须指向类/结构/联合/泛型类型
1> 类型是“'unknown-type'”
1>SSDTHOOK.cpp(608): error C2065: “pExportTable”: 未声明的标识符
1>SSDTHOOK.cpp(608): error C2227: “->AddressOfNames”的左边必须指向类/结构/联合/泛型类型
1> 类型是“'unknown-type'”
1>SSDTHOOK.cpp(609): error C2065: “pExportTable”: 未声明的标识符
1>SSDTHOOK.cpp(609): error C2227: “->AddressOfNameOrdinals”的左边必须指向类/结构/联合/泛型类型
1> 类型是“'unknown-type'”
1>SSDTHOOK.cpp(610): error C2065: “pExportTable”: 未声明的标识符
1>SSDTHOOK.cpp(610): error C2227: “->Base”的左边必须指向类/结构/联合/泛型类型
1> 类型是“'unknown-type'”
1>SSDTHOOK.cpp(612): error C2065: “pExportTable”: 未声明的标识符
1>SSDTHOOK.cpp(612): error C2227: “->NumberOfFunctions”的左边必须指向类/结构/联合/泛型类型
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)