ねこみみタイフーン¶
中断中
Article¶
sonots:blog - ptraceとELFとLinuxレジスタ
http://blog.livedoor.jp/sonots/archives/50135985.html
プログラムモグモグ - ptraceシステムコール入門 ― プロセスの出力を覗き見してみよう!
http://itchyny.hatenablog.com/entry/2017/07/31/090000
うさみみハリケーンのLinux版があればいいのに。。。ということで思い立った。
それできるよ。gdbならね。というツッコミは無しの方向で。
CTFで使えるでしょ。CTF用なのだよ。
稼働中のプロセスをごっぞりダンプできたりもするので、フォレンジックにも使えるかも。
いや、pedaとか、もっと便利なツールを教えてもらった。。
すると、これの出番無いかもしれんなぁ。。
現状¶
プロトタイプ開発中→中断中
- 実行中プロセスのメモリダンプ→完成
- 実行中プロセスのレジストリダンプ→中途半端だけど作った
- 実行中プロセスの速度低下→完成
- 実行中プロセスのメモリ差分抽出→断念
構想¶
nkmmtyp_memdump¶
プロトタイプ
nkmmtyp_dump_20150524.c
実行中プロセスのメモリダンプ。
引数に pid ダンプをするメモリアドレス 表示するサイズ が必要。
アドレスは、 /proc/(pid)/maps を調べる、もしくは、 pmap コマンドを使うと判る。
nkmmtyp_regdump¶
プロトタイプ
nkmmtyp_regdump_20150711.c
実行中プロセスのレジスタの値の取得。
ptraceのPTRACE_GETREGSで実現できる。
今動いている状態のプロセスを一時止めてから、レジスタの値を取得する。
任意のタイミングで止められるといっても、所詮、人が手でコマンド叩くタイミングなので、あの命令の実行時に~・・・とかは無理ゲーとなる。
なので、ここぞというタイミングで取れないこと請け合い。
これ単体で使う機会はあんまりなさそうだけど、何かと組み合わせることで応用したい。
nkmmtyp_slow¶
プロトタイプ
nkmmtyp_slow_20150524.c
実行中プロセスの動作速度を遅くする。遅くするのでCPU使用率も下がる。
引数に pid ナノ秒(1命令毎に何ナノ秒停止するか) が必要。
たぶん、タイミング障害の再現試験とかでも使える気がする。
nice値をいじるとかで実現しているのではなく(それだったらniceコマンド使えばいいわけだし)、アレンブラレベルの1命令毎にnanosleepを挟み込んでいる。
nkmmtyp_diff¶
リアルタイムでのメモリ内容の差分抽出
1stepずつメモリの差分を出せば、そのプログラムがどんな動きか解るであろう。
そういうの作りたかった。
設計¶
保留
作らなくても、もう既に存在しているもの¶
livepatch¶
実行中のプロセスのメモリを書き換える。
鵜飼さんが作ったlivepatchという神ツールがある。
livepatch
http://ukai.jp/Software/livepatch/
ただ、だいぶ昔に作られたソースみたいなので、今のLinux環境でコンパイルするには難がある。
- コンパイルに、bintuils-develが必要なので、インストールする。
- #include は、#include に修正する。
- bfd_get_section_size_before_reloc が見つからないというエラーが出る。bfd_get_section_size に修正する。
これでなんとか、、、(ちゃんと動作確認してないけど)
関数コールトレーサー¶
tracef
http://binary.nahi.to/tracef/
hogetrace
http://d.hatena.ne.jp/yupo5656/20071008/p1
走行中のプロセスの標準出力を覗き見る¶
strace -p `pidof a.out` -e write -s 256 2>&1 | sed -ne 's/^write(1, \"\(.*\)\"\.*, [0-9]*) *= [0-9]*$/\1/p'
参考:揮発性のメモ
http://d.hatena.ne.jp/iww/20080129/stdout
Linux標準コマンド¶
コマンド | 概要 |
---|---|
gdb | デバッガ |
strace | システムコールのトレース |
strings | バイナリ中も文字列抽出 |
readelf | ELFファイル形式の詳細出力 |
objdump | 逆アセンブラっぽいもの |
pmap | プロセスのメモリマップ参照 |