zoukankan      html  css  js  c++  java
  • [转] 通过反汇编一个简单的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语句,前四条汇编语句执行后寄存器的结果不能用图显示,这里也用堆栈分析。

  • 相关阅读:
    Android EditText 文本框实现搜索和清空效果
    Android学习笔记之打钩显示输入的密码
    Mysql limit offset
    Android SDK更新以及ADT更新出现问题的解决办法
    Android Broadcast Receiver 使用入门
    立即执行函数
    JS 原型 & 继承
    JS 对象
    chrome extension overview
    JS 修改元素
  • 原文地址:https://www.cnblogs.com/oxspirt/p/14040245.html
Copyright © 2011-2022 走看看