首页
社区
课程
招聘
[已解决]AheadLib不能分析Win7 x32的DLL?
发表于: 2010-7-10 11:31 17848

[已解决]AheadLib不能分析Win7 x32的DLL?

2010-7-10 11:31
17848

AheadLib不能分析Win7 x32的DLL,分析ws2_32.dll时提示不能分配内存,是DLL格式有变化吗?是不是得修改AheadLib?


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (15)
雪    币: 81
活跃值: (41)
能力值: (RANK:220 )
在线值:
发帖
回帖
粉丝
2
我都忘了,怎么会有这么搞笑的提示框
2010-7-13 17:53
0
雪    币: 81
活跃值: (41)
能力值: (RANK:220 )
在线值:
发帖
回帖
粉丝
3
我看下代码
是我写的代码,我倒,怎么当年还这么幽默了

我是Win7 X64,刚才用这个分析ws2_32.dll,并不会出现问题。

看一下下面的过程,分配内存的地方返回出错了,可能是dll的问题(请把你分析的dll放出来)?

       
// 打开 DLL 文件
CMapFile mfFile(m_tzDllFile);
pszFile = (PSTR) mfFile.m_pvFile;
_LeaveExIf(pszFile == NULL, alResult = ALResult_OpenDllFile);
_LeaveExIf(mfFile.m_dwSize < 512, alResult = ALResult_InvalidPeFile);

// 判断是否为 PE 文件
pInh = (PIMAGE_NT_HEADERS) (pszFile + ((PIMAGE_DOS_HEADER) pszFile)->e_lfanew);
_LeaveExIf(pInh->Signature != IMAGE_NT_SIGNATURE, alResult = ALResult_InvalidPeFile);

// 定位导出表
dwSize = pInh->OptionalHeader.DataDirectory[0].VirtualAddress;
_LeaveExIf(dwSize == 0, alResult = ALResult_NoExportTable);
pIed = (PIMAGE_EXPORT_DIRECTORY) (pszFile + RvaToOffset(pInh, dwSize));

// 获取 Names 和 Ordinals
pdwNames = (PDWORD) (pszFile + RvaToOffset(pInh, pIed->AddressOfNames));
pwNamesOrdinals = (PWORD) (pszFile + RvaToOffset(pInh, pIed->AddressOfNameOrdinals));

// 分配内存
ppszNames = (PSTR *) _HeapAllocZero(sizeof(PSTR) * pIed->NumberOfFunctions);
_LeaveExIf(ppszNames == NULL, alResult = ALResult_HeapAlloc);

// 获取导出函数名称
for (i = 0; i < pIed->NumberOfNames; i++)
{
ppszNames[pwNamesOrdinals] = pszFile + RvaToOffset(pInh, pdwNames);
}

// 分配内存
pszBuffer = (PSTR) _HeapAlloc(4096 + 1024 * pIed->NumberOfFunctions);
_LeaveExIf(pszBuffer == NULL, alResult = ALResult_HeapAlloc);
2010-7-13 17:59
0
雪    币: 81
活跃值: (41)
能力值: (RANK:220 )
在线值:
发帖
回帖
粉丝
4
Happy 牛 Year,谁修改过的版本吧?
2010-7-13 18:06
0
雪    币: 107
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我把WIn7 Pro x64在 X32的 ws2_32.dll贴出来
上传的附件:
2010-7-13 21:23
0
雪    币: 107
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Yonsm大牛不在?
很奇怪难道PE代码Win7不一样了?
2010-7-14 20:39
0
雪    币: 81
活跃值: (41)
能力值: (RANK:220 )
在线值:
发帖
回帖
粉丝
7
我收到了,调试了一下,发现 pIed 算的不对了,可能是 RavToOffset 函数的计算方法不对了。具体没去分析。
2010-7-14 22:52
0
雪    币: 81
活跃值: (41)
能力值: (RANK:220 )
在线值:
发帖
回帖
粉丝
8
PEInfo 这类软件,应该是用相同的方法算的,所以用PEInfo也无法看到导出表。
2010-7-14 22:53
0
雪    币: 107
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
你的Win7和我的Win7不一样?
2010-7-17 00:04
0
雪    币: 107
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
估计是PE标志的问题,用PEExplorer说是x64的程序。但是这个就是x32的。
2010-7-17 09:42
0
雪    币: 107
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
整明白了:
1、我贴的是C:\Windows\System32下的dll,所以是x64的PE标志,尽管是x32程序,这个只要将AheadLib修改一下就可以了,按照x64的dll计算偏移量。
2、在目录C:\Windows\SysWOW64下的dll没有问题

谢谢Yonsm的源程序。
2010-7-18 12:11
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
12
ws2_32.dll   用xp下的可以,不过win7 Vista必须导入一个注册表文件即可
2010-7-19 12:27
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
没弄错吧?有带64位标记却是32位PE,可能吗?
具体是什么路径?是C:\Windows\System32\ws2_32.dll 吗?
2010-7-20 09:53
0
雪    币: 107
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
就是这样子的,不信你自己验证。除非MS自己搞错了。
2010-7-21 23:26
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
15
C:\Windows\SysWOW64下的都是32位程序代码,x64系统为了兼容32位设计的加载转向。
2011-5-1 12:43
0
雪    币: 216
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
好东西,收藏了。
2011-6-8 23:56
0
游客
登录 | 注册 方可回帖
返回
//