2016-03-07 40 views
0

我試過BRK系統調用函數中添加此:如何找到該程序的當前位置突破

void *addr = sbrk(0); 
printk("current-add-is-%p-\n", addr); 

但它的內核編譯時返回的錯誤SBRK功能的隱式聲明。而我無法找到sbrk的定義! 我需要測量的是,無論何時某個用戶進程試圖擴展其程序中斷地址,我都會知道它當前的程序中斷地址,以便我可以測量有多少內存進程正在請求。

謝謝。

回答

0

看起來你正在嘗試做錯事。

沒有'sbrk'系統調用,有'brk'。除此之外,它將被命名爲sys_brk,但您沒有理由調用它。所以如果你想了解如何瞭解當前的休息地址,請閱讀brk的消息來源。

但是,如果您沒有碰巧找到brk的來源,您究竟在哪裏?

+0

請問您可以通過「讀取brk的源代碼」來說明您在brk系統調用方法中的含義。我明白沒有sbrk系統調用。但是sbrk的man頁面說sbrk(0)會給出當前的程序中斷地址,所以剛剛嘗試了sbrk(0) –

+0

@ArjunBora:手冊頁描述了可用於**用戶空間**程序的函數。 *內核空間*代碼與*不同*功能集一起操作。 – Tsyvarev

+0

@Tsyvarev好的,那麼有什麼辦法可以從內核空間找到當前程序中斷地址?相當於sbrk(0)謝謝。 –