首页
社区
课程
招聘
[原创]打造自己的反汇编引擎——Intel指令编码学习报告(三)
发表于: 2008-10-23 23:25 23748

[原创]打造自己的反汇编引擎——Intel指令编码学习报告(三)

2008-10-23 23:25
23748
    const char *RepeatPrefixes[] = {"lock", "rep", "repe", "repz", "repne", "repnz"};
    const char *SegmentRegisters[] = {"es", "cs", "ss", "ds", "fs", "gs"};

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (21)
雪    币: 334
活跃值: (22)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
不错,加油~~~~
2008-10-23 23:26
0
雪    币: 233
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
加油,继续跟
2008-10-23 23:48
0
雪    币: 111
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
继续顶.........!
2008-10-23 23:59
0
雪    币: 332
活跃值: (30)
能力值: ( LV12,RANK:460 )
在线值:
发帖
回帖
粉丝
5
有效率,占坑
2008-10-24 01:23
0
雪    币: 558
活跃值: (43)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
6
(1)在win32下,所有的cs, ds, ss使用的是同一个段选择子(尽管值不一样?高手解释一下

)。

根据OD的显示,
CS:1B
ES:23
DS:23
SS:23
FS:3B
而选择子的结构是下面的样子:
___________________________________________
|     15  ----  3     |   2  |  1  |  0   |
|     描述符索引      |  TI  |      RPL   |
-------------------------------------------
TI为1则为LDT,否则为GDT
RPL为所指向的段的权限级

这样来看的话,
CS:1B    11 011
ES:23   100 011
DS:23   100 011
SS:23   100 011
FS:3B   111 011
可以看到ES,DS,SS的描述符索引是一致的,而CS的则和ES,DS,SS不同.
在OD中输入一下指令:
mov dword ptr [402000h], 12345678h
mov eax,cs:[402000h]   ;eax:12345678h
mov ebx,ds:[402000h]   ;ebx:12345678h
mov ecx,es:[402000h]   ;ecx:12345678h
mov edx,ss:[402000h]   ;edx:12345678h
mov edi,fs:[402000h]   ;产生异常

由此可以推断,CS,DS,ES,SS虽然段描述符不一样,但是它们的段基址(为0)和段界限(4GB)是一致的。段基址和段界限一致,所能访问的地址范围就是一致的。

纯属个人见解,无实证。请高手指教。
2008-10-24 12:44
0
雪    币: 202
活跃值: (57)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
7
估计是这样,段选择子不同,那只能是索引的两个端映射到了同一线性地址空间。
不知道有没有什么方法(softice能不能?)读到系统的段描述符表,能读出来看看就好了。
等待其他高手证实。
2008-10-24 13:15
0
雪    币: 163
活跃值: (41)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
8
Softice可以读取GDT与LDT的内容。
在Windows深入剖析——内核篇中有如下描述:
2008-10-24 22:26
0
雪    币: 99
活跃值: (2378)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
所有指令前面的指令前缀都属于一条指令,一条指令中允许出现重复的指令前缀。只不过重复的指令前缀和只有一个的作用相同。
2008-10-25 00:07
0
雪    币: 199
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习了。。。。。。。
2008-10-25 19:35
0
雪    币: 71
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
挤到第一排!
2008-10-25 21:24
0
雪    币: 107
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我噻。。。。看能否有个比OD更好看的。嘿嘿
2008-10-26 12:40
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习了.谢谢楼主分享!
2008-10-26 17:51
0
雪    币: 437
活跃值: (273)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
14
不同的组只能使用改组其中一条前缀  改->该
2008-11-29 23:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
很详细~学习啦~~
2008-11-30 12:01
0
雪    币: 377
活跃值: (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
16
选择子其实就是段描述符在GDT或LDT中的偏移,每个段的偏移是不同的 ds ss 中的选择子是手动载入的 fs的选择子的对应的段描述符可能与其他段的界限或者属性不同
2008-12-8 18:25
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好文,必须得顶的。正在学习。
2010-7-19 22:31
0
雪    币: 161
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
又学到东西了,谢谢
2011-10-17 17:46
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
最近也要自己做一个反汇编引擎,学习了,谢楼主。
2011-10-18 01:44
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
很好。学习。
2012-3-30 16:12
0
雪    币: 45
活跃值: (55)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
21
很好的文章 学习了
2013-2-24 11:34
0
雪    币: 7
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
学习了......
2013-2-24 12:24
0
游客
登录 | 注册 方可回帖
返回
//