运行时,ldd program
我得到表格的输出
linux-gate.so.1 => (0xb77ae000)
libstdc++.so.6 => /lib/libstdc++.so.6 (0xb76bc000)
libm.so.6 => /lib/libm.so.6 (0xb7691000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7674000)
libc.so.6 => /lib/libc.so.6 (0xb74c2000)
/lib/ld-linux.so.2 (0xb77af000)
您能否解释输出和原因linux-gate.so.1
,并以与ld-linux.so.2
其他条目不同的方式显示?他们的作用是什么?
我希望您不要询问主要条目,这些条目说明例如libm.so.6
在文件中找到了所请求的库/lib/libm.so.6
,而是询问了两个离群值。
为什么它们显示不同?为linux-gate.so.1
这是因为它实际上不是在磁盘上的一个文件-它是由内核的机制来进行系统调用暴露。对于/lib/ld- linux.so.2
它,因为这是 程序 被用于实际运行的应用程序的解释。
有一个很好的博客条目描述了linux-gate.so,它很好地解释了它。
对于/lib/ld- linux.so.2
,您必须了解启动ELF二进制文件时会发生的一些事情。简短的答案是,这些类型的二进制文件的内核处理程序使用此文件来启动应用程序。
该程序的主要目的是将二进制文件映射到内存中,在程序中加载任何引用的库(例如前面提到的libm.so.6),然后将控制权移交给正在执行的二进制文件的起始地址。
该程序INTERP
在程序头的部分中定义为ELF文件结构的一部分。对于32位linux二进制文件,这是32位解释器的典型名称。对于64位二进制文件,您会发现它通常被称为ld- linux-x86_64.so.2
(对于64位x86平台)。
您可以使用readelf -l
和INTERP部分自己确定此信息:
INTERP 0x0000000000000238 0x0000000000400238 0x0000000000400238
0x000000000000001c 0x000000000000001c R 1
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
1.1 Linux是什么 我们知道Linux这玩意儿是在计算机上面运行的,所以说Linux就是一组软件。问题是这个软件是操作系统还是应用程序? 且Linux可以在哪些种类的计算机硬件上面运行?而Linux源自哪里?为什么 Linux 还不用钱?这些我们都得来谈一谈先!免得下次人家问你, 为什么复制软件不会违法时,你会答不出来啊!^_^ 1.1.1 Linux是什么?操作系统/应用程序? 我们在第零
Linux 是一种计算机操作系统: 一系列能让您与计算机进行交互操作并运行其它程序的程序。 操作系统由多种基础程序构成。它们使计算机可以与用户进行交流并接受指令, 读取数据或将其写入硬盘、磁带或打印机,控制内存的使用,以及运行其它软件。 操作系统最重要的组成部分是内核。在 GNU/Linux 系统中,Linux 就是内核组件。 而该系统的其余部分主要是由 GNU 工程编写和提供的程序组成。 因为单
Linux 是一种计算机操作系统: 一系列能让您与计算机进行交互操作并运行其它程序的程序。 操作系统由多种基础程序构成。它们使计算机可以与用户进行交流并接受指令, 读取数据或将其写入硬盘、磁带或打印机,控制内存的使用,以及运行其它软件。 操作系统最重要的组成部分是内核。在 GNU/Linux 系统中,Linux 就是内核组件。 而该系统的其余部分主要是由 GNU 工程编写和提供的程序组成。 因为单
Linux 是一种计算机操作系统: 一系列能让您与计算机进行交互操作并运行其它程序的程序。 操作系统由多种基础程序构成。它们使计算机可以与用户进行交流并接受指令, 读取数据或将其写入硬盘、磁带或打印机,控制内存的使用,以及运行其它软件。 操作系统最重要的组成部分是内核。在 GNU/Linux 系统中,Linux 就是内核组件。 而该系统的其余部分主要是由 GNU 工程编写和提供的程序组成。 因为单
问题内容: 为什么 初始空间 大于“ 10”的“ 2”? 我在latin1和utf8英语归类中都尝试过: 我知道它与类型有关,因为当它被强制转换时,它可以按预期工作: 这里到底发生了什么? 编辑: 以上所有操作都是在Fedora 13中使用8.4.8完成的。但是我只是在Centos 6中使用9.04进行了测试,结果相同: 数据库清单 新编辑: 这是为了进一步混淆: 问题答案: 我认为Postgre
Ruby是"一种用于迅速和简便的面向对象编程的解释性脚本语言";这意味着什么? 解释性脚本语言: 有直接呼叫系统调用的能力 强大的字符串操作和正则表达式 开发中快速回馈 迅速和简便: 无需变量声明 变量无类型 语法简单而坚实 自动内存管理 面向对象编程 任何事物都是一个对象 类,继承,方法,等等 单态方法 模块糅合 迭代器和闭包(closures) 以及: 多精度整数 异常处理模式 动态装载 线程