2011-04-22 82 views

回答

9

如果您使用的是基於x86的機器,則可以使用sidt指令來獲取中斷描述符表寄存器以及中斷描述符表本身。有了這個功能,您可以獲得0x80系統調用中斷調用的system_call(或與x86-64兼容的ia32等價物)函數的地址。拆解該中斷處理程序並掃描特定的間接調用指令,可以提取調用指令中的地址。該地址是您的系統調用表(在x86上)或x86-64上的IA32兼容性系統調用表。

獲取x86-64本地系統調用表是類似的:不要用sidt重建中斷表,請閱讀處理器的IA32_LSTAR MSR。 (high << 32 | low)的地址是系統調用調度程序。像以前一樣掃描內存,從調用指令中提取地址,但請記住掩蓋地址的高32位。

這可以掩蓋很多的更多技術信息(比如要搜索哪些字節),您應該先理解內核代碼。在Google快速搜索後,我發現整個過程都有文檔記錄(例如模塊代碼)here

祝你好運,並儘量不要自責!

+0

不幸的是,鏈接已經死了:( – galaxy 2015-07-17 13:27:10