0
我剛開始嘗試瞭解linux內核,並試圖找到IDTR的位置。它似乎像它應該是一個簡單的過程,因爲彙編語言提供lidt
指令爲此目的。因此,我要覺得,我可以提供大到足以容納該寄存器的內容作爲輸出操作數,像這樣的結構:在內聯彙編中讀取非標準大小(IDTR)的寄存器(簡單?)
struct idt_ptr
{
unsigned short limit;
unsigned long long base;
} __attribute__((packed));
struct idt_ptr idtp;
int * get_idt() {
__asm__
__volatile__(
"lidt %0;"
: "=&r"(idtp)
);
}
這不起作用的,當然。它導致
/var/folders/yb/ybzqw8850nz9lzjsc6jf9hkw0000gn/T//ccvNm3SA.s:11:suffix or operands invalid for `lidt'
我認爲該結構的大小是正確的,short
應爲段地址16位和偏移long long
64位。問題只是我不能使用結構作爲輸出目標?否則我會怎麼做?此外,由於資源(對我的發現)一直稀缺,有誰能推薦一個關於這個主題的好教程或書籍嗎?
謝謝。
謝謝,我知道這是簡單的事情(我把蓋茨和西德特混淆是有點尷尬)。很明顯,我正在向後推進。謝謝你的幫助。 – fromClouds 2012-04-15 23:16:14