首页
社区
课程
招聘
[旧帖] [求助][求助] 0.00雪花
发表于: 2013-11-21 17:52 1736

[旧帖] [求助][求助] 0.00雪花

2013-11-21 17:52
1736
求解答 到底是怎么回事,如果我包含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期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有全代码吗?我试着去编译一下
2013-11-21 22:21
0
雪    币: 159
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
……头疼啊。
2013-11-22 12:29
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
已经解决了 哈哈,谢谢你们
2013-12-26 16:40
0
游客
登录 | 注册 方可回帖
返回
//