INT $0x80 是在哪裏被調用的

《Linux內核設計與實現(英文版·第3版)-華章經典原版書庫》 第73頁:


int $0x80,  這是一個調用x86 的第128號中斷,也就是一個system call handler. CPU 在執行這個指令以後,就會進入kernel mode,然後可以用各種kernel code了。



問題:它在哪裏調用的呢?


我估計是在C wrapper (P74) 裏有一個地方會調用 syscall_() 之類的方法。


像http://www.win.tue.nl/~aeb/linux/lk/lk-4.html  給出的 uid_t getuid(void) 函數一樣,


int getuid32_available = UNKNOWN;

uid_t getuid(void) {

 if (getuid32_available == TRUE)
                return INLINE_SYSCALL(getuid32, 0);   //喏,這就是調用中斷的代碼了!
        if (getuid32_available == UNKNOWN) {
                uid_t res = INLINE_SYSCALL(getuid32, 0);


                if (res == 0 || errno != ENOSYS) {
                        getuid32_available = TRUE;
                        return res;
                }
                getuid32_available = FALSE;
        }
        return INLINE_SYSCALL(getuid, 0);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章