首页
社区
课程
招聘
[旧帖] [求助]Register 编号问题 0.00雪花
发表于: 2008-7-1 15:21 9349

[旧帖] [求助]Register 编号问题 0.00雪花

2008-7-1 15:21
9349

最近在自己程序里去读一个Method的machine code,然后想把各个指令转化为Asm的指令。遇到一个问题。就是咋去判断,mov reg32,reg32中的reg32是EAX 还是EBX.
使用现有的工具去看下面的代码发现。
_asm
{
                push ebp
004136FD  push        ebp  
                mov ebp,esp
004136FE  mov         ebp,esp
                mov eax,esi
00413700  mov         eax,esi
                mov ebx,1
00413702  mov         ebx,1
                mov eax,ebx
00413707  mov         eax,ebx
                mov ecx,eax
00413709  mov         ecx,eax
                mov edx,ecx
0041370B  mov         edx,ecx
                pop ebp
0041370D  pop         ebp  
}
第一条指令,可以通过指令编号知道是:0x55
第二条:Mov reg32,reg32;的编号是:0x8b,而ebp,esp是0xec
... mov  eax,esi 是0x8b,...0xc6
...mov   eax,ebx是0x8b,...0xc3
...mov   ecx,eax是0x8b,...0xc8
...mov  edx,ecx 是0x8b,...0xd1
根据猜测红色字的应该是两个寄存器编号的组合,就是不晓得对不对;也没找到什么资料。所以就上来请教各位朋友,希望能帮忙解答解答。最好能给个比较具体的答案。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (3)
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
本来我以为,寄存器编号应该是下面这些
       AL = 0 AX = 0 EAX = 0
           CL = 1 CX = 1 ECX = 1
           DL = 2 DX = 2 EDX = 2
           BL = 3 BX = 3 EBX = 3
           AH = 4 SP = 4 ESP = 4
           CH = 5 BP = 5 EBP = 5
           DH = 6 SI = 6 ESI = 6
           BH = 7 DI = 7 EDI = 7
可是从Disassmbler上看到的似乎并不是这样,劳烦各位帮个忙,解答解答。这个问题困了我很长时间了。
2008-7-1 15:47
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
3
为什么不去查intel手册? 上面说的很清楚
我来简单的说下mov reg32,reg32
第一个8B不用管, 后面的BYTE按bit展开
b1 b2 b3 b4 b5 b6 b7 b8
b1 = 1 && b2 = 1 表示 两个reg32都是寄存器
b3b4b5 表示dst寄存器
b6b7b8 表示src寄存器

ex1.
8B C0
b1 = 1
b2 = 1
b3b4b5 = 0
b6b7b8 = 0
so mov eax, eax

ex2
8B EC
b1 = 1
b2 = 1
b3b4b5 = 5
b6b7b8 = 4
so mov ebp, esp
2008-7-1 16:02
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢!
Intel手册是看了一点,就是没有看完全。

看来还是回去好好看看。
谢谢老大的讲解和提醒啦!
2008-7-1 16:07
0
游客
登录 | 注册 方可回帖
返回
//