大佬教程收集整理的这篇文章主要介绍了获取GetProcAddress地址,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include<stdio.h> #include<Windows.h> __declspec(naked) DWORD getKernel32() { __asm { mov eax,fs:[30h] mov eax,[eax+0ch] mov eax,[eax+14h] mov eax,[eax] mov eax,[eax] mov eax,[eax+10h] ret } } FARPROC MyGetProcAddress(HMODULE hModuleBasE) { PIMAGE_DOS_HEADER lpDosHeader = (PIMAGE_DOS_HEADER)hModuleBase; PIMAGE_NT_HEADERS32 lpNtHeaders = (PIMAGE_NT_HEADERS)((DWORD)hModuleBase + lpDosHeader->e_lfanew); if (!lpNtHeaders->OptionalHeader.DataDirectorY[IMAGE_DIRECTORY_ENTRY_EXPORT].SizE) { return NULL; } if (!lpNtHeaders->OptionalHeader.DataDirectorY[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress)//数据目录表的EXPORT TABLE RVA { return NULL; } PIMAGE_EXPORT_DIRECTORY lpExports = (PIMAGE_EXPORT_DIRECTORY)((DWORD)hModuleBase + (DWORD)lpNtHeaders->OptionalHeader.DataDirectorY[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress); PDWORD lpdwFunName = (PDWORD)((DWORD)hModuleBase + (DWORD)lpExports->AddressOfNames);//输出函数名称表RVA PWORD lpwOrd = (PWORD)((DWORD)hModuleBase + (DWORD)lpExports->AddressOfNameOrdinals);//序号 PDWORD lpdwFunAddr = (PDWORD)((DWORD)hModuleBase + (DWORD)lpExports->AddressOfFunctions);//函数地址 DWORD dwLoop = 0; FARPROC pRet = NULL; for (; dwLoop <= lpExports->numberOfNames - 1; dwLoop++) { char* pFunName = (char*)(lpdwFunName[dwLoop] + (DWORD)hModuleBasE); if (pFunName[0] == 'G'&& pFunName[1] == 'e'&& pFunName[2] == 't'&& pFunName[3] == 'P'&& pFunName[4] == 'r'&& pFunName[5] == 'o'&& pFunName[6] == 'c'&& pFunName[7] == 'A'&& pFunName[8] == 'd'&& pFunName[9] == 'd'&& pFunName[10] == 'r'&& pFunName[11] == 'e'&& pFunName[12] == 's'&& pFunName[13] == 's' ) { pRet = (FARPROC)(lpdwFunAddr[lpwOrd[dwLoop]] + (DWORD)hModuleBasE); break; } } return pRet; } int main() { HMODULE hModule = (HMODULE)getKernel32(); printf("0x%08Xn", hModulE); printf("0x%08Xn", LoadLibraryA("kernel32.dll")); typedef FARPROC(WINAPI *FUN_GetProcAddress)( HMODULE hModule, LPCSTR lpProcName ); FUN_GetProcAddress fn_GetProcAddress; fn_GetProcAddress=(FUN_GetProcAddress)MyGetProcAddress(hModulE); printf("0x%08xn", fn_GetProcAddress); printf("0x%08xn", GetProcAddress); }
以上是大佬教程为你收集整理的获取GetProcAddress地址全部内容,希望文章能够帮你解决获取GetProcAddress地址所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。