Linux操作系统中readelf命令常见用法_linux readelf object func

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

1 ELF

在介绍 readelf 之前,首先需要讲一下 ELF(Executable and Linkable Format),这里直接引用 Wikipedia 中关于 ELF 的(部分)介绍内容:

In computing, the Executable and Linkable Format (ELF, formerly named Extensible Linking Format), is a common standard file format for executable files, object code, shared libraries, and core dumps. First published in the specification for the application binary interface (ABI) of the Unix operating system version named System V Release 4 (SVR4), and later in the Tool Interface Standard, it was quickly accepted among different vendors of Unix systems. In 1999, it was chosen as the standard binary file format for Unix and Unix-like systems on x86 processors by the 86open project.

By design, the ELF format is flexible, extensible, and cross-platform. For instance it supports different endiannesses and address sizes so it does not exclude any particular central processing unit (CPU) or instruction set architecture. This has allowed it to be adopted by many different operating systems on many different hardware platforms.

2 概述

引用 Manual 手册中对于 readelf 的描述,内容如下:

readelf - Displays information about ELF files.

**readelf displays information about one or more ELF format object files.**The options control what particular information to display.

This program performs a similar function to objdump but it goes into more detail and it exists independently of the BFD library, so if there is a bug in BFD then readelf will not be affected.

2 语法

readelf 命令格式为:readelf [option]… elffile…

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

<think>好的,我需要介绍一下Linux系统中的.o文件。首先,.o文件是目标文件,由编译器生成,通常是源代码编译后的中间产物。用户可能想知道它的作用、生成过程以及与其他文件的关系。 记得之前用户问过C语言的bool类型,可能需要保持技术细节的连贯性。目标文件在编译过程中扮演重要角色,尤其是在链接阶段。要解释清楚.o文件的结构,比如包含机器代码、符号表、重定位信息等。 用户可能对目标文件和可执行文件的区别有疑问,需要明确说明。此外,可能需要提到静态库和动态库与.o文件的关系,比如静态库.a文件是多个.o文件的归档。 还要考虑用户可能的实际应用场景,比如如何生成.o文件,使用gcc的-c选项,以及如何链接它们。如果有必要,可以给出简单的编译示例,帮助理解。 注意使用中文,结构清晰,分点说明。避免过于专业的术语,但也要准确。可能需要提到工具如objdump、nm等,用于查看.o文件内容,但不要深入细节,除非用户需要。 最后,检查是否有遗漏的重要点,比如重定位的作用、调试信息等。确保回答覆盖.o文件的基本概念、结构、用途和相关工具,帮助用户全面理解。</think>在 Linux 系统中,`.o` 文件是 **目标文件**(Object File),它是编译过程中的中间产物,包含机器代码和链接所需信息。以下是详细说明: --- ### **核心特性** 1. **生成方式** 通过编译器将 `.c` 源代码编译生成: ```bash gcc -c file.c # 输出 file.o ``` - `-c` 选项表示仅编译不链接 2. **文件内容** - **机器指令**:源代码编译后的二进制代码 - **符号表**:函数名、全局变量等符号的地址信息 - **重定位信息**:标记需要链接时修正的地址 - **调试信息**(可选):用于调试的源代码关联数据(需 `-g` 编译选项) --- ### **关键用途** | 阶段 | 作用 | |-------------|----------------------------------------------------------------------| | **编译阶段** | 将源代码转化为机器码,保存未解析的外部引用(如其他文件中的函数) | | **链接阶段** | 链接器将多个 `.o` 文件合并,解析符号引用,生成可执行文件或共享库 | --- ### **与其他文件的关系** 1. **可执行文件** 多个 `.o` 文件 + 静态库 → 链接 → 生成可执行文件(如 `a.out`) ```bash gcc main.o utils.o -o program ``` 2. **静态库** 多个 `.o` 文件 → 打包 → 生成 `.a` 静态库 ```bash ar rcs libutils.a utils.o math.o ``` 3. **动态库** 多个 `.o` 文件 → 位置无关编译 → 生成 `.so` 动态库 ```bash gcc -shared -fPIC utils.o -o libutils.so ``` --- ### **工具与操作** 1. **查看内容** - `objdump -d file.o`:反汇编查看机器指令 - `nm file.o`:查看符号表(显示函数/变量地址和类型) - `readelf -S file.o`:查看 ELF 文件结构(节头信息) 2. **重定位示例** 未链接的 `.o` 文件中的函数调用地址为临时值: ```asm ; objdump 反汇编结果示例 0000000000000000 <main>: 10: e8 00 00 00 00 callq 15 <main+0x15> # 调用未解析的 func() ↑ 链接时会替换为实际地址 ``` --- ### **典型场景** ```bash # 分步编译链接示例 gcc -c main.c # 生成 main.o gcc -c utils.c # 生成 utils.o gcc main.o utils.o -o program # 链接生成可执行文件 ``` --- ### **注意事项** - **不可直接执行**:`.o` 文件需经过链接才能运行 - **平台依赖**:不同 CPU 架构生成的 `.o` 文件不兼容(如 x86 与 ARM) - **优化影响**:编译时使用 `-O2` 等优化选项会改变生成的机器码结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值