已有许多资料介绍32位系统下的IDTR内容与IDT表项格式,本文专门对64位(IA-32e模式)下IDTR的内容和IDT表项格式进行介绍。
作为对比,首先回顾32位下的IDTR与IDT表项:
32位下,使用SIDT指令得到的IDTR内容为:
Name | Bit | Description |
Limit | 0..15 | 以字节为单位的IDT长度 |
Base | 16..47 | IDT起始32位地址 |
IDT的表项格式为:
Name | Bit | Description |
LowOffset | 0-15 | 服务函数地址低16位 |
selector | 16-31 | 段选择子 |
zero | 31-39 | 填充0x00 |
attr | 40-47 | 属性 |
HighOffset | 48-63 | 服务函数地址高16位 |
64位下,使用SIDT指令得到的IDTR内容为:
Name | Bit | Description |
Limit | 2 | 以字节为单位的IDT长度 |
Offset | 8 | IDT起始64位地址 |
IDT的表项格式为:
Name | Bit | Description |
LowOffset | 0-15 | 服务函数地址低16位 |
selector | 16-31 | 段选择子 |
zero | 31-39 | 填充0x00 |
attr | 40-47 | 属性 |
MiddleOffset | 48-63 | 服务函数地址中16位 |
HighOffset | 64-95 | 服务函数地址高32位 |
zero | 96-127 | 填充0x00 |
可以看出,64位下IDT的表项是基于32位进行的扩展,低64位没有变化,高64位的低32位用来扩展地址到64位,高64位的高32位填充0x00。
IDT表项的属性部分的内容没有变化,许多讲32位IDT格式的资料已经介绍过,可以搜到很多。
欢迎关注我的微博:大雄_RE。专注软件逆向,分享最新的好文章、好工具,追踪行业大佬的研究成果。