arm,x86指令对比

 

最近迷上cpu指令了,特别是arm指令 哥在手机和ipad上拖出个游戏程序 用ida逆了下再用gdb调试 真过隐啊^_^!!!

Tiny Machine 指令格式明显参考了ARM:

ADD r,s,t //reg[r] = reg[s] + reg[t],ARM 中,Add Rd,Rn,operand2 表示 Rd <-- Rn + operand2

AMD x86-64 与ARM 寄存器对照:

EFLAGS   --当前程序状态寄存器(CPSR) R16

EIP --程序计数器(PC) R15

EBP --程序链接寄存器(SLR) R14

ESP --堆栈指针 R13

新增的R8--R15 --分组寄存器 R8--R14

EAX,EBX,ECX,EDX,ESI,EDI --未分组寄存器 R0-R7

Intel 64 的指令开始具备RISC特征:三地址指令,定长指令。

指令格式:

前缀|操作码|MOD_REG_R/M | SIB | 地址偏移 | 立即数 |

0-4个 | 1-2B必须 | 1B          | 1B |   1-4B       | 1,2,4B   |

例子: objdump -d a.exe

" mov 0x10(%ebx),%eax " 的操作码为 " 8b 43 10 "

8b 的末尾两位为 11 -- Direction=1 Width = 1  

43h = 01 000 011 -- 使用8位地址偏移 eax ebx

10h --- 0x10

MOD = {

00 -- 不使用地址偏移

01 -- 使用8位地址偏移

10 -- 使用16/32位地址偏移

11 -- 仅仅使用通用寄存器

}

REG = {

000 eax ss0 mm0

001 ecx ss1 mm1

010 edx ss2 mm2

011 ebx ...   ....

100 esp/使用SIB

101 ebp

110 esi

111 edi

}

R/M ={

表示寄存器或内存,与REG同

}

SIB = |Scale 7-6 | Index 5-3 | Base 2-0 |

“所表示的地址 = Base + Index * 2 ^Scale, 其中 Base,Index 与 REG 同”

这不是三地址指令么,只是有些别扭而已。

参考文献:

http://www.intel.com/Assets/PDF/manual/253666.pdf


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值