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

stripped文件描述以及gdb反汇编工具使用编译后的文件格式解析 以及如何使用 gdb 反汇编 notstripped

往期地址:

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

本期主题:

  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:
在这里插入图片描述
如果是not stripped文件:
在这里插入图片描述

2.gdb反汇编如何使用

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

使用方法:

  1. 直接gdb想要反汇编的文件
  2. 输入 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函数进行反汇编,反汇编结果:
在这里插入图片描述

今天的文章 stripped文件描述以及gdb反汇编工具使用分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-18 23:57
下一篇 2024-12-18 23:51

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/89478.html