在GDT / LDT / IDT条目上设置断点

时间:2015-02-16 11:12:33

标签: x86 gdb breakpoints bochs gdt

我正在研究x86架构, 我想在全局描述符表条目或解释描述符表条目或ldt上设置断点 - 这意味着,例如,每次从idt / gdt / ldt读取特定条目时都会触发断点。

我正在尝试使用bochs x86模拟器来模拟这种情况,但我遇到了麻烦。

感谢。

1 个答案:

答案 0 :(得分:2)

我成功地在idt条目上设置了断点 (如果有人知道如何调试我想知道的gdt或ldt)

<强> 1。我打开了中断跟踪: show int

(显示,发生中断时)

<强> 2。我让bochs运行Linux“dos”。

<00> 00200280100:iret 0010:0017937b(0xc017937b)

00200280101:异常(不是softint)0010:0010c8dd(0xc010c8dd)

00200281076:iret 0010:0017937b(0xc017937b)

00200281119:异常(不是softint) 0x0010:0010aa30 (0xc010aa30)

第3。我找了一个异常地址,也是idt中的条目 我发现0010:0010aa30是条目号0x0e的地址巫婆是“页面错误”中断。

中断描述符表(base = 0x00000000c0106060,limit = 2047): IDT [0x0e] = 32位陷阱门目标= 0x0010:0010aa30 ,DPL = 0

<强> 4。我在虚拟地址中设置了一个断点:0x0010:0x0010aa30

vbreak 0x0010:0010aa30

<强> 5。我让机器运行并得到了:

00200302058:异常(不是softint)0010:0010aa30(0xc010aa30)

(0)断点5684127,在0010:0010aa30(0xc010aa30) 接下来在t = 200302058

(0)[0x00000010aa30] 0010:000000000010aa30(unk.ctxt):push 0x00110200; 6800021100