2016-12-29 65 views
6

Gdy radare2 analizuje funkcję, podaje lokalne nazwy zmiennych, takie jak local_4h dla ebp - 0x4. Oferuje również możliwość nadania tym zmiennym bardziej znaczących nazw, gdy ich cel staje się jasny. Jednak po zmianie nazw zmiennych drukowanie ich staje się trudniejsze. Kiedy widzę dyspozycję taką jak mov eax, dword [ebp - i] muszęCzy radare2 może drukować zmienne lokalne według nazwy?

  1. Spójrz na górze demontażu aby znaleźć linię var int i @ ebp-0xc
  2. Rodzaj PXW @ EBP-0xC
  3. odczytać wartość i od pierwszego z 16 (!) linii wyjścia
  4. znaleźć moje miejsce ponownie w demontażu po tym jak został przesunięty od ostatniego polecenia

to nie dużo prac, ale kiedy przeglądam wiele zestawów z wieloma zmiennymi, szybko staje się to nudne.

Jako kolejne pytanie, czy możliwe jest wydrukowanie zmiennej/lokalizacji za każdym razem, gdy wykonywanie zatrzymuje się w punkcie przerwania, tak jak w przypadku polecenia "wyświetlania" GDB?

+0

To może zrobić lepiej w wiki inżynierii odwrotnej. – Kupiakos

Odpowiedz

0

Zamiast pxw @ local_4h istnieje afvd ( Analizowanie F maść V ariables d WYŚWIETLACZ), która usuwa wszystkie lub konkretnej zmiennej:

[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 [email protected] 

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

afvd name powraca COMMAND r2 aby wyświetlić zmienną "name". Kropka na początku wykonuje polecenie.
Pamiętaj, że zawsze możesz użyć polecenia ? uzyskać pomoc:

[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 

Właściwie istnieje również możliwość skorzystania z (prawie) taką samą składnię jak w swoim pytaniu. Jednak nazwy zmiennych muszą zostać wcześniej dodane jako flagi i należy to zrobić za każdym razem, gdy wprowadzasz funkcję.

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