Ghidra
プロジェクトごとに色々管理できる。
チートシート
まずはエントリポイントを探す。
大抵main関数見れば良い。
Decompile画面で変数名や関数名など自分がわかりやすい名前に変更できる。
左側のSymbol Treeで適当に関数を選択すると右側のDecompileにデコンパイルした結果が表示される。
Set Equateで定数に自分の好きな名前をつけれる。
Find Referencesで関数がどこに参照されているかなどを探せる。
Option + 矢印で 前/次 の場所へ。
Decompileウィンドウを開いていてListingウィンドウを開いていないときは下を見ればアドレスがわかる。
main関数にparamがあったらargc,argvで引数使うプログラム。なければ当然引数使わない。
外観変更
弄る場所: Edit->Tool Option->Decompiler->Display、Listing Display、Listing Fields->Cursor
ダークモード: backgroudを黒、文字を白にして、その他はHSVでsaturationを小さくvalueを大きくする。
Listingを表示していなくてもカーソル合わせたら対応するListingをポップアップしてくれる。
すでに命名した変数を新しい変数として新しく命名し直したい場合は、右クリックしてSplit Out As New Variableすれば良い。
たまにリネームできない時がある。
Symbol TreeからShow References toして関数呼び出し元を調べるが、そのときに呼び出し元関数名を表示する。Add ColumnsでFunction Nameを有効化すればOK。
GoやC++などディスコンパイル結果がめちゃくちゃになることがある。そういったときはGDBで動的解析する。 変数名と対応するレジスタがわかれば変数名_レジスタ名とリネームするとわかりやすい。