DLL에서 내 보낸 함수의 서명을 찾고 후킹을위한 정확히 동일한 콜백 함수를 정의하려고합니다.C/C++ - 함수 서명을 얻기 위해 __funcsig__ 매크로를 사용 하시겠습니까?
현재 진행중인 프로젝트가 필요합니다.
다음은 기능 위치를 찾기 위해 수행 한 작업입니다.
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__
은 일반적으로 그것을 감싸는 함수의 서명을 반환합니다.
내보내기가 사전 식으로 정렬됨에 따라 이진 검색을 사용하여 특정 이름의 내보내기를 찾을 수 있습니다. 선형 검색이 필요 없습니다. –