fr33f0r4ll

自分用雑記

Radare2 メモ

控え目に言ってコマンドが分かりにくいandリファレンスが足りてないので自分用にメモ。

afvn old_name new_name @ func

func内のold_nameをnew_nameに変える。 デフォルトだとlocal_4hとかarg_4hとかになっているのでよほど短いコードか抜群の記憶力がないと動作を把握できないので解明は積極的にした方がいいと思う。

afn new_name old_name

関数の名前を変える。 何故か変数とは古い名前と新しい名前の順番が入れかわっているので混乱しがち。 その上変更に失敗してもエラーメッセージが表示されない(表示する機能ないんだろうか?)ので気づきにくい。 同じような機能で違うパターンを使うのは良くないUIだと思うんだけど、理由があるんだろうか?

f name = addr

アドレスにラベルを付ける。 調べてもさっぱりやり方がさっぱり分からなかったけど、ツイッターで凄い人達が言ってたのを見てようやく知った機能。 nameをobj.nameのようにピリオド区切りにしないと、そのアドレスを参照している箇所でラベルが反映されないので注意。 引数の値によって動作変えるのいくない。

Ps name

今解析しているプログラムの解析結果を保存する。 ラベルとか関数に付けた名前とかが保存される。 長すぎる関数は保存してロードしたときに壊れる可能性がある。 極力使わない方がいいかもしれないが代替案もない。

ロードしたときに関数の境界がおかしくなったときの解決策

afu end_addr @ function_addrで関数の終端を指定できる。 pdコマンドで終端を目で探してから、end_addrでretの次のアドレスを指定しないとend_addr自体は含まれない。

Po name

保存した解析結果をロードする。 r2コマンドの引数にnameを指定するとロードして起動するので、こっちの方を使うことが多いかもしれない。

r2 -p name

関数として解析したいとき

afr func_name address

これでaddressの位置から関数として解析できる。 afvaで自動的に引数の解析をしてくれる。 afv系のコマンドで操作できるらしいが、思い通りに動かない。