汇编语言与IDA使用

二进制的第一天。主要就讲了讲一个有关分析汇编语言代码的逆向题,还有就是IDA的使用。
学习汇编语言,先了解下寄存器

寄存器
在计算机领域,寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制寄存器 不同的处理器,寄存器的个数、结构是不同的。

16位处理器有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
32位处理器有16个寄存器:EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP、EIP、ES、CS、SS、DS、FS、GS、EFLAGS。
64位处理器有15个寄存器:RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8、R9、R10、R11、R12、R13、R14、R15
使用时只有寄存器的名字不同,机制上差别不大

需要注意的是32位是由栈来传参的,64位前六个参数由寄存器RDI、RSI、RDX、RCX、R8、R9依次传参,超过第六个的参数由栈来传参

寄存器的作用
可以用来读写数据到电脑的周边设备
可将寄存器内的数据执行算术及逻辑运算
存于寄存器内的地址可用来指向内存的某个位置,即寻址

32位通用寄存器 EAX、EBX、ECX、EDX、
顾名思义,通用寄存器是那些你可以根据自己的意愿使用的寄存器,修改他们的值通常不会对计算机的运行造成很大的影响。通用寄存器最多的用途是计算。
每个寄存器都可作为一个32位值或两个16位值来寻址使用,而且低16位数据的存取不会影响高16位的数据。这些低16位寄存器分别为AX、BX、CX、和DX。而AX、BX、CX、DX的高8位分别称为AH、BH、CH、DH,低8位称为AL、BL、CL、DL。
每个寄存器都有自己的名称,可独立存取
在这里插入图片描述数据在寄存器中的储存形式如下
在这里插入图片描述

32位的硬件平台决定了虚拟地址空间为0~2^32-1, 即0x00000000 到 0xFFFFFFFF ,也就是我们常说的4GB虚拟内存空间。 首先计算机最小的存储单位是bit(比特),也就是寄存器AX里面的01码,一个AX寄存器可存储16bits,也就是2Bytes(字节),那么EAX寄存器可存储4Bytes,也就是说EAX的大小是4Bytes。通常电脑的数据又是以十六进制来显示的,若32位中虚拟地址存储的数据为0x0a324546,那么0x0a就代表1个字节。 在c语言中,一个char型数据的大小是1个字节 若定义 char a=‘a’,那么字符‘a’是以何种形式存的呐?,首先‘a’要通过ASCLL编码表转成数字97,通常显示为十六进制的0x61,然后这个0x61就存储到某一个地址处。 1 Byte = 8 Bits 1 KB = 1024 Bytes 1 MB = 1024 KB 1 GB = 1024 MB 需要注意的是低八位AL最大存储数据是255,也就是说若AL存储的数据大于255时,就会发生整数溢出
在这里插入图片描述

32位特殊寄存器 ESI、EDI、EBP、ESP、EIP

ESI 通常在内存操作指令中作为“源地址指针”使用
EDI 通常在内存操作指令中作为“目的地址指针”使用
EBP和ESP作为指针的寄存器,常用于椎栈操作。通常,它被高级语言编译器用以建造‘堆栈帧’来保存函数或过程的局部变量,EBP指向栈低,ESP指向栈顶。
EIP 这个寄存器非常的重要。这是一个32位宽的寄存器,同CS一同指向即将执行的那条指令的地址,存放指令的偏移地址。

从宏观上来说,堆栈是虚拟的,是不存在的。人们为了方便对物理地址的划分,才抽象出堆栈的定义
堆栈的形成:程序在运行前会预留一些内存空间&

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值