web-dev-qa-db-ja.com

radare2はローカル変数を名前で出力できますか?

Radare2が関数を分析するとき、local_4hebp - 0x4などのローカル変数名を与えます。また、目的が明確になったときに、これらの変数にもっと意味のある名前を付ける機能も提供します。ただし、変数の名前が変更された後は、それらを印刷することがより困難になります。 mov eax, dword [ebp - i]のような指示を見たとき、私はしなければなりません

  1. 逆アセンブリの上部を見て、var int i @ ebp-0xcの行を見つけます。
  2. タイプpxw @ebp-0xc
  3. 出力の16(!)行の最初の行からiの値を読み取ります
  4. それが最後のコマンドからシフトされた後、分解で私の場所をもう一度見つけてください

lotの作業ではありませんが、多くの変数を含む多くのアセンブリを調べていると、すぐに面倒になります。

フォローアップの質問として、GDBのdisplayコマンドのように、実行がブレークポイントで停止するたびに変数/場所を出力することは可能ですか?

11
devneal17

pxw @ local_4hの代わりに、afvda nalyze f unction v ariables d isplay)、すべてまたは特定の変数を一覧表示します。

[0x00400526]> afvd
var local_14h = 0x7fff2eab16ac  0x2eab17a000000001   ........
var local_20h = 0x7fff2eab16a0  0x00007fff2eab17a8   ........ @rsp rsi stack R W 0x7fff2eab21ec --> stack R W 0x74756f2e612f2e (./a.out) --> ascii
var local_8h = 0x7fff2eab16b8  0x0000000000000041   A....... ascii
var local_4h = 0x7fff2eab16bc  0x0040057000000000   ....p.@.

[0x00400526]> .afvd local_14h   # note the dot
var local_14h = 0x7fff2eab16ac  0x2eab17a000000001   ........

afvd nameは、変数 'name'を表示するr2コマンドを返します。先頭のドットがコマンドを実行します。
いつでも?コマンドを使用してヘルプを取得できることを忘れないでください。

[0x00400526]> afv?
|Usage: afv[rbs]
| afvr[?]                     manipulate register based arguments
| afvb[?]                     manipulate bp based arguments/locals
| afvs[?]                     manipulate sp based arguments/locals
| afvR [varname]              list addresses where vars are accessed
| afvW [varname]              list addresses where vars are accessed
| afva                        analyze function arguments/locals
| afvd name                   output r2 command for displaying the value of args/locals in the debugger
| afvn [old_name] [new_name]  rename argument/local
| afvt [name] [new_type]      change type for given argument/local
| afv-([name])                remove all or given var

実際には、質問と同じ構文を(ほぼ)使用する可能性もあります。ただし、変数名は事前にフラグとして追加する必要があり、これは関数を入力するたびに行う必要があります。

[0x00400526]> .afv*
[0x00400526]> pxw @ fcnvar.local_14h 
0x7fff2eab16ac  0x00000001 0x2eab17a0 [omitted]
4
Liblor