首页
社区
课程
招聘
[求助]关于LDT,GDT和LDT
发表于: 2013-4-13 22:02 8630

[求助]关于LDT,GDT和LDT

2013-4-13 22:02
8630
今天在看IDT表,然后看了看段选择子在IDTENTRY中的位置





个人理解应该是IDTENTRY结构 (前16个位和后16个位)组成IDT地址,然后取16-31位组成选择子selector,其中16-28位组成GDT或者LDT的索引值

我不太清楚这样理解对不对。。。。如果按照我这样理解的话,实际就有了一个很大的问题



用WINDBG看IDT的地址的时候发现,很多IDTENTRY结构的第16-31位都是相同的0x0008,也就是2进制的 0000 0000 0000 1000   去掉指示位TI和请求特权RPL, 也就是说GDT或者LDT的索引值是1

如果这样说的话,是不是说如果修改了GDT索引值是1那个地址的内容,就相当于HOOK了绝大部分的中断??还是因为我哪一步错了导致所有的选择子都指向了一个相同的索引?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 39
活跃值: (169)
能力值: ( LV3,RANK:38 )
在线值:
发帖
回帖
粉丝
2
段选择子当然都是指向内核段了。
2013-4-13 22:13
0
雪    币: 39
活跃值: (169)
能力值: ( LV3,RANK:38 )
在线值:
发帖
回帖
粉丝
3
所有内核代码都是用的那个段,你把它都改了,系统不蹦才怪
2013-4-13 22:15
0
雪    币: 47
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
那这样说的话,假设如果要修改,就只能改索引值,也就是图里面的0x0008,然后把索引跳到我们自己的函数地址里面

但是不能修改索引指向地址里面的内容,因为不止IDT一个表需要通过GDT表?
2013-4-13 22:26
0
雪    币: 39
活跃值: (169)
能力值: ( LV3,RANK:38 )
在线值:
发帖
回帖
粉丝
5
虽然我没hook过,但一般都是修改idt里面的offset吧
2013-4-13 22:37
0
雪    币: 496
活跃值: (291)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
6
2013-4-13 23:11
0
雪    币: 55
活跃值: (519)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
7
保护模式下内核的基址始终是选择子08,那是内核的基址,中断描述符中的偏移值其实就等于真正的入口地址。(所有的虚拟地址都是以0开始计算的,所以才会有虚拟内存空间是4G的说法),
2013-4-14 07:40
0
雪    币: 55
活跃值: (519)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
8
包括用户模式的代码段选择子0b也是指向0。代表用户段的地址从0开始偏移。
2013-4-14 07:42
0
雪    币: 55
活跃值: (519)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
9
当然你在GDT中不但发现了
08 内核模式代码段基址指向0地址。
09 内核模式堆栈段基址指向0地址
0a 内核模式数据段基址指向0
0b 用户模式代码段基址也是0
0C 用户模式堆栈基址依旧为0
0d 数据段基址指向00000000
很清晰了,
2013-4-14 07:56
0
游客
登录 | 注册 方可回帖
返回
//