天天看點

系統調用lseek和核心file結構體之間的關系

大家都知道lseek就是移動檔案的讀寫位置, 也就是對應核心中file結構體中的某一個變量, 今天就是特别想看一下具體之間的關系.

軟體就在于實踐

首先需要有一個很友善調用lseek的環境, 這樣才不會影響我們調試的興趣, 希望能達到像python, matlab這樣每個函數可以手動跑, 而不像c語言一樣要編寫, 然後編譯, 然後執行, 然後再修改, 編譯. gdb可以

先準備檔案1.c, 前面的頭檔案很重要, 不能漏

-ggdb3是為了能友善的使用宏

接下來會使用call open來打開檔案, 但是如何找到我們将要打開的檔案在核心中的file結構體的位址呢? kgtp

找到a.out程序号是1138

找到核心do_sys_open源代碼

是以要在1023設定tracepoint找到f的值, 并且使用pid 1138來過濾, 總結就是要得到程序1138調用do_sys_open的時候的f的值

kgtp指令

但是發現f被優化, 隻能找彙編位址來定位f的值

是以tracepoint到0xffffffff811dd7e3

kgtp的指令

回到gdb中手動調用call open

回到kgtp中檢視f的值

到gdb中call lseek

檢視file結構體

繼續閱讀