代码之家  ›  专栏  ›  技术社区  ›  Fred

ld linux--验证退出代码

  •  5
  • Fred  · 技术社区  · 15 年前

    从/usr/bin/ldd查看源代码时,我发现它使用ld-linux查找可执行文件的依赖项,尽管它首先使用--verify参数调用ld-linux。然后,根据ld linux--verify调用的退出代码,脚本的行为会有所不同。

    ld linux的手册页没有提供任何关于退出代码的信息,谷歌搜索也没有任何价值。除了查看ld linux的源代码外,是否有其他文档提供了ld linux的退出代码列表——verfify及其各自的含义?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Des Nerger    11 年前

    我没有找到任何文件,但是。。。

      if (__builtin_expect (mode, normal) == verify)
        {
          /* We were called just to verify that this is a dynamic
             executable using us as the program interpreter.  Exit with an
             error if we were not able to load the binary or no interpreter
             is specified (i.e., this is no dynamically linked binary.  */
          if (main_map->l_ld == NULL)
            _exit (1);
    
          /* We allow here some platform specific code.  */
    #ifdef DISTINGUISH_LIB_VERSIONS
          DISTINGUISH_LIB_VERSIONS;
    #endif
          _exit (has_interp ? 0 : 2);
        }
    

    所以

    • 0表示成功,即“程序是动态链接的 “动态链接器可以处理它”
    • 1表示ld linux“无法加载二进制文件”(我得到 当我用不存在、非二进制或静态二进制文件运行ld linux时)
    • 2表示“未指定翻译”。更具体地说,在程序头表中没有p_type等于PT_INTERP的元素(我在使用共享库运行ld linux时得到这个结果)

    没有其他代码。

        2
  •  1
  •   Norman Ramsey    15 年前

    我做了一些实验,成功时退出状态为零,失败时退出状态为1。这包括怪诞的滥用,比如要求它验证shell脚本。

    假设成功为零,失败为非零,没有其他信息,你是安全的。