问题描述
- 有关VC6DLL模块枚举问题
- 我照着书上写了一串代码:但是DLL名称没有枚举出来,想问一下大家知道怎么回事吗?
#include ""iostream""
#include ""windows.h""
#include ""stdio.h""
using namespace std;void main()
{
DWORD *PEB=NULL
*LDR=NULL
*Flink=NULL
*p=NULL
*BaseAddr=NULL
*DLLNameAddr=NULL;__asm{ mov eaxfs:[0x30] mov PEBeax}LDR=*((DWORD**)((unsigned char*)PEB+0xc));Flink=*((DWORD**)((unsigned char*)LDR+0x14));p=Flink;p=*((DWORD**)p);for(;p!=Flink;){ BaseAddr=*((DWORD**)((unsigned char*)p+0x10)); DLLNameAddr=*((DWORD**)((unsigned char*)p+0x20)); if(BaseAddr==NULL) { break; } printf(""地址 : %08x""BaseAddr); cout<<endl; printf(""名称 : %s""DLLNameAddr); putchar(10); p=*((DWORD**)p);}for(;;);
}
解决方案
那有可能汇编偏移量,地址等需要你对应平台调整。正如我前面说的。不通用。
解决方案二:
这种汇编代码,跟OS平台,编译器等有很大关系。并不一定能工作
解决方案三:
代码能输出但是输出的DLL名称有问题
解决方案四:
直接用EnumProcessModules
http://blog.sina.com.cn/s/blog_906bb6a90101bkcv.html
时间: 2025-01-01 11:03:01