往期地址:
- 操作系统系列一 —— 操作系统概述
- 操作系统系列二 —— 进程
- 操作系统系列三 —— 编译与链接关系
- 操作系统系列四 —— 栈与函数调用关系
- 操作系统系列五 —— 目标文件详解
- 操作系统系列六 —— 详细解释【静态链接】
- 操作系统系列七 —— 装载
- 操作系统系列八 ——动态链接
- 操作系统系列九 ——系统调用和API
- 从编译角度看c和c++混合编译
本期主题:
- stripped文件
- gdb反汇编使用
1.什么是stripped文件
我们在编译完成一个文件时,当使用file
命令查看文件类型时,有时候发现它是 stripped文件,有时候又是not stripped,例如
not stripped文件示例:
stripped文件示例:
这两者的差异是什么呢?
“Stripped” 和 “not stripped” 是与可执行文件(executable files)和共享库(shared libraries)相关的概念,特别是在类Unix系统中,如Linux。
Stripped 文件:
一个被 “stripped” 的文件是在编译过程中去除了调试信息的文件。调试信息包括变量名称、函数名称、行号等,这些信息通常用于调试和分析程序的运行。
Stripping 文件有助于减小文件的大小,因为调试信息占据了相当多的空间。
Stripped 文件通常用于生产环境,以减少潜在的安全风险,并提高执行效率。
Not Stripped 文件:
“Not stripped” 文件保留了编译时包含的所有调试信息。
这样的文件在调试和分析阶段非常有用,因为它允许开发人员在运行时检查变量值、调用堆栈等信息,以便更轻松地调试代码。
不过,由于保留了调试信息,这样的文件可能较大,不适合在生产环境中使用。
总的来说,“stripped” 和 “not stripped” 文件的差异在于是否包含调试信息,以及在何种情况下使用。在生产环境中,为了安全性和性能,通常会使用 “stripped” 文件,而在开发和调试阶段,通常会使用 “not stripped” 文件以便进行更方便的调试。
总结就是:
stripped文件少了很多调试信息,我们没法利用这个文件来进行反汇编等其他操作,而not stripped文件则可以。
例如我们使用gdb命令尝试stripped文件,会提示没有debug symbols:
如果是not stripped文件:
2.gdb反汇编如何使用
GDB(GNU Debugger)是一个用于调试程序的开源工具,它是 GNU 项目的一部分。GDB 支持多种编程语言,包括C、C++、Fortran等,并能在许多不同的操作系统上运行,如Linux、Unix、Windows等。
也可用来进行反汇编,反汇编时可以直接选择函数进行反汇编,非常方便。
使用方法:
- 直接gdb想要反汇编的文件
- 输入 disassemble /m func名字,就能实现对某个函数的反汇编
例如代码如下:
#include <stdio.h> int test_func(int a, int b) {
return a + b; } int main(void) {
int a = 1; int b = 2; int c = 0; c = test_func(a, b); return 0; }
这里对test_func函数进行反汇编,反汇编结果:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/89478.html