C/C++ 分配 DWORD 数组的指针地址
C/C++ assign pointer address of DWORD array
我正在编写一个C/C++ PE解析库,在其中我使用DLL或exe来提取有关目录和标头的信息。我的 prblem 是当我提取导出地址并获取函数地址时,我不知道如何使用该地址将其指向导出函数数量的数组
DWORD ExportRVA = PEHeader->optional.data_directory[0].virtual_address;
image_export_directory* Exports = (image_export_directory*)(RVAToOffset(ExportRVA)+BaseAddress);
ExportTable.nNames = Exports->number_of_names;
ExportTable.nFunctions = Exports->number_of_functions;
ExportTable.pFunctions = Exports->address_of_functions;
ExportTable.nNames = Exports->address_of_names;
ExportTable.pNamesOrdinals = Exports->address_of_name_ordinals;
我是否必须分配一个指向数组的指针,例如
DWORD * AddrFunctions;
更改指针地址?
address_of_functions
和 address_of_names
字段分别是 RVA 数组到实际函数入口点和名称的 RVA,而 address_of_name_ordinals
字段是 WORD 值数组的 RVA,例如:
#define RVAToPtr(RVA) ( ((LPBYTE)BaseAddress) + ((DWORD)(RVA)) )
image_export_directory* Exports = (image_export_directory*) RVAToPtr(PEHeader->optional.data_directory[0].virtual_address);
ExportTable.nFunctions = Exports->number_of_functions;
ExportTable.nNames = Exports->number_of_names;
ExportTable.pFunctions = (PDWORD) RVAToPtr(Exports->address_of_functions);
ExportTable.pNames = (PDWORD) RVAToPtr(Exports->address_of_names);
ExportTable.pNamesOrdinals = (PWORD) RVAToPtr(Exports->address_of_name_ordinals);
for (DWORD i = 0; i < ExportTable.nFunctions; ++i)
{
void *FuncPtr = (void*) RVAToPtr(ExportTable.pFunctions[i]);
char* FuncName = (char*) RVAToPtr(ExportTable.pNames[i]);
WORD FuncOrdinal = ExportTable.Base + ExportTable.pNamesOrdinals[i];
...
}
有关更多详细信息,请参阅 MSDN
相关文章:
- CUDA:统一内存和指针地址的更改
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 向指针地址添加 20 个字节偏移量
- 如何理解智能指针的底层指针地址?
- 初学者问题:C++指针/地址 - 和变量之后不是以前?
- 返回数组中值的指针地址
- C++向指针地址添加 4 个字节
- 指针地址的内存偶尔更改了函数前和后返回
- 如何根据指针地址获取指针内容
- C++ 将指针地址传递给函数
- 直接从指针/地址访问数组的元素
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- 如何保存指针地址,以便另一个指针可以继续处理它
- 间接寻址运算符如何返回带有运算符重载的指针地址
- 使用已删除的指针地址.据我所知,
- 如何保护类外用户可以修改的指针地址?C++
- 多个调用构造函数将更改C 中的成员指针地址
- 类对象指针的向量:如何在指针地址获得价值?C 和SDL_RECT
- Visual Studio C 2K15-在指针地址上获取错误
- 指针地址和参考混乱