我是x86汇编编程的新手,我在其中一个任务中遇到过这个问题。 我的目标是为某些中断写入中断描述符表条目(例如INT 32或INT 35,两者都是用户定义的中断)。我查看了英特尔x86开发人员手册,我发现了IDT条目的结构。出于这个问题的目的,让我们考虑我的程序具有以下结构:
myCodeGeneratingInterrutpt35:
...
...
...
someOtherCode:
..
..
..
myInterruptHandlerForInterrupt35:
.
.
.
IRET
someOtherInterruptHandlers:
... ..
此代码位于从地址开始的代码段中,例如0xa1000(存储在CS中)。让IDTR指向某个地址,比如0xe5000。我有8个字节的条目对应于从[IDTR]开始的每个IDT条目。因此,根据我的计算,INT 35的条目为0xe5118。 (一个)。你能不能给我一个方法来找出以“myInterruptHandlerForInterrupt35:...”开头的代码地址? (b)中。另外,如何从CS中找到代码“myInterruptHandlerForInterrupt35”的偏移量?
答案 0 :(得分:0)
如果您处于保护模式,则应该知道内核的CS
。即使您没有,也必须已经处于内核模式才能修改IDT,因此假设您只有一个代码段,那么当前CS
将为CS
中断处理程序请注意,CS
本身与基址无关,因为它存储在GDT或LDT中(如果适用)。因此,如果您认为从该地址开始的段的选择器位于starting at address 0xa1000 (which is stored in CS)
中,则CS
才有意义。
至于偏移量,那当然只是标签的地址。