c-如何检查目标代码是否为16/32位



有什么方法可以识别.obj文件和.exe文件是16/32位的吗?

基本上,我想创建一个智能链接器,它将自动识别给定文件名需要传递到哪个链接器

首选语言:C(如果需要,可以不同(

我正在寻找一些解决方案,可以读取.exe的字节/.obj文件的代码,然后确定它是否为16/32位。即使是算法也可以。

注意:我知道对象代码和可执行文件是两个不同的实体。

所有这些信息都根据相关的应用程序二进制接口(ABI(编码在二进制对象中。

当前的Linux ABI是可执行和可链接格式(ELF(,您可以使用readelf或objdump等工具查询特定的二进制文件。

当前的Windows ABI是可移植可执行文件(PE(格式。我不熟悉这里的工具集,但在谷歌上快速搜索表明,有些程序的功能与readelf:相同

http://www.pe-explorer.com/peexplorer-tour.htm

这是微软对PE格式的规范:

https://learn.microsoft.com/en-us/windows/win32/debug/pe-format

然而,这两种格式都不再支持16位二进制文件。旧的ABI格式在Linux中被称为"a.out",可以用objdump读取和查询(我不确定readelf(。旧的Windows/DOS格式被称为MZ和NE。同样,我不熟悉这些旧的Windows格式的工具支持。

维基百科有一个非常全面的列表,列出了所有常用的可执行文件格式,并链接到更多信息:

https://en.wikipedia.org/wiki/Comparison_of_executable_file_formats