如何找出特定软件编写的编程语言?

时间:2010-12-23 12:24:39

标签: programming-languages

我是否使用免费软件倒数计时器,utorrent客户端,视频播放器等,是否有一种简单的方法可以找出它所编写的编程语言?特别是如果它是更主流的编程语言之一,如C,C ++,Java,Perl,Basic等。

我熟悉PHP和JavaScript以供网络使用,并且打开和编辑这些文件没有任何问题,但是现在我想要选择一种非网络编程语言,我想增加我的范围。技能有点。我在查找我个人使用的各种应用程序的语言时遇到了一些困难。我想将语言与我熟悉的现实例子进行比较。

2 个答案:

答案 0 :(得分:6)

检查已编译程序的共享库(Windows中的DLL)列表可以提供线索,因为通常每种语言都有一个特定的独特库来提供运行时环境。

例如,在我的Linux PC上,对可执行文件运行ldd命令会产生以下告诉输出:

ldd *redacted*
    linux-gate.so.1 =>  (0x0042e000)
    libxerces-c.so.28 => /usr/local/lib/libxerces-c.so.28 (0x004b0000)
    *redacted*.so => not found
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x05f28000)
    libm.so.6 => /lib/libm.so.6 (0x00a61000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x05be0000)
    libc.so.6 => /lib/libc.so.6 (0x00906000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00a93000)
    /lib/ld-linux.so.2 (0x008e7000)

使用libc.so表示C或C ++。 libstdc++.so的使用暗示了C ++。实际上这是一个C ++程序。

在程序可执行文件中搜索人类可读的字符串也可以给出线索,特别是如果它有调试信息的话。

例如,在同一个可执行文件上运行strings命令(在许多其他文本中)显示以下说明字符串:

virtual std::ostream* XmlToDcs::AmsResultsHandler::createOutputFileIfPossible()
pointer != static_cast< unsigned int >(-1)
std::ofstream* XmlToDcs::IndexElementsHandler::createStatementsFile(const tm&, char, char, unsigned int)
EamResultsHandler.cpp

前三个看起来像C ++的片段,最后一个看起来像是C ++源代码文件的名称。

答案 1 :(得分:2)

我想说现在,用于桌面应用程序的大多数常用编程语言都是C ++,。Net和Java(不知道Mac上的应用程序)。

我认为要考虑的事情更多是你想要实现的目标,以及你希望它运行的平台。只要用户的计算机上有JVM,Java就会免费为您提供所有平台。 .Net将使Windows易于开发,但需要Microsoft的工具有时拥有免费但有限的许可,但通常很昂贵。 C ++将允许您为多个平台开发,但需要付出更多努力才能使程序可移植并为多个OS /处理器编译它。

要识别.Net或Java程序,只需阅读随程序提供的README文件即可。我将声明您需要某个版本的.Net框架或Java虚拟机才能运行该程序。

如果需要解释器(PHP,LUA,Python,......),还要检查程序是否只是一个脚本。这也应该在README文件中提及。

更难以区分C和C ++。两者都被编译为EXE文件,不需要运行任何类型的外部虚拟机。