我想修改一些系統調用以進行跟蹤。具體而言,每當系統調用open
時,我想打印一些消息。如何在Linux/Android 2.6.29中查找系統調用實現?
我一直在尋找互聯網和代碼,我發現open.c
在kernel/goldfish/fs/
目錄。這個文件中有很多功能。我怎麼知道哪個函數被準確地調用。我可以在所有這些函數中寫入一些printk
調用來找到它,但我也必須爲其他系統調用執行此操作。
所以,我有幾個問題,
1)什麼是找到系統調用的實現細節的最佳方式?
2)我使用的是內核2.6.29(金魚-Android)。在不同的內核版本中,系統調用的實現是不同的?
3)strace
告訴我msgget
,msgrecv
和'SYS_24'系統調用正在進行。我看着Android/bionic/libc/SYSCALLS.txt
文件和msgget不在那裏。
但是,當我看着android/bionic/libc/kernel/arch-arm/asm/unistd.h
文件,我可以在那裏找到msgget
。我不明白髮生了什麼,然後我如何才能找到msgget
的實現?
謝謝。
StackOverflow對於像這些Android內部問題不是一個很好的資源。 StackOverflow主要用於與使用SDK構建應用程序相關的問題。如果您在這裏沒有得到答案,請前往http://source.android.com,選擇一個合適的Google Group,然後嘗試在那裏詢問。 – CommonsWare
大多數Linux系統(和Android是一個Linux系統的核心)可以通過'ptrace'來捕獲系統調用。你調查過這條路嗎? –
這就是strace正在做的事情。但是,可能strace二進制文件有一個不好的系統調用數據表(爲不同版本構建)。 –