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

Sim*_*Suh 2 programming-languages

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

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

Rae*_*ald 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)
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

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