gpt4 book ai didi

c++ - C/C++ — 使用 __funcsig__ 宏来获取函数签名?

转载 作者:行者123 更新时间:2023-11-28 07:59:03 25 4
gpt4 key购买 nike

我试图找到从 DLL 导出的函数的签名,并为 Hook 定义完全相同的回调函数。

这是我目前正在进行的项目的需要。

下面是我找到函数位置所做的。

HMODULE hModd = LoadLibraryEx("xxx.dll",NULL,DONT_RESOLVE_DLL_REFERENCES);

dosHeader = ((PIMAGE_DOS_HEADER)hModd);
/*if(((PIMAGE_DOS_HEADER)hModd)->e_magic == IMAGE_DOS_SIGNATURE)
MessageBoxA(NULL,"wow","exe",MB_OK);/**/
ntHeader = (PIMAGE_NT_HEADERS)((PBYTE)hModd + ((PIMAGE_DOS_HEADER)hModd)->e_lfanew);
PIMAGE_EXPORT_DIRECTORY exports = (PIMAGE_EXPORT_DIRECTORY)((BYTE *)hModd + ntHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
PVOID names = (BYTE *)hModd + exports->AddressOfNames;
WORD *pOrds = (WORD*)((BYTE*)hModd + exports->AddressOfNameOrdinals);
DWORD* addr = (DWORD*)((BYTE*)hModd + exports->AddressOfFunctions);
for (int i = 0; i < exports->NumberOfNames; ++i,addr++)
{
char funcName[255];
char const *target = "Test";
ZeroMemory(funcName,sizeof(funcName));
//strcpy(funcName,(char*)((BYTE *)hModd + ((DWORD *)names)[i]));
if(strcmp((char*)((BYTE *)hModd + ((DWORD *)names)[i]),target))
{
printf("Export: %s Address: %X \n", (char*)((BYTE *)hModd + ((DWORD *)names)[i]),*addr);
offsetTarget = *addr;
}
}

如何使用 __funcsig__ 宏获取 DLL 函数签名?

__funcsig__ 通常返回包含它的函数的签名。

最佳答案

您不能为此使用 __FUNCSIG__:如您所说,它会产生封闭函数的签名。

无法获得任意模块导出的任意函数的签名。信息根本不存在:您需要某种形式的附加元数据来描述函数的类型。

关于c++ - C/C++ — 使用 __funcsig__ 宏来获取函数签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11981126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com