簡體   English   中英

在x86匯編程序中查找代碼段的偏移量

[英]Finding offset for code segment in x86 assembly program

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

如果處於保護模式,則應該了解內核的CS 即使您沒有,也必須已經處於內核模式才能修改IDT,因此,假設您只有一個代碼段,則當前CS將用作中斷處理程序的CS 請注意, CS本身與基地址無關,因為基地址在適用時存儲在GDT或LDT中。 因此starting at address 0xa1000 (which is stored in CS)才有意義,如果你的意思是,對於段起始於該地址的選擇是在CS

至於偏移量,那當然只是標簽的地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM