逆向汇编基础

第一章基础知识

 

1.1 CPU基本功能

 

1.1.1         目标代码

计算机系统中的CPU只能执行机器指令

由机器指令组成的程序,被称为目标程序,也被称为目标代码

计算机系统最终运行的是目标程序

 

int  cf11( void )

{

     int  sum,  i;

     sum = 0;

     for ( i = 1;  i <= 10; i += 1 )

         sum += i*i;

     return sum;

}

 

等价于:

        xor   ecx, ecx

        xor   eax, eax

        inc   ecx

$LL3@cf11:

        mov   edx, ecx

        imul  edx, ecx

        add   eax, edx

        inc   ecx

        cmp   ecx, 10

        jle   $LL3@cf11

        ret

 

 

1.1.2         基本功能

1.执行机器指令

ü  CPU能够直接识别并遵照执行的指令被称为机器指令

ü  CPU一条接一条地依次执行存放在存储器中的机器指令

ü  每一条机器指令的功能通常很有限

ü  CPU能够执行的全部机器指令,被称为该CPU的指令集

ü  CPU决定机器指令。不同种类CPU,其指令集往往不相同

ü  按指令的功能来划分,通常机器指令可分为以下几大类:

数据传送指令、算术逻辑运算指令、转移指令

处理器控制指令、其他指令等

 

 

2.暂存少量数据

ü   一个目标程序中的绝大部分指令是对数据进行各种运算或者处理

ü   CPU有若干个寄存器,可以用于存放运算数据和运算结果,还可以给出存储单元地址

ü   利用寄存器存放运算数据和运算结果,效率最高

ü   大部分指令的操作数据至少有一个在寄存器中

ü   CPU内可以用于存放运算数据和运算结果的寄存器数量很有限

 

3.访问存储器

ü   CPU要执行目标程序,就要访问存储器。目标程序在存储器中,待处理              的数据也在存储器中。这里存储器是指CPU能够直接访问的计算机系统的物理内存

ü   存储器(内存)由一系列存储单元线性地组成,最基本的存储单元为一个字节。为了标识和存取每一个存储单元,给每一个存储单元规定一个编号,也就是存储单元地址

ü   CPU支持以多种形式表示存储单元的地址。一些功能较强的CPU还支持以多种方式组织管理存储器

 

 

int x = 1;

int y = 2;

void cf12( void )

{

   y = x * x + 3;

   return;

}

 

等价于:

int x = 1;

int y = 2;

void cf12( void )

{

   y = x * x + 3;

   return;

}

 

 

1.2      汇编语言概念

1.2.1         机器指令

ü   把CPU能够直接识别并遵照执行的指令称为机器指令

ü   机器指令一般由操作码和操作数两部分构成

ü   操作码指出要进行的操作或运算

   例如,加、减、传送等

ü   操作数指出参与操作或运算的对象,也指出操作或运算结果存放的位置

   例如,寄存器、存储单元和数据等

 

 

          xor  ecx, ecx

          xor  eax, eax

          inc   ecx

lab1:  mov edx, ecx

          imul edx, ecx

          add   eax, edx

          inc   ecx

         cmp ecx, 10

          jle    lab1

          ret

等价于:

33 C9

    33 C0

    41

    8B D1

    0F AF D1

    03 C2

    41             

    83 F9 0A

    7E F3

    C3

 

1.2.2         汇编格式指令

1.人们采用便于记忆、并能描述指令功能的符号来表示指令的操作码。这些符号被称为指令助记符

2.用符号表示操作数,如寄存器、存储单元地址等

3.由指令助记符、操作符号和常量等表示的指令被称为汇编格式指令

 

ü   汇编格式指令的一般格式 

    [ 标号:]   指令助记符  [ 操作数表]

 

 

1.2.3         汇编语言及其优缺点

汇编语言

ü   汇编语言是一种程序设计语言,是机器语言的符号化

ü   汇编语言的语句主要是汇编格式指令和伪指令

ü   由于汇编语言的主体是汇编格式指令,而汇编格式指令又与机器密切相关,且功能有限,所以常把汇编语言称为低级语言

 

汇编和汇编程序

ü   把用汇编语言编写的程序称为汇编语言源程序,或称为汇编源程序,或简称为源程序。

ü   把汇编源程序翻译成目标程序的过程称为汇编。

ü   把完成汇编工作的工具或程序叫做汇编程序(汇编器)。

 

汇编语言的优缺点

ü   汇编语言与机器关系密切

ü   汇编语言程序效率高

ü   编写汇编语言源程序繁琐

ü   汇编语言程序调试困难

 

 

 

 

1.3      数据的表示和存储

 

1.3.4 数据的存储

 

ü  以二进制形式表示的数据和代码存放在存储器(内存)之中。

ü  内存由一系列基本存储单元线性地组成,每一个基本存储单元有一个唯一的地址。通常,基本存储单元由8个连续的位构成,可用于存储一个字节的数据。所以,基本存储单元也被称为字节存储单元。

ü  可以把内存看作为一个很大的一维字符数组,把地址看作为标识数组元素的下标。

ü  字节存储单元是基本的存储单元。

ü  一个字节存储单元中8位数据的意义,根据需要可以有不同的解释。

ü   两个连续的字节存储单元构成一个字存储单元。字存储单元的地址是较低的字节存储单元的地址。“高高低低”规则

ü  四个连续的字节存储单元构成一个双字存储单元。

 

#include <stdio.h>

   char  buff[] = { 3, 2, 1, 0, 130};          // 130=0x82

   int  a, b;

   int  main( )

   {

       char  *p = buff;

       a = *( int* ) p;                                    //L1

       b = *( int* ) ( p+1 );                          //L2

       printf( "a = %x, b=%x\n", a, b );     //L3

       printf( "a = %d, b=%d\n", a, b );     //L4

       return  0;

   }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嗨!对于逆向学习汇编语言的学习笔记,我可以给你一些基本的指导。首先,汇编语言是一种低级语言,它与计算机的底层硬件密切相关。逆向工程则是通过分析和理解已编译的程序来获取程序的内部信息。 以下是一些学习汇编语言和逆向工程的建议: 1. 学习基础知识:了解计算机体系结构、寄存器、内存和指令集等基础概念是必要的。可以先阅读相关的书籍或在线教程,掌握这些基本概念。 2. 掌握汇编语言的语法和指令集:每种计算机体系结构都有自己的汇编语言语法和指令集。选择一种你感兴趣的体系结构(如x86、ARM等),并学习它的汇编语言。 3. 练习编写和调试汇编代码:通过编写简单的汇编代码来熟悉语法和指令集。使用调试器来单步执行代码并观察寄存器和内存的变化。 4. 分析已编译程序:选择一个目标程序进行逆向分析。使用反汇编器将程序转换为汇编代码,并分析代码的逻辑和功能。这有助于理解程序的结构和运行过程。 5. 使用调试器进行动态分析:通过调试器来动态地执行程序,并观察程序在运行时的行为。使用断点、内存查看器和寄存器查看器等工具来分析程序的状态和数据。 6. 学习逆向工程工具和技术:了解常用的逆向工程工具和技术,如IDA Pro、OllyDbg、Ghidra等。掌握这些工具的使用可以提高你的逆向分析能力。 7. 参考优秀资源:阅读与逆向工程和汇编语言相关的书籍、论文和博客,关注相关的社区和论坛。与其他逆向工程师交流经验也是很有帮助的。 记住,逆向工程是一个需要耐心和实践的过程。持续学习和实践将帮助你提高逆向分析的技能。祝你在学习汇编语言和逆向工程的过程中取得好成果!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值