我有一个任意的.NET程序集列表.
我需要以编程方式检查每个DLL是否是为x86构建的(而不是x64或任何CPU).这可能吗?
我想编写一个测试脚本或程序,断言给定目录中的所有DLL文件都是特定的构建类型.
我会在SDK的构建过程结束时使用它作为一个健全性检查,以确保64位版本没有以某种方式获得一些32位DLL文件,反之亦然.
有没有一种简单的方法来查看DLL文件并确定其类型?
该解决方案应该适用于xp32和xp64.
我想确定本机程序集是否从托管代码应用程序(C#)编译为x64或x86 .
我认为它必须在PE头中的某处,因为OS加载器需要知道这些信息,但我找不到它.当然我更喜欢在托管代码中执行它,但如果有必要,我可以使用本机C++.
我如何解释CorFlags标志以及如何使用它来确定.NET程序集是为x86还是x64构建的?
可能是以下情况?
corflags MyAssembly.dll
Run Code Online (Sandbox Code Playgroud) 我刚刚使用VS2008在64位Windows机器上构建了libpng.它libpng.lib在\ projects\visualc71\Win32_Lib_Release目录中生成一个文件(配置使用的是"LIB Release").
我曾经dumpbin检查过这个LIB文件:
C:\Temp\libpng-1.4.3>dumpbin projects\visualc71\Win32_LIB_Release\libpng.lib
Microsoft (R) COFF/PE Dumper Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file projects\visualc71\Win32_LIB_Release\libpng.lib
File Type: LIBRARY
Summary
8E4 .debug$S
DF2 .drectve
2BCD .rdata
21165 .text
C:\Temp\libpng-1.4.3>
Run Code Online (Sandbox Code Playgroud)
但是它没有显示LIB文件的体系结构.如何查找给定的LIB文件是为32位还是64位架构构建的?
发现(无法访问源项目).NET程序集DLL是否编译为"x86","x64"或"任何CPU"的最简单方法是什么?
更新:命令行实用程序足以满足我的直接需求,但仅仅是为了完整性,如果有人想告诉我如何以编程方式执行它,那么这也是有意义的,我敢肯定.
我试图找到一种编程方式来判断二进制文件是x86,x64还是ia64.
平台:Windows.语言:c/c ++.
背景:在尝试加载第三方dll之前,我需要找出它的位数.
感谢任何指针.
我正在尝试解析 Windows 中的 PE 文件并从此结构中获取数据

我写了这段代码,它从 exe 文件中读取字节。
#include <Windows.h>
int main()
{
// open the file for binary reading
std::ifstream file;
file.open("D:/SomeProgram.exe", ios_base::binary);
if (!file.is_open())
return 1;
// get the length of the file
file.seekg(0, ios::end);
size_t fileSize = file.tellg();
file.seekg(0, ios::beg);
// create a vector to hold all the bytes in the file
std::vector<byte> data(fileSize, 0);
// read the file
file.read(reinterpret_cast<char*>(&data[0]), fileSize);
Run Code Online (Sandbox Code Playgroud)
我不知道如何获取数据,其中包含e_magic, e_cbip, e_cp.... 和最重要的e_ifanew. 我知道,这个结构 IMAGE_DOS_HEADER 存储在 Windows.h 中,但我不知道如何使用它从任何 exe …