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
系のコマンドで操作できるらしいが、思い通りに動かない。