X86の唠唠叨叨

1.冯诺依曼结构包括3种硬件组件:

  • 中央处理单元(cpu),负责执行代码
  • 内存(RAM),负责存储所有数据和代码
  • 输入输出系统(I/O),为硬盘,键盘,显示器等设备提供接口

2.CPU


  • ALU:算术逻辑单元,执行从内存取来的指令,进行分析

3.内存

 

  • 数据:指内存中特定的节,数据节,静态值,全局变量等程序一开始就被加载到这里
  • 代码:CPU执行程序时所要取得的指令
  • 堆:动态内存,为程序执行期间需要的动态内存做准备,创建新的值,消除不用的值
  • 栈:函数局部变量,参数,控制程序执行流

4.TF:用于调试,当它被置位时候,x86处理器每次只执行一条指令

5.乘法除法指令:

乘法:%eax保存乘数,结果保存在%ebx和%eax中,%ebx是高8位(16位),%eax是低8位

除法:%也不行,%eax里保存被除数,%ebx保存余数,%eax保存商

imul,idiv是带符号版本

6.xor

xor %eax,%eax常用来清零,这个指令只要2个字节,然而mov需要5个

7.循环移位指令

ror是最低位循环到最高

rol相反

  • 若一个函数出现大量的ror,rol,xor,and,shl,shr,or而且好像这些指令是随机排列的,可能是遇到了一个加密或压缩的函数(最后回来再分析)

8.NOP(无运算)

什么都不做,直接进入下一条指令,其实NOP是xchg %eax,%eax的伪名字

  • 机器指令:0x90       NOP滑板,起到填充代码作用,以降低shellcode可能在中间部分开始执行所造成的风险

9.函数调用

  • ESP:释放局部变量
  • leave:用作结束语,使%ESP=%EBP,然后从栈中弹出%ebp
  • ret:从栈中弹出返回地址给EIP,程序会回到原来调用它的地方执行,也就是下一条语句。example:

  • 只有理解好ret指令才能执行到number-2

10.条件指令

  • test:和and功能一致,但是不修改任何操作数,改变标志位ZF,test %eax,%eax用来检查%eax是否是零(会改变ZF,为0,ZF==1)
  • cmp:和sub指令一致,ZF,CF可能发生变化

(INTEL)

11.跳转指令

  • jz    zf=1,跳      jnz   zf=0,跳
  • ja是无符号的jg,jae是无符号的jge(大于)
  • jb是无符号的jl,jbe是无符号的jle(小于)
  • jo前一条指令使OF=1,跳
  • js  sf=1(SF是如果结果为负数置一),跳
  • jecxz %ecx=0,跳

12、重复指令:操作数据缓冲区的指令

  • movsx:最高位符号位扩展
  • movzx:零扩展

rep(重复前缀)和movsb结合

  • rep循环终止,ecx=0
  • repe,repz 循环终止,ecx=0,zf=0
  • repne,repnz循环终止,ecx=0,zf=1

rep指令会增加ESI,EDI的偏移量,减少ECX的偏移量。不断重复直到上面的循环终止条件达到,所以为了使rep生效,ESI,EDI,ECX要进行初始化

rep movsb会将一串字节从ESI(源索引寄存器)移动到EDI(目的索引寄存器),移动ECX数目的字节数,DF(方向标志)=0,ESI+1,EDI+1,否则减





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值