【问题标题】:Set a breakpoint on GDT/LDT/IDT entery在 GDT/LDT/IDT 输入上设置断点
【发布时间】:2023-05-19 13:45:01
【问题描述】:

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

我正在尝试使用 bochs x86 模拟器来模拟这种情况,但我很难做到。

谢谢。

【问题讨论】:

    标签: x86 gdb breakpoints bochs gdt


    【解决方案1】:

    我成功地将断点放在了 idt 入口(如果有人知道如何调试 gdt 或 ldt 我也想知道)

    1.我通过以下方式打开了中断跟踪: 显示int

    (显示,当中断发生时)

    2。我让 bochs 在 Linux“dos”下运行。

    00200280100: iret 0010:0017937b (0xc017937b)

    00200280101:异常(非软整数)0010:0010c8dd (0xc010c8dd)

    00200281076: iret 0010:0017937b (0xc017937b)

    00200281119:异常(不是软整数)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:异常(非软整数)0010:0010aa30 (0xc010aa30)

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

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

    【讨论】:

    • 谢谢!我觉得这个方法对gdt/ldt不起作用,我们需要弄清楚如何触发gdt/ldt读/写场景