好好爱自己!

[转] 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

原文:http://blog.sina.com.cn/s/blog_7608db8f0102vndr.html

gdb 调试还可以这样用!!    

__________________

 

 

.对汇编代码分析

      用gdb调试跟踪,观察汇编指令执行后,寄存器的情况变化,分析计算机的执行变化。

      gcc -g -o main main.c -m32

     gdb main

     b main

     r

     layout split

     然后通过si单步调试,得到下面这些图,并利用堆栈分析。图中黑色背景的指令,表示下一步要执行的指令,也是eip指向的地址。用r命令调试时,main函数执行的是一条c语句,前四条汇编语句执行后寄存器的结果不能用图显示,这里也用堆栈分析。

     通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    程序开始时的堆栈情况

通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

_______________________

几乎所有有计算功能的电子设备,其核心功能基本可以用冯诺依曼体系结构来描述。冯诺依曼体系结构就是指存储程序计算机,从硬件的角度看,逻辑上可以抽象看做是一部分是CPU,一部分是内存,通过总线连接。CPU中有很多寄存器,比较重要的寄存器是IP,指向内存中的代码段,CPU根据CS、IP读取执行指令。从程序员的角度看,CPU可以抽象成一个不断执行下一条指令的循环结构,内存存储指令和数据,CPU 解释和执行指令。
    CPU识别什么样的指令,除了API,CPU还有一个ABI(ApplicationBinaryInterface)--应用二进制接口,这里只要关注汇编语言,指令的编码,指令中寄存器的使用约定等。那么单任务计算机是怎么工作的,这里通过分析汇编代码来理解。

 
1.知识准备

  用到的汇编指令的作用
通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

2.实验环境
 实验楼64位linux虚拟机
3.实验步骤
使用c语言程序如下,命名为main.c 
int g(int x)
{
      return x + 1;
}
int f(int x)
{
      return g(x);
}
int main(void)
{
      return f(7) + 2;
}
终端输入
gcc -S -o main.s main.c -m32
把main.c程序编译成汇编代码main.s,以.开始的代码行是用于链接的辅助信息,不会被实际执行,删掉这些行得到干净的汇编代码如下

通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

4.对汇编代码分析

      用gdb调试跟踪,观察汇编指令执行后,寄存器的情况变化,分析计算机的执行变化。

      gcc -g -o main main.c -m32

     gdb main

     b main

     r

     layout split

     然后通过si单步调试,得到下面这些图,并利用堆栈分析。图中黑色背景的指令,表示下一步要执行的指令,也是eip指向的地址。用r命令调试时,main函数执行的是一条c语句,前四条汇编语句执行后寄存器的结果不能用图显示,这里也用堆栈分析。

posted @   立志做一个好的程序员  阅读(215)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2019-11-26 【转】win10硬盘序列号查看方法
2019-11-26 littlefs了解一下
2019-11-26 ulimit命令
2019-11-26 [转]SSH 反向隧道 内网穿透,AutoSSH自动重连
2016-11-26 【转】linux ls -l的详解
2016-11-26 git 使用系列(二)---- 分支和合并
2016-11-26 git repository 的使用

不断学习创作,与自己快乐相处

点击右上角即可分享
微信分享提示