【发布时间】:2012-06-27 19:09:11
【问题描述】:
是否有可靠的方法来检测用于编译和构建给定 Windows 可执行文件的编译器?
仅此一个主题过于宽泛,因此我将其缩小:
- 我只对 C 系列的语言(C、C++、C#)感兴趣
- 假设可执行文件未被篡改以隐藏此信息。
- Visual Studio 和最著名的 gnu 编译器就足够了,因此无需处理非常旧的或不广泛使用的编译器。
在 C# 的情况下,很明显它使用了 Visual Studio 附带的编译器,那么在这种情况下,是否可以获得 Studio 的版本(年份)和类型(快递等)?
编辑:
从答案看来,这似乎很难确定,而且并不总是可靠的,因为必须使用启发式方法。 那么,是否有任何编译器故意在可执行文件中插入某种“水印”?我在猜测是否有,Visual Studio 可能是这样的编译器(如果没有别的,我可以想象他们这样做只是为了知道是否有人使用免费的快递版,或者只是他们正式购买的另一个版本)。但是,我在 Google 上找不到任何明确的答案。
【问题讨论】:
-
C# 不属于 C 家族!
-
在 C# 的情况下,没有办法判断是否使用了 VS。 VS 不是编译器。 VS使用
msbuild,使用csc,两者都可以不用VS。 -
@vsz:几乎没有“语义”,除了一些语法相似性(这与您的问题完全无关)之外,它们甚至都不是很接近。没有“更好的词”,就像要一个词来形容汽车和果冻一样。
标签: c# c++ c windows compiler-construction