我正在寻找Windows cmd中的命令告诉我某个dll文件是32位还是64位
在Windows中有这样的东西吗?
答案 0 :(得分:30)
DUMPBIN
包含在Visual C ++中,可以使用/HEADERS
开关提供此信息。
32位图像的输出示例:
FILE HEADER VALUES
14C machine (i386)
6 number of sections
306F7A22 time date stamp Sun Oct 01 22:35:30 1995
0 file pointer to symbol table
1D1 number of symbols
E0 size of optional header
302 characteristics
Executable
32 bit word machine
Debug information stripped
答案 1 :(得分:3)
您可以使用dbghelp库来获取图像标头。然后,您可以从FileHeader
。
这是一些示例代码。请原谅相当蹩脚的错误处理。我只是快速敲了一下来说明,而且我甚至都不熟悉C ++。
#include <Windows.h>
#include <Dbghelp.h>
#include <string>
#include <iostream>
using namespace std;
bool GetImageFileHeaders(wstring fileName, IMAGE_NT_HEADERS &headers)
{
HANDLE fileHandle = CreateFile(
fileName.c_str(),
GENERIC_READ,
FILE_SHARE_READ,
nullptr,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0
);
if (fileHandle == INVALID_HANDLE_VALUE)
return false;
HANDLE imageHandle = CreateFileMapping(
fileHandle,
nullptr,
PAGE_READONLY,
0,
0,
nullptr
);
if (imageHandle == 0)
{
CloseHandle(fileHandle);
return false;
}
void *imagePtr = MapViewOfFile(
imageHandle,
FILE_MAP_READ,
0,
0,
0
);
if (imagePtr == nullptr)
{
CloseHandle(imageHandle);
CloseHandle(fileHandle);
return false;
}
PIMAGE_NT_HEADERS headersPtr = ImageNtHeader(imagePtr);
if (headersPtr == nullptr)
{
UnmapViewOfFile(imagePtr);
CloseHandle(imageHandle);
CloseHandle(fileHandle);
return false;
}
headers = *headersPtr;
UnmapViewOfFile(imagePtr);
CloseHandle(imageHandle);
CloseHandle(fileHandle);
return true;
}
int main(int argc, char* argv[])
{
IMAGE_NT_HEADERS headers;
if (GetImageFileHeaders(L"C:\\windows\\system32\\user32.dll", headers))
{
if (headers.FileHeader.Machine == IMAGE_FILE_MACHINE_I386)
cout << "x86";
else if (headers.FileHeader.Machine == IMAGE_FILE_MACHINE_IA64)
cout << "IA64";
else if (headers.FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64)
cout << "x64";
else
cout << "Machine not recognised";
}
return 0;
}
要链接此项,您需要将dbghelp.lib
添加到项目的其他依赖项中。要了解有关此背后细节的更多信息,请参阅MSDN文档以了解所使用的各种API调用。
答案 2 :(得分:1)
您正在寻找的功能在UNIX系统上本机可用;使用&#39;文件&#39;命令。您可以使用&#39; file&#39;在Windows系统上,如果您安装Cygwin或其他一个UNIX模拟器。
答案 3 :(得分:1)
如果您已安装7zip:
"C:\Program Files\7-Zip\7z.exe" l "my-program.exe" | findstr CPU