【问题标题】:Detect the running Linux distribution at compile time and/or runtime?在编译时和/或运行时检测正在运行的 Linux 发行版?
【发布时间】:2018-05-29 03:57:06
【问题描述】:

我正在 Kali Linux 中制作一个程序,我想让它只在 Kali 中运行。我可以用 C 来做,就像:

#if defined(_WIN32) || defined(_WIN64)
   #define os_platform THISisWINDOWS

用于检查用户的操作系统是否是 windows,然后在脚本中检查定义的变量 os_platform,但我搜索了谷歌和任何地方,但我找不到 Kali Linux 的宏。如果我这样做:

#if defined(__linux__)
   #define os_platform THISisLINUX

它可以是任何类型的 Linux,例如 Ubuntu 和类似的 Linux。 Kali Linux 的宏是什么?

【问题讨论】:

  • 只是因为我今天感到好奇:为什么?
  • 由于不同的 Linux 安装(来自类似的发布时间)(通常)是二进制兼容的,尤其是在发行版系列中,因此使用 #ifdef 进行编译时检查可能不是一个好方法。为什么二进制文件在 Kali 上的编译方式与在 Ubuntu 或普通 Debian 上的编译方式不同?

标签: c macros linux-distro


【解决方案1】:

没有用于分发的宏。您只能通过在/etc 中查找特定文件来进行“嗅探测试”以查看它是什么发行版,即使那样它也可能被伪造。

宏之所以存在,首先是因为 Linux 与 BSD 和 Windows 完全不同,所以这是必要的区别。 Kali 和 Debian 之间的区别是非常主观的,Kali 是基于 Debian 的。就编译器而言,大多数 Linux 发行版实际上非常相似,因为它们都使用相同的内核和头文件。

/etc/redhat-release 这样的东西是特定于发行版的,所以寻找类似的东西。虽然这不能作为 #ifdef 进行测试,但您需要将其放入您的 configure 脚本中。

【讨论】:

  • 谢谢!从来没想过。我在宏中也是如此......我只需要看看 /etc/shadow/ 是否存在!
  • 考虑根据您需要的功能或您必须拥有的库来限制您的应用程序,而不是您强制的分发。也许有一天 Kali 会分叉,尽管 99.9% 相同,但您拒绝编译,因为名称不同。检查依赖关系,如果满足,没有理由你不能至少尝试编译它。
【解决方案2】:

您可能可以检查 /etc/issue 文件以获取特定的发行版名称,然后使用文件指针提取确切的名称,然后比较它是否是 Ubuntu 或 Kali 或任何其他 Linux 机器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-11
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多