PEB中获取指定名称的DLL的基址
2013-06-02 16:01
513 查看
//先从PEB中获取指定名称的DLL的基址
ULONG GetModuleHandleFromProcessPEB(ULONG Peb,char *szDllName)
{
PPEB_LDR_DATA pLdrData;
PLDR_DATA_TABLE_ENTRY pLdrDataEntry;
PLIST_ENTRY pListHead,pListNext;
ANSI_STRING ansiDllName;
ULONG DllBase=0;
__try
{
pLdrData=(PPEB_LDR_DATA)*(ULONG*)((char*)Peb+0xC);
pListHead=&(pLdrData->InLoadOrderModuleList);
pListNext=pListHead->Flink;
for (pListHead;pListNext!=pListHead;pListNext=pListNext->Flink)
{
pLdrDataEntry=(PLDR_DATA_TABLE_ENTRY)pListNext;
if (pLdrDataEntry->BaseDllName.Buffer)
{
RtlUnicodeStringToAnsiString(&ansiDllName,& (pLdrDataEntry->BaseDllName),TRUE);
//dprintf("Base=0x%08X %s\n",pLdrDataEntry->DllBase,ansiDllName.Buffer);
if (!_stricmp(szDllName,ansiDllName.Buffer))
{
DllBase=(ULONG)pLdrDataEntry->DllBase;
}
RtlFreeAnsiString(&ansiDllName);
//若找到就退出循环
if (DllBase) break;
}//end of if
}
return DllBase;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
DbgPrint("Error occured while searching module in PEB.\n");
return 0;
}
}
ULONG GetModuleHandleFromProcessPEB(ULONG Peb,char *szDllName)
{
PPEB_LDR_DATA pLdrData;
PLDR_DATA_TABLE_ENTRY pLdrDataEntry;
PLIST_ENTRY pListHead,pListNext;
ANSI_STRING ansiDllName;
ULONG DllBase=0;
__try
{
pLdrData=(PPEB_LDR_DATA)*(ULONG*)((char*)Peb+0xC);
pListHead=&(pLdrData->InLoadOrderModuleList);
pListNext=pListHead->Flink;
for (pListHead;pListNext!=pListHead;pListNext=pListNext->Flink)
{
pLdrDataEntry=(PLDR_DATA_TABLE_ENTRY)pListNext;
if (pLdrDataEntry->BaseDllName.Buffer)
{
RtlUnicodeStringToAnsiString(&ansiDllName,& (pLdrDataEntry->BaseDllName),TRUE);
//dprintf("Base=0x%08X %s\n",pLdrDataEntry->DllBase,ansiDllName.Buffer);
if (!_stricmp(szDllName,ansiDllName.Buffer))
{
DllBase=(ULONG)pLdrDataEntry->DllBase;
}
RtlFreeAnsiString(&ansiDllName);
//若找到就退出循环
if (DllBase) break;
}//end of if
}
return DllBase;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
DbgPrint("Error occured while searching module in PEB.\n");
return 0;
}
}
相关文章推荐
- 获取指定名称DLL
- 获取指定目录(包含子目录)下所有的txt文件的个数,并打印文件名称。程序1。
- 获取指定名称主机的IP
- ring0获取指定进程的PEB
- 搜索PEB的相关结构获取Kernel32.DLL的基址
- 获取指定文件的扩展名称
- GetModuleHandle(NULL)获取当前DLL模块基址?
- 获取指定目录(包含子目录)下所有的txt文件的个数,并打印文件名称。程序2。
- java 获取指定目录下所有文件的名称
- 获取指定名称的注册表值
- 获取指定url的扩展名称以及文章ID
- 002--java获取指定包下面的类名称
- 获取指定路径文件夹的名称,并存入text文本
- (java)获取某文件夹下面所有的指定类型的文件名称,并根据情况返回可用的名称
- python爬虫初级--获取指定页面上的菜单名称以及链接,然后导出
- 本方法用于获取指定文件夹的子文件夹中的图片名称,并写入到FileList.ini文件中去(格式...
- JAVA之IO技术-获取指定目录下的文件夹和文件的File对象或是字符串名称。
- makefile 获取指定目录下源文件名称
- 获取指定DLL程序集Config 文件