stripped文件描述以及gdb反汇编工具使用

往期地址:

  • 操作系统系列一 —— 操作系统概述
  • 操作系统系列二 —— 进程
  • 操作系统系列三 —— 编译与链接关系
  • 操作系统系列四 —— 栈与函数调用关系
  • 操作系统系列五 —— 目标文件详解
  • 操作系统系列六 —— 详细解释【静态链接】
  • 操作系统系列七 —— 装载
  • 操作系统系列八 ——动态链接
  • 操作系统系列九 ——系统调用和API
  • 从编译角度看c和c++混合编译

本期主题:

  1. stripped文件
  2. gdb反汇编使用

目录

  • 1.什么是stripped文件
  • 2.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:
stripped文件描述以及gdb反汇编工具使用_第1张图片
如果是not stripped文件:
stripped文件描述以及gdb反汇编工具使用_第2张图片

2.gdb反汇编如何使用

GDB(GNU Debugger)是一个用于调试程序的开源工具,它是 GNU 项目的一部分。GDB 支持多种编程语言,包括C、C++、Fortran等,并能在许多不同的操作系统上运行,如Linux、Unix、Windows等。
也可用来进行反汇编,反汇编时可以直接选择函数进行反汇编,非常方便。

使用方法:

  1. 直接gdb想要反汇编的文件
  2. 输入 disassemble /m func名字,就能实现对某个函数的反汇编

例如代码如下:

#include 

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函数进行反汇编,反汇编结果:
stripped文件描述以及gdb反汇编工具使用_第3张图片

你可能感兴趣的:(计算机操作系统,数据库,服务器,linux)