我有一个可执行文件,我想弄清楚源代码是用哪种编程语言编写的。第一步是使用反汇编程序。
之后应该怎么做?
另外,我读到确定在运行时使用哪些库将是正在使用的编程语言的一个很好的指标。我应该如何确定使用了哪些库?
实际上,我建议您使用十六进制查看器/编辑器查看可执行文件。这样您就可以立即看到编译器是否嵌入了任何字符串作为提示。您还应该考虑某些语言使用 C 作为中间语言。一个例子是f2c a Fortran 77 to C 编译器。看来 f2c 还链接了一个支持库,因此您可以查找它。
至于确定在 linux 上使用哪些库,您可以对动态二进制文件使用ldd 命令,对静态二进制文件使用nm命令来转储符号。还有一个关于SO的相关问题。
这是来自一位 RE 成员的有趣博客,关于您拥有的二进制文件如何可能甚至不是来自编译器以及如何识别它。
我使用了几种工具:
还值得一提的是,如果您向Virus Total提交文件,他们将针对您的二进制文件运行 TRiD。
这些工具并不总是确定的,但它们通常可以为您提供正确的编译器(以及所使用的语言)。