簡體   English   中英

C庫如何調用內核系統調用

[英]How does a C library call kernel system calls

我知道在類似Unix的系統中,諸如glibc之類的c庫充當內核和用戶域之間的中介。 因此,例如,在實現malloc() ,glibc如何調用Linux內核的系統調用,是否使用匯編語言?

在Linux x86中,系統調用(系統調用)是通過調用中斷0x80 在組裝中,它是通過以下方式完成的:

int $0x80

syscall的選擇是通過將信息傳遞到CPU寄存器來完成的。 malloc本身不是syscall,但是malloc算法通常使用sbrkmmap syscall( sbrk brk syscall)。

有關Linux x86系統調用的更多信息,您可以閱讀本文檔

編輯:正如Jester在評論中提到的那樣,Intel x86處理器(在Pentium IV之后)現在支持沒有int開銷的systenter / sysexit指令,並且在這些處理器上,Linux將這些指令用於系統調用。

在0x86體系結構上調用exit(0)syscall的示例。

movl $1, %eax   #$1=number of exit syscall. 
movl $0, %ebx   #$0=First argument of exit syscall
int 0x80        #call the software interrupt

每個系統調用都有一個編號,該編號可以在/usr/include/asm/unistd.h中找到。 在以上示例中,出口syscall的編號為1。然后,設置syscall所需的參數。 之后,您調用軟件中斷int 0x80。

因此,對於malloc,它將在內部調用brk或mmap,然后將設置所需的參數,然后將調用int0x80。

暫無
暫無

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

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