ねこみみタイフーン » 履歴 » バージョン 1
kanata, 2025/04/13 16:38
1 | 1 | kanata | # ねこみみタイフーン |
---|---|---|---|
2 | |||
3 | {{toc}} |
||
4 | |||
5 | |||
6 | 中断中 |
||
7 | |||
8 | # Article |
||
9 | |||
10 | sonots:blog - ptraceとELFとLinuxレジスタ |
||
11 | http://blog.livedoor.jp/sonots/archives/50135985.html |
||
12 | |||
13 | プログラムモグモグ - ptraceシステムコール入門 ― プロセスの出力を覗き見してみよう! |
||
14 | http://itchyny.hatenablog.com/entry/2017/07/31/090000 |
||
15 | |||
16 | ---- |
||
17 | |||
18 | うさみみハリケーンのLinux版があればいいのに。。。ということで思い立った。 |
||
19 | それできるよ。gdbならね。というツッコミは無しの方向で。 |
||
20 | |||
21 | CTFで使えるでしょ。CTF用なのだよ。 |
||
22 | 稼働中のプロセスをごっぞりダンプできたりもするので、フォレンジックにも使えるかも。 |
||
23 | |||
24 | --- |
||
25 | いや、pedaとか、もっと便利なツールを教えてもらった。。 |
||
26 | すると、これの出番無いかもしれんなぁ。。 |
||
27 | |||
28 | # 現状 |
||
29 | |||
30 | プロトタイプ開発中→中断中 |
||
31 | |||
32 | * 実行中プロセスのメモリダンプ→完成 |
||
33 | * 実行中プロセスのレジストリダンプ→中途半端だけど作った |
||
34 | * 実行中プロセスの速度低下→完成 |
||
35 | * 実行中プロセスのメモリ差分抽出→断念 |
||
36 | |||
37 | # 構想 |
||
38 | |||
39 | ## nkmmtyp_memdump |
||
40 | |||
41 | プロトタイプ |
||
42 | attachment:nkmmtyp_dump_20150524.c |
||
43 | |||
44 | 実行中プロセスのメモリダンプ。 |
||
45 | 引数に pid ダンプをするメモリアドレス 表示するサイズ が必要。 |
||
46 | アドレスは、 /proc/(pid)/maps を調べる、もしくは、 pmap コマンドを使うと判る。 |
||
47 | |||
48 | ## nkmmtyp_regdump |
||
49 | |||
50 | プロトタイプ |
||
51 | attachment:nkmmtyp_regdump_20150711.c |
||
52 | |||
53 | 実行中プロセスのレジスタの値の取得。 |
||
54 | ptraceのPTRACE_GETREGSで実現できる。 |
||
55 | 今動いている状態のプロセスを一時止めてから、レジスタの値を取得する。 |
||
56 | 任意のタイミングで止められるといっても、所詮、人が手でコマンド叩くタイミングなので、あの命令の実行時に~・・・とかは無理ゲーとなる。 |
||
57 | なので、ここぞというタイミングで取れないこと請け合い。 |
||
58 | これ単体で使う機会はあんまりなさそうだけど、何かと組み合わせることで応用したい。 |
||
59 | |||
60 | ## nkmmtyp_slow |
||
61 | |||
62 | プロトタイプ |
||
63 | attachment:nkmmtyp_slow_20150524.c |
||
64 | |||
65 | 実行中プロセスの動作速度を遅くする。遅くするのでCPU使用率も下がる。 |
||
66 | 引数に pid ナノ秒(1命令毎に何ナノ秒停止するか) が必要。 |
||
67 | たぶん、タイミング障害の再現試験とかでも使える気がする。 |
||
68 | nice値をいじるとかで実現しているのではなく(それだったらniceコマンド使えばいいわけだし)、アレンブラレベルの1命令毎にnanosleepを挟み込んでいる。 |
||
69 | |||
70 | ## nkmmtyp_diff |
||
71 | |||
72 | リアルタイムでのメモリ内容の差分抽出 |
||
73 | |||
74 | 1stepずつメモリの差分を出せば、そのプログラムがどんな動きか解るであろう。 |
||
75 | そういうの作りたかった。 |
||
76 | |||
77 | # 設計 |
||
78 | |||
79 | 保留 |
||
80 | |||
81 | # 作らなくても、もう既に存在しているもの |
||
82 | |||
83 | ## livepatch |
||
84 | |||
85 | 実行中のプロセスのメモリを書き換える。 |
||
86 | 鵜飼さんが作ったlivepatchという神ツールがある。 |
||
87 | |||
88 | livepatch |
||
89 | http://ukai.jp/Software/livepatch/ |
||
90 | |||
91 | ただ、だいぶ昔に作られたソースみたいなので、今のLinux環境でコンパイルするには難がある。 |
||
92 | |||
93 | - コンパイルに、bintuils-develが必要なので、インストールする。 |
||
94 | - #include <linux/user.h> は、#include <sys/user.h> に修正する。 |
||
95 | - bfd_get_section_size_before_reloc が見つからないというエラーが出る。bfd_get_section_size に修正する。 |
||
96 | |||
97 | これでなんとか、、、(ちゃんと動作確認してないけど) |
||
98 | |||
99 | |||
100 | ## 関数コールトレーサー |
||
101 | |||
102 | tracef |
||
103 | http://binary.nahi.to/tracef/ |
||
104 | |||
105 | hogetrace |
||
106 | http://d.hatena.ne.jp/yupo5656/20071008/p1 |
||
107 | |||
108 | ## 走行中のプロセスの標準出力を覗き見る |
||
109 | |||
110 | ``` |
||
111 | strace -p `pidof a.out` -e write -s 256 2>&1 | sed -ne 's/^write(1, \"\(.*\)\"\.*, [0-9]*) *= [0-9]*$/\1/p' |
||
112 | ``` |
||
113 | |||
114 | 参考:揮発性のメモ |
||
115 | http://d.hatena.ne.jp/iww/20080129/stdout |
||
116 | |||
117 | ## Linux標準コマンド |
||
118 | |||
119 | | コマンド | 概要 | |
||
120 | |----------|----------------------------| |
||
121 | | gdb | デバッガ | |
||
122 | | strace | システムコールのトレース | |
||
123 | | strings | バイナリ中も文字列抽出 | |
||
124 | | readelf | ELFファイル形式の詳細出力 | |
||
125 | | objdump | 逆アセンブラっぽいもの | |
||
126 | | pmap | プロセスのメモリマップ参照 | |