我正在寻找命令在Windows CMD告诉我,如果某个DLL文件是32位或64位
窗户里有这样的东西吗?
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
您可以使用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调用。
您正在查找的功能在UNIX系统上本地提供; 使用'文件'命令。 如果您安装Cygwin或其他UNIX仿真器之一,则可以在Windows系统上使用“文件”。