2013-01-01 49 views
4

我想修改一些系統調用以進行跟蹤。具體而言,每當系統調用open時,我想打印一些消息。如何在Linux/Android 2.6.29中查找系統調用實現?

我一直在尋找互聯網和代碼,我發現open.ckernel/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的實現?

謝謝。

+1

StackOverflow對於像這些Android內部問題不是一個很好的資源。 StackOverflow主要用於與使用SDK構建應用程序相關的問題。如果您在這裏沒有得到答案,請前往http://source.android.com,選擇一個合適的Google Group,然後嘗試在那裏詢問。 – CommonsWare

+0

大多數Linux系統(和Android是一個Linux系統的核心)可以通過'ptrace'來捕獲系統調用。你調查過這條路嗎? –

+0

這就是strace正在做的事情。但是,可能strace二進制文件有一個不好的系統調用數據表(爲不同版本構建)。 –

回答

3

This link提到幾乎所有的系統調用,它們的參數和位置在各自的文件中。它幫助我查找系統調用細節。

對於strace的回答在Chris的上述評論中給出,再次感謝他。