14
A
回答
1
系統調用是用戶和內核空間之間的接口。列表見man 2 syscalls或syscalls.h。
不應該將它們與標準C庫函數(如printf
)混淆。這些通常最終會調用系統調用,但不一定。此外,用戶空間程序可以直接使用syscall函數調用系統調用。
30
正如馬修所說,strace使用系統調用來發揮其魔力。 ptrace用於實現調試器和其他需要檢查其他程序正在做什麼的工具。實質上,strace會調用ptrace並附加到目標進程。
只要目標進程進行系統調用,它就會停止,並會通知strace。然後strace將檢查目標進程的寄存器和堆棧(也使用ptrace)來確定正在進行什麼系統調用(每個調用都有唯一的編號,通過寄存器傳遞)以及參數是什麼。 strace然後恢復過程。當它從系統調用中返回時,它會停止,並且會再次通知strace,因此它可以檢查返回值。 strace會在每次發生這種情況時爲用戶打印一些信息。
在回答第二個問題時,系統調用與普通函數調用不同,系統調用在內核中實現,而常規函數在用戶空間中實現。儘管如此,這是一個完整的蠕蟲。
3
我寫了一篇博客文章about how strace works和一篇更長的博文about how syscalls work。
strace
通過使用ptrace
系統調用進行工作,這會導致內核在每次進入或退出內核時都會通過系統調用暫停正在被跟蹤的程序。跟蹤程序(在這種情況下爲strace
)可以使用ptrace
檢查程序的狀態。
strace
根據系統的工作方式獲取每個系統調用的參數。在x86-64系統上,系統調用的參數在CPU寄存器中傳遞。在這種情況下,strace
可以使用PTRACE_GETREGS
參數調用ptrace
來獲取寄存器值的副本並將其打印出來。
相關問題
- 1. 如何在php中避免strace
- 2. 如何解釋strace的輸出
- 3. 如何使用strace跟蹤子進程?
- 4. 如何在Android上使用strace?
- 5. strace「亂序」
- 6. Unix strace命令
- 7. set_thread_area in strace
- 8. libc.so MMAP strace的
- 9. 解釋strace輸出
- 10. strace java小程序
- 11. Strace相當於windows?
- 12. strace高epoll_wait時間
- 13. 將自定義文本打印爲strace。 Strace評論
- 14. strace的Android應用程序
- 15. 試圖理解strace輸出
- 16. strace的輸出處理
- 17. strace修復掛起進程
- 18. 防止strace縮寫參數?
- 19. strace的輸出問題
- 20. strace輸出問題解決
- 21. 使用帶mpiexec的strace
- 22. STRACE輸出的澄清
- 23. android系統中的'strace'
- 24. strace的多線程程序
- 25. 可視化strace輸出
- 26. 用strace和ltrace調試
- 27. strace一個python函數
- 28. strace的打印asound在IOCTL
- 29. Android strace在Real設備上
- 30. Ajax如果不工作。如何工作?
但是如何識別系統調用**編程**??? – gdb 2011-03-31 01:34:43
底線是它使用['ptrace'](http://linux.die.net/man/2/ptrace)。你可以閱讀[來源](http://www.google.com/codesearch/p?hl=en#cZwlSNS7aEw/external/strace/strace.c&q=strace.c&sa=N&cd=1&ct=ri)(這是Android版本)的確切細節。 – 2011-03-31 01:40:40
它如何攔截參數? – 2011-09-23 15:30:11