我開始之前,這裏所說的運行@ RING0(內核模式)的所有代碼 - OSX 10.9:怪異的行爲 - 讓GDT @聯彙編
以下功能崩潰:
UINT64 GetGdtBase()
{
UINT64 gdt = 0;
asm("sgdt %0\n" ::"m"(gdt));
return gdt >> 16;
}
以下功能FINE運行:
UINT64 GetGdtBase(UINT64* result)
{
asm("sgdt %0\n" ::"m"(*result));
*result >>= 16;
return *result;
}
EHM,它看起來有點滑稽&怪我,但也許你們會發現,我在這裏做了什麼。
很想聽到一些建議。
感謝
1.第二個版本是否在沒有崩潰的意義上運行良好,或者在做你期望的意義上運行? 2.如果我正確理解'asm ::',它希望在第二個輸入地址之後輸入地址,所以'gdt'或'* result'是輸入而不是結果。如果是這樣,你不想要一個':'來表示一個結果地址嗎? – Steve 2014-10-06 09:33:38
感覺不崩潰。第一個崩潰 – Rouki 2014-10-06 10:04:57