能力值:
( LV2,RANK:10 )
|
-
-
2 楼
32位用不了64位DLL,就是这样
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
LordPE,标题栏标有[PE32+]的就是64为dll,没有的则是32位的
|
能力值:
( LV7,RANK:100 )
|
-
-
4 楼
最简单的办法就是loadlibrary一下,能成功即和程序本身一样
|
能力值:
( LV9,RANK:170 )
|
-
-
5 楼
IMAGE_NT_HEADERS的FileHeader中的Machine可以判断!
IMAGE_FILE_MACHINE_I386为32位
IMAGE_FILE_MACHINE_IA64IMAGE_FILE_MACHINE_AMD64为64位
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
通过Vs.net tools中所带的dumpin命令可以查看:dumpbin /headers <assembly path>
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
how to determine whether it is 64bit or 32bit dll ...
use dumpbin to find the header information of dll files...
>dumpbin /headers yourdll.dll |find "machine"
Headers Flags
IMAGE_FILE_MACHINE_I386 (0x014c)
IMAGE_FILE_MACHINE_IA64 (0x0200)
IMAGE_FILE_MACHINE_AMD64 (0x8664)
Thanks
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
------------IMAGE_NT_HEADERS的FileHeader-------中的-----Machine-------可以判断
------------IMAGE_FILE_MACHINE_I386----------为32位
------------IMAGE_FILE_MACHINE_IA64IMAGE_FILE_MACHINE_AMD64----------为64位
|
能力值:
( LV6,RANK:90 )
|
-
-
9 楼
我第一印象就是loadlibrary下
|
能力值:
( LV3,RANK:30 )
|
-
-
10 楼
5L正解
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
好像上面都有答案了。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
5L,7L正解
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
呵呵,上面都有答案了
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
给楼主一个简单明了的答案,只求有看雪币转正。。
PE文件头里有个machine字段指定CPU类型,如果是0x8664就是64位程序,0x14c 表示Intel 386或后继处理器及其兼容处理器
可以用c32asm工具导入dll文件查看
这个是x86的:
这个是x64的
还有个办法可以用lordpe 工具查看,导入dll文件,然后查看特征值里面的“期望是32位系统“前面是否打勾,如果有勾则是32位,没有就是64位。。 望采纳!!
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
看里面的代码就知道了。
你下载的时候会有说明文件,说明你这个动态链接库是32位的还是64位的。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
WORD GetPeTypeAndPlatform(const TCHAR* pPath, WORD* platfrom)
{
HANDLE hFile = NULL;
HANDLE hFileMap = NULL;
LPTSTR lpMapAddr = NULL;
WORD bRet = IMAGE_SUBSYSTEM_UNKNOWN;
PIMAGE_DOS_HEADER pDos = NULL;
PIMAGE_FILE_HEADER pFileHeader = NULL;
PIMAGE_NT_HEADERS64 pNtHeader64 = NULL;
PIMAGE_NT_HEADERS32 pNtHeader32 = NULL;
if (platfrom)
{
*platfrom = IMAGE_FILE_MACHINE_UNKNOWN;
}
if (!pPath)
{
return IMAGE_SUBSYSTEM_UNKNOWN;
}
__try
{
hFile = ::CreateFile(pPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
bRet = IMAGE_SUBSYSTEM_UNKNOWN;
__leave;
}
hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
if (hFileMap == NULL)
{
bRet = IMAGE_SUBSYSTEM_UNKNOWN;
__leave;
}
lpMapAddr = (LPTSTR)MapViewOfFile(hFileMap, SECTION_MAP_READ, 0, 0, 0);
if (!lpMapAddr)
{
bRet = IMAGE_SUBSYSTEM_UNKNOWN;
__leave;
}
pDos = (PIMAGE_DOS_HEADER)lpMapAddr;
if (pDos->e_magic != IMAGE_DOS_SIGNATURE)
{
bRet = IMAGE_SUBSYSTEM_UNKNOWN;
__leave;
}
pNtHeader32 = (PIMAGE_NT_HEADERS32)(pDos->e_lfanew + (ULONG_PTR)pDos);
pNtHeader64 = (PIMAGE_NT_HEADERS64)pNtHeader32;
if (pNtHeader32->Signature != IMAGE_NT_SIGNATURE)
{
bRet = IMAGE_SUBSYSTEM_UNKNOWN;
__leave;
}
if (platfrom)
{
*platfrom = pNtHeader32->FileHeader.Machine;
}
if (pNtHeader32->FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 || pNtHeader32->FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64)
{
bRet = pNtHeader64->OptionalHeader.Subsystem;
__leave;
}
else if (pNtHeader32->FileHeader.Machine == IMAGE_FILE_MACHINE_I386)
{
bRet = pNtHeader32->OptionalHeader.Subsystem;
__leave;
}
else
{
bRet = IMAGE_SUBSYSTEM_UNKNOWN;
__leave;
}
}
__finally
{
if (hFile)
{
CloseHandle(hFile);
}
if (hFileMap)
{
CloseHandle(hFileMap);
}
if (lpMapAddr)
{
UnmapViewOfFile(lpMapAddr);
}
}
return bRet;
}
与这段代码类似,楼主稍稍修改就可以了
|
|
|