在x86汇编程序中查找代码段的偏移量

时间:2015-03-08 16:30:47

标签: assembly x86

我是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”的偏移量?

1 个答案:

答案 0 :(得分:0)

如果您处于保护模式,则应该知道内核的CS。即使您没有,也必须已经处于内核模式才能修改IDT,因此假设您只有一个代码段,那么当前CS将为CS中断处理程序请注意,CS本身与基址无关,因为它存储在GDT或LDT中(如果适用)。因此,如果您认为从该地址开始的段的选择器位于starting at address 0xa1000 (which is stored in CS)中,则CS才有意义。

至于偏移量,那当然只是标签的地址。