如何检查目标代码是否为 16/32 位?
How to check if a object code is 16/32 bit?
有什么方法可以识别 .obj
文件和 .exe
文件是 16/32 位的吗?
基本上我想创建一个智能链接器,它会自动识别需要将给定文件名传递给哪个链接器。
首选语言:C
(如果需要,可以不同)
我正在寻找一些可以读取 .exe
的字节/.obj
文件的代码然后确定它是否为 16/32 位的解决方案。即使是算法也可以。
注意:我知道目标代码和可执行文件是两个不同的实体。
所有这些信息都根据相关的应用程序二进制接口 (ABI) 在二进制对象中编码。
目前LinuxABI是可执行链接格式(ELF),可以使用readelf或objdump等工具查询特定的二进制文件。
当前 Windows ABI 是可移植可执行 (PE) 格式。我不熟悉这里的工具集,但快速 google 搜索表明有些程序的功能与 readelf 相同:
http://www.pe-explorer.com/peexplorer-tour.htm
这是 PE 格式的 Microsoft 规范:
https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
但是,这两种格式都不再支持 16 位二进制文件。较旧的 ABI 格式称为 "a.out" for Linux,可以使用 objdump 读取和查询(我不确定 readelf)。较旧的 Windows/DOS 格式称为 MZ 和 NE。同样,我不熟悉这些较旧的 Windows 格式的工具支持。
维基百科有一个非常全面的列表,列出了所有已使用的流行可执行文件格式,以及指向更多信息的链接:
https://en.wikipedia.org/wiki/Comparison_of_executable_file_formats
有什么方法可以识别 .obj
文件和 .exe
文件是 16/32 位的吗?
基本上我想创建一个智能链接器,它会自动识别需要将给定文件名传递给哪个链接器。
首选语言:C
(如果需要,可以不同)
我正在寻找一些可以读取 .exe
的字节/.obj
文件的代码然后确定它是否为 16/32 位的解决方案。即使是算法也可以。
注意:我知道目标代码和可执行文件是两个不同的实体。
所有这些信息都根据相关的应用程序二进制接口 (ABI) 在二进制对象中编码。
目前LinuxABI是可执行链接格式(ELF),可以使用readelf或objdump等工具查询特定的二进制文件。
当前 Windows ABI 是可移植可执行 (PE) 格式。我不熟悉这里的工具集,但快速 google 搜索表明有些程序的功能与 readelf 相同:
http://www.pe-explorer.com/peexplorer-tour.htm
这是 PE 格式的 Microsoft 规范:
https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
但是,这两种格式都不再支持 16 位二进制文件。较旧的 ABI 格式称为 "a.out" for Linux,可以使用 objdump 读取和查询(我不确定 readelf)。较旧的 Windows/DOS 格式称为 MZ 和 NE。同样,我不熟悉这些较旧的 Windows 格式的工具支持。
维基百科有一个非常全面的列表,列出了所有已使用的流行可执行文件格式,以及指向更多信息的链接:
https://en.wikipedia.org/wiki/Comparison_of_executable_file_formats