Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在x86汇编程序中查找代码段的偏移量_Assembly_X86 - Fatal编程技术网

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

Assembly 在x86汇编程序中查找代码段的偏移量,assembly,x86,Assembly,X86,我是x86汇编编程的新手,在一次作业中遇到了这个问题。 我的目标是为某些中断(比如INT32或INT35,两者都是用户定义的中断)编写中断描述符表条目。我阅读了《英特尔x86开发人员手册》,找到了IDT条目的结构。为了这个问题,让我考虑一下我的程序有以下结构: myCodeGeneratingInterrutpt35: ... ... ... someOtherCode: .. .. .. myInterruptHandlerForInterrupt35: .

我是x86汇编编程的新手,在一次作业中遇到了这个问题。 我的目标是为某些中断(比如INT32或INT35,两者都是用户定义的中断)编写中断描述符表条目。我阅读了《英特尔x86开发人员手册》,找到了IDT条目的结构。为了这个问题,让我考虑一下我的程序有以下结构:

myCodeGeneratingInterrutpt35:
  ...
  ...
  ...

someOtherCode:
  ..
  ..
  ..

myInterruptHandlerForInterrupt35:
  .
  .
  .
  IRET

someOtherInterruptHandlers:
 ... ..
此代码位于从地址开始的代码段中,例如0xa1000(存储在CS中)。让IDTR指向某个地址,比如0xe5000。我有8字节的条目,对应于从[IDTR]开始的每个IDT条目。根据我的计算,INT 35的条目是0xe5118。 (a) 。你们能给我一个方法找出以“myInterruptHandlerForInterrupt35:…”开头的代码的地址吗?
(b) 。另外,如何找到代码“myInterruptHandlerForInterrupt35”与CS之间的偏移量?

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


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

嘿,杰斯特!谢谢你的回答。你能告诉我如何找到标签的地址吗?任何数学公式或洞察到这一点将不胜感激。不知道你想要什么。。。只需使用标签名,汇编程序和链接程序就会处理其余的部分。我遇到的问题是为INT35定义IDT条目。IDT条目需要中断处理程序的段选择器,以及与中断处理程序例程所在代码段的偏移量。我在计算“myInterruptHandlerForInterrupt35”的偏移量时遇到了一个问题,当我的代码段从“MyDegrationInterrupt35”开始时,
CS
是您的选择器,标签是您的偏移量。问题是什么?定义IDT条目时,我在偏移字段中输入的数值是多少?