从汇编层看64位程序运行——静态分析和动态分析入门

news2024/12/26 14:06:20

大纲

  • GDB
  • IDA
  • 总结
  • 参考资料

之前一直谈各种相对宏观的工具怎么使用,比如Flink、RabbitMQ等。最近想聊聊比较微观的技术,用各种“显微镜”去看看运行在系统层的二进制码是什么样子。当然二进制码比较难以记忆,于是我会从二进制码的助记符——汇编层面去分析程序运行的一些“套路”,进而展开我们平时会忽略的微观世界。
这系列文章,面向有一定计算机基础、对底层比较感兴趣的朋友。但是我也会尽量用比较简单的语言,把整个系列的知识点讲明白。
相较于之前,我比较多的分析Windows上程序的汇编码(比如《反汇编》这个系列)。本系列将着重分析Linux系统上的程序的汇编码。同时又不想引入太过复杂的各种设计,尽量简单明了地还原底层本来的面貌,于是我是用的是C语言去写代码,然后将编译结果通过静态分析工具和动态分析工具去反汇编。
工欲善其事必先利其器,这次系列我们将主要使用两个工具去分析:GDB和IDA。

GDB

GDB是一个非常常用的调试工具,我们可以使用它来追踪运行时的程序,主要用于动态分析。
以后面要分析的程序(simple_main)为例,可以使用下面的命令来做调试

 gdb bin/simple_main

在这里插入图片描述
然后我们给main函数下一个端点

b main

在这里插入图片描述
然后运行该程序

r

在这里插入图片描述
断点命中后,我们可以分析此时的寄存器信息

info registers

在这里插入图片描述
以及查看这些寄存器所指向区域的数据或者代码
比如我们要看栈上数据

x /-16xg $rbp

在这里插入图片描述
或者看RIP指向的代码

disassemble $rip

在这里插入图片描述
然后通过单步调试等方法,查看相关寄存器和内存的变化
在这里插入图片描述
GDB非常强大,但是需要记下很多命令,而且其交互所展现的信息量也比较有限。如果只是做代码查看性分析,而不需要其运行态的一些信息,则可以考虑使用下面介绍的静态分析工具IDA。

IDA

相较于GDB,IDA有着优秀的可视化界面,大大降低了大型工程分析的难度。
本系列我们将在Windows上使用IDA分析Linux上的程序。
针对上例, 我们把Linux上的程序simple_main拷贝到本地(我用的是Vscode远程连接Linux开发)。
在这里插入图片描述
然后在IDA中打开
在这里插入图片描述
在左侧Function name中可以看到一系列函数名称,右侧则是对应的函数的汇编。如上图是main函数的汇编。
我们可以双击main函数中call foo这行,会直接跳到foo函数的实现
在这里插入图片描述
如果觉得上面信息比较简单,可以使用Text view模式
在这里插入图片描述
然后可以看到连续的大段代码
在这里插入图片描述
如上图,我们看到foo函数和main函数在二进制码层面,是连续布局的。

总结

本文我们只是做一个简单的介绍,后续我们将使用这些工具以及其他更多的工具,来深入分析软件在系统上运行的情况,以期展现出计算机微观世界的精彩设计。

参考资料

  • https://sourceware.org/gdb/
  • https://hex-rays.com/ida-pro/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1922262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IOS上微信小程序密码框光标离开提示存储密码解决方案

问题: ios密码框输入密码光标离开之后会提示存储密码的弹窗 解决方案 1、在苹果手机上面把 “自动填充密码”关闭,但是苹果这个默认开启,而且大部分客户也不会去自己关闭。 2、欺骗苹果手机,代码实现。 先说解决思路&#xf…

java内部类的本质

定义在类内部,可以实现对外部完全隐藏,可以有更好的封装性,代码实现上也往往更为简洁。 内部类可以方便地访问外部类的私有变量,可以声明为private从而实现对外完全隐藏。 在Java中,根据定义的位置和方式不同&#xf…

mmaction2的GPU环境配置记录RTX3090,cuda12.2,ubuntu22.04版本

1、配置镜像源 最重要的一个步骤,先看下镜像源地址,如果镜像源有问题,所有的包安装都会有问题 镜像源地址获取地址:选择对应的ubuntu版本号,将里面的镜像源地址复制出来,更新到服务器 ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirro…

【web]-sql注入-bestdb

打开页面后&#xff0c;如图 查看源代码&#xff0c;发现有段注释&#xff0c;尝试sql注入 <!-- $sql "SELECT * FROM users WHERE id $query OR username \"$query\"";--> 1、尝试万能密码 1 or 11# / admin&#xff0c; 提示F…

Linux磁盘-MBRGPT

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux磁盘涉及到的命令不是很多&#xff0c;但是在实际运维中的作用却很大&#xff0c;因为Linux系统及业务都会承载到硬盘上…

2024年新一代WebOffice内嵌网页组件——猿大师办公助手

