地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Linux】ltraceをstraceしたらptrace(2)を知った

ltraceをstraceしたらptrace(2)の存在を知りました。

surf.ml.seikei.ac.jp

ptrace() システムコールは、親プロセスが、別のプロセスの実行の監視/制御を 行ったり、コアイメージ (core image) やレジスタの調査/変更を 行ったりする手段を提供する。 ptrace() は、主にブレークポイントによるデバッグやシステムコールのトレースを 実装するのに用いられる。

トレースを開始するには、まず親プロセスで fork(2) を呼び出す。生成された子プロセスで PTRACE_TRACEME を行い、続いて (典型的には) exec(3) を行なう。 別の方法としては、 親プロセスが既存のプロセスに対して PTRACE_ATTACH を使用し、トレースを開始する。

manを読んでも雰囲気しかよくわからなかったです。ptraceを上手いことを使うことでstraceとかltraceは実装されているんだなと知りました。

blog.packagecloud.io

0xcc.net

後はftraceとかもあった記憶がある。ftraceはユーザスペースからはdebugfs通じてなんかするみたいなツールだった記憶があるけどどういうタイミングで使っていくのかはいまいちよくわかっていない...