大家都知道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結構體