能力值:
(RANK:220 )
|
-
-
2 楼
我都忘了,怎么会有这么搞笑的提示框
|
能力值:
(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);
|
能力值:
(RANK:220 )
|
-
-
4 楼
Happy 牛 Year,谁修改过的版本吧?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我把WIn7 Pro x64在 X32的 ws2_32.dll贴出来
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
Yonsm大牛不在?
很奇怪难道PE代码Win7不一样了?
|
能力值:
(RANK:220 )
|
-
-
7 楼
我收到了,调试了一下,发现 pIed 算的不对了,可能是 RavToOffset 函数的计算方法不对了。具体没去分析。
|
能力值:
(RANK:220 )
|
-
-
8 楼
PEInfo 这类软件,应该是用相同的方法算的,所以用PEInfo也无法看到导出表。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
你的Win7和我的Win7不一样?
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
估计是PE标志的问题,用PEExplorer说是x64的程序。但是这个就是x32的。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
整明白了:
1、我贴的是C:\Windows\System32下的dll,所以是x64的PE标志,尽管是x32程序,这个只要将AheadLib修改一下就可以了,按照x64的dll计算偏移量。
2、在目录C:\Windows\SysWOW64下的dll没有问题
谢谢Yonsm的源程序。
|
能力值:
( LV12,RANK:2670 )
|
-
-
12 楼
ws2_32.dll 用xp下的可以,不过win7 Vista必须导入一个注册表文件即可
|
能力值:
( LV5,RANK:70 )
|
-
-
13 楼
没弄错吧?有带64位标记却是32位PE,可能吗?
具体是什么路径?是C:\Windows\System32\ws2_32.dll 吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
就是这样子的,不信你自己验证。除非MS自己搞错了。
|
能力值:
( LV9,RANK:250 )
|
-
-
15 楼
C:\Windows\SysWOW64下的都是32位程序代码,x64系统为了兼容32位设计的加载转向。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
好东西,收藏了。
|
|
|