2016-12-29 11 views
6

Когда radare2 анализирует функцию, он дает имена локальных переменных, такие как local_4h для ebp - 0x4. Он также дает возможность придать этим переменным более значимые имена, когда их цель станет понятной. Однако после переименования переменных их печатать становится сложнее. Когда я вижу команду, такую ​​как mov eax, dword [ebp - i] я долженМожет ли radare2 печатать локальные переменные по имени?

  1. Посмотрите на верхнюю части разборки найти линии var int i @ ebp-0xc
  2. Тип PXW @ EBP-0xc
  3. Считать значение I от первого 16 (!) строк вывода
  4. найти свое место снова в разборках после того, как был перенесен из последней команды

это не много, но когда я просматриваю много сборок со многими переменными, он становится утомительным довольно быстро.

В качестве последующего вопроса можно ли печатать переменную/местоположение каждый раз, когда выполнение останавливается в точке останова, например, с помощью команды «отображения» GDB?

+0

Это может сделать лучше в обратном инженерном wiki. – Kupiakos

ответ

0

Вместо pxw @ local_4h, есть afvd ( nalyze е соборование v ariables г жаемое), в котором перечислены каждый или конкретной переменной:

[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 возвращает команду r2 для отображения переменной «name». Точка в начале выполняет команду.
Помните, что вы всегда можете использовать команду ?, чтобы получить помощь:

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

 Смежные вопросы

  • Нет связанных вопросов^_^