确定哪个编译器构建了 Win32 PE

2023-11-22

如何确定使用哪个 C 或 C++ 编译器来构建特定的 Windows 可执行文件或 DLL?一些编译器会在最终的可执行文件中留下版本字符串,但这在 Windows 上似乎比在 Linux 上更罕见。

具体来说,我感兴趣的是区分 Visual C++ 和各种 MinGW 编译器(通常从函数签名来看相当容易),然后区分 Visual C++ 版本(6、2002/2003、2005、2008;更难做到)。有没有一种工具可以以半可靠的方式进行区分?


区分 VC 版本的提示来源之一是链接的特定 C 运行时库。由于默认情况是(至少在现代版本中)链接到 DLL,因此这相当容易做到。实用性依赖步行者对于验证您是否知道真正正在加载哪些 DLL 几乎是必不可少的,并且它会告诉您正在使用哪个 C 运行时 DLL。尽管 Dependency Walker 包含在 Microsoft Platform SDK 中,但它已被独立扩展,我链接的站点是其当前开发的主页。

VC6 和 MinGW 默认情况下都链接到 MSVCRT.DLL,因此不会区分它们。经过一些努力,MinGW 也可以链接到更高的 C 运行时版本,因此您需要独立排除 MinGW。

Runtime       VC Version
----------    -------------
MSVCRT.DLL    VC6
MSCVR80.DLL   VC8 (VS 2005)
MSCVR90.DLL   VC9 (VS 2008)

其他运行时 DLL 也是很好的线索,例如对 Delphi 运行时的引用可能表明 EXE 实际上是从 Delphi 构建的,而不是 C 工具链。

如果符号尚未从 .EXE 文件中删除,那么您可能会发现一些存在内部符号的线索。例如,对类似内容的引用_sjlj_init可能表明在某个时刻涉及为 setjmp/longjmp 异常处理配置的 MinGW GCC 3.x。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定哪个编译器构建了 Win32 PE 的相关文章

随机推荐

  • 将 Google 表中的日期区域设置从公历转换为 Jalali 日历

    我想知道谷歌表格中是否可以使用函数将公历转换为贾拉利历 事实上 我有一些日期 例如 February 20 2021 4 30 AM 我需要以 Jalali 格式 没有时间 在其前面的单元格中显示此日期 即 1399 12 02 or Es
  • Node.js 什么时候会阻塞?

    我已经使用 Node js 一段时间了 我刚刚意识到它可能会阻塞 我就是无法理解 Node js 在什么情况下会发生阻塞 因此 Node js 是单线程的 因为 i Javascript 是并且 ii 避免了所有多线程陷阱 要同时做很多事情
  • Gitlab 与 Github 相比有何不同?

    我试图从经验丰富的开发人员的角度来理解两者的优缺点 当然 Github 是两者中使用更广泛的一个 但如果有人能概括性地解释一下他们发现其中哪一个更好 缺乏什么 那就太好了 顺便说一句 我现在使用 Github Gitlab 是一个自托管的
  • 退出iPhone应用程序的正确方法?

    我正在编写一个 iPhone 应用程序 由于某些用户操作 我需要强制它退出 清理应用程序分配的内存后 调用什么适当的方法来终止应用程序 在 iPhone 上 没有退出应用程序的概念 导致应用程序退出的唯一操作是触摸手机上的 主页 按钮 而开
  • Azure Active Directory 是否具有 OAuth/OpenID Connect 令牌自省端点?

    Azure Active Directory 是否具有自省端点 如中定义 RFC7662 用于验证 OpenID Connect 或 OAuth 访问令牌 否 您可以通过以下方式检查支持的所有端点OpenID 提供商配置对于 Azure A
  • 如何计算直方图的标准差? (Python、Matplotlib)

    假设我有一个数据集并使用 matplotlib 绘制该数据集的直方图 n bins patches plt hist data normed 1 如何使用以下公式计算标准差n and bins价值观hist 回报 我目前正在这样做来计算平均
  • Android 触摸秤按钮

    我知道如何将按钮缩放到确定的值 但是有没有办法在用户触摸按钮时每次增加 减小按钮大小 像这样的东西 Button myButton Button findViewById R id myButton myButton setOnTouchL
  • 检索泛型方法的正确重载的 MethodInfo

    我的这种类型包含一个泛型方法的两个重载 我喜欢检索其中一个重载 使用Func
  • 为什么“python -m pip install ...”需要“-m”?

    我最近使用pip安装了requestspython 2 7 中的包 但是为了做到这一点 我必须使用 python m pip install requests 而不仅仅是 python pip install requests 这给了我一个
  • jquery .bind() 是否已弃用?

    是 jquerybind 已弃用还是可以安全使用 我在评论和答案中看到很多关于 bind 被弃用的评论 例如 Jquery Event 检测 div 的 html text 的更改 是否有 JavaScript jQuery DOM 更改侦
  • 如何将 DataGridView 定位到特定行(以便所选行位于底部)?

    作为一个类似的问题这个问题 我还有一个带有 DataGridView 的应用程序 我想定位行 使特定行位于列表可见部分的底部 这是对将一行向下移动一位的按钮单击的响应 我想保留我正在移动的行上的选择 我已经让这部分工作 如果有很多行 所选行
  • 将数组从一页传递到另一页

    我有一个包含一些值的数组 比如说 arr one one value here arr two second value here arr three third value here 我这个值位于页面 home php 中 在页面末尾 它
  • dart:js 和 js 包有什么区别?

    Dart 文档中的所有地方都建议使用js用于 JavaScript 互操作性的包 然而 我最近发现dart jsSDK 中存在似乎具有相似 但不相同 接口的包 这些包之间有什么区别吗 它们的功能相同吗 推荐哪一款 Js 互操作始于包 js
  • application.yml 中的 @Value 返回错误值

    In my application yml文件声明 service a b 011600 c 011200 从中选择值 yml via Value注解 Value service a c private String VALUE 我得到的不
  • Python - 像扩展函数一样扩展属性

    Question 如何扩展 python 属性 子类可以通过在重载版本中调用超类的函数来扩展超类的函数 然后对结果进行操作 下面是我所说的 扩展函数 的一个例子 Extending a function a tongue in cheek
  • 将毫秒转换为天、小时、分钟和秒

    我在 Microsoft SQL Server 2008R2 中有一个 bigint 字段 里面充满了刻度 单个刻度代表一百纳秒或百万分之一秒 一毫秒有 10 000 个刻度 http msdn microsoft com en us li
  • WCF 发现返回硬编码 URL

    总体设计如下 有某些应用程序作为 Windows 服务安装 网络上可能有几个这样的 它们每个都向网络公开一些接口 将其视为 远程控制 或 配置 诸如此类的东西 然后还有另一个应用程序充当该接口的客户端 使用相同的类比 远程控制器 或 配置工
  • makefile:4: *** 缺少分隔符。停止

    这是我的生成文件 all ll ll ll c gcc c Wall Werror 02 c c ll c o ll lt clean rm fr ll 当我尝试make clean or make make 我收到此错误 makefile
  • 处理临时文件流

    假设我想定义一个 TempFileStream 类 它使用 Path GetTempFileName 方法创建临时文件 当不再需要 TempFileStream 的对象时 必须删除临时文件 例如关闭或处置 class TempFileStr
  • 确定哪个编译器构建了 Win32 PE

    如何确定使用哪个 C 或 C 编译器来构建特定的 Windows 可执行文件或 DLL 一些编译器会在最终的可执行文件中留下版本字符串 但这在 Windows 上似乎比在 Linux 上更罕见 具体来说 我感兴趣的是区分 Visual C