背景 WebOffice控件这个中间件软件产品已存在二十余年&#xff0c;在国内众多大中小型企业、各级政府机关、科研机构和学校等事业单位的OA、ERP、文档系统、云盘等信息化B/S系统中得到了大量使用&#xff0c;为我国的信息化事业也做出了不小贡献。随着操作系统、浏览器及Offic…

随笔一、泰山派RK3566开发板调试串口波特率修改

摘要&#xff1a;立创泰山派RK3566开发板默认调试串口波特率是1500000bps&#xff0c;一般串口助手工具没有此波特率&#xff0c;为适应各种调试环境需要&#xff0c;打算修改调试串口波特率为115200bps 需要修改三个部分 1. uboot引导部分 修改tspi_linux_sdk/u-boot/config…

面试项目 | 带你玩转大学生智能汽车项目

文章目录 前言智能车系统介绍1.从智能车说起2.整体系统结构3.经验之谈 系统分层设计1.分层与模块化2.整个系统的总体设计控制与图像层嵌入式平台层 机械与硬件设计部分1.硬件布线2.电机H桥3.机械这块简单说几句吧 嵌入式平台软件搭建1.从任务调度说起大循环调度定时任务调度实时…

[吃瓜教程]南瓜书第6章软间隔与支持向量回归

1.软间隔支持向量机的模型 之前讨论的支持向量机的一个重要的假设前提是它的数据集是线性可分的。然而在现实任务中&#xff0c;线性不可分的情形才是最常见的&#xff0c;因此需要允许支持向量机犯错。这就是接下来要说的软间隔的支持向量机。 2.软间隔支持向量机的策略 从…

PropertySourcesPropertyResolver

SpringBoot应用中涉及配置相关的东西&#xff0c;例如配置文件、环境变量、系统变量等都是基于类ApplicationServletEnvironment的构造器开启的&#xff0c;如下其抽象父类AbstractEnvironment构造器&#xff1a; public abstract class AbstractEnvironment{private final Mu…

TypeError: load() got an unexpected keyword argument ‘loader‘

定义函数 get_yaml_data用来读取 login_data.yml 文件并打印其内容。 import yamldef get_yaml_data(path):with open(path,moder,encodingutf-8)as f:data yaml.load(f,loader yaml.FullLoader)return dataif __name____main__:pathr..\config\desired_caps.ymlprint(get_y…

7 月12日学习打卡--栈和队列的相互转换

hello大家好呀&#xff0c;本博客目的在于记录暑假学习打卡&#xff0c;后续会整理成一个专栏&#xff0c;主要打算在暑假学习完数据结构&#xff0c;因此会发一些相关的数据结构实现的博客和一些刷的题&#xff0c;个人学习使用&#xff0c;也希望大家多多支持&#xff0c;有不…

如何写一个好标题,让你的论文接受率提升300%?(附公式模版)

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 一篇论文的标题虽然只有短短2-3行&#xff0c;一般不超过15个单词&#xff0c;但是不可否认&#xff0c;标题的阅读量是最大的&#xff0c;因为你只有先通过标题激发了审稿人和…

大模型备案,这样操作就对了!全程指导助你成功备案

在人工智能技术日新月异的今天&#xff0c;大型语言模型&#xff08;简称“大模型”&#xff09;作为AI领域的璀璨明珠&#xff0c;正逐步渗透到我们生活的方方面面&#xff0c;从智能客服到内容创作&#xff0c;从个性化推荐到医疗健康&#xff0c;其影响力不可小觑。 然而&am…

一个极简的 Vue 示例

https://andi.cn/page/621516.html

Linux 04:进程概念

1. 操作系统(Operator System) 概念 任何计算机系统都包含一个基本的程序集合&#xff0c;称为操作系统(OS)。笼统的理解&#xff0c;操作系统包括&#xff1a; 内核&#xff08;进程管理&#xff0c;内存管理&#xff0c;文件管理&#xff0c;驱动管理&#xff09;。其他程序…

虚幻引擎 快速的色度抠图 Chroma Key 算法

快就完了 ColorTolerance_PxRange为容差&#xff0c;这里是0-255的输入&#xff0c;也就是px单位&#xff0c;直接用0-1可以更快 Key为目标颜色

安全防御-用户认证综合实验

一、拓扑图 二、实验要求 1、DMZ区的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9:00-18:00&#xff09;可以访问&#xff0c;生产区设备全天都是可以访问的 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3、办公区设备10.0.2.20不允许访…

0601STM32TIM

TOC 分为四部分&#xff0c;八小节 一部分&#xff1a;主要讲定时器基本定时的功能&#xff0c;也就是定一个事件&#xff0c;让定时器每隔这个时间产生一个中断&#xff0c;来实现每隔一个固定时间来执行一段程序的目的&#xff0c;比如做一个时钟、秒表&#xff0c;或者使用一…

求问DAMASK求解中关于yaml文件,报错显示:type dismatch in yaml date node

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…