radare2 получить библиотеку API и имя из адреса


4

Когда я разобрать jmp я получаю:

[0x004073d4]> pd 1 
      0x004073d4  ff2584804000 jmp dword [sym.imp.kernel32.dll_GetModuleHandleA] ; 0x408084 ; "j\x85" 

Есть ли команда, которую я могу получить информацию, содержащуюся в sym.imp.kernel32.dll_GetModuleHandleA путем предоставления адреса 0x408084? Желательно в Json, поскольку я использую это для скрипта.

Я искал немного, но ничего не нашел.

4

sym.imp.kernel32.dll_GetModuleHandleA является flag radare2 определен для этого адреса.

Это имя флага сложена из 4-х частей:

  • sym для символов
  • imp для импорта
  • kernel32.dll это имя библиотеки
  • GetModuleHandleA это имя импортируемого функции в библиотека

К используйте флажки с radare2, вы должны использовать команду f и ее подкоманды. Используйте f?, чтобы перечислить все из них.

В вашем случае, правильный путь, чтобы получить имя флага для данного адреса использовать fd команду:

[0x004073d4]> fd 0x408084 
sym.imp.kernel32.dll_GetModuleHandleA 

Вы можете разделить его функции и имя библиотеки DLL с помощью простой строковые манипуляции с языком программирования, который вы используете для сценария радара.


На личной ноте я скажу, что лучший способ скрипт с radare2 является использование r2pipe, который является очень простой интерфейс для radare2. Возможно, вы уже начали использовать его, но только в том случае, вот как это просто выглядит как с Python:

import r2pipe 

r2 = r2pipe.open("/bin/ls") 
r2.cmd("aa") 
print(r2.cmd("afl")) 
print(r2.cmdj("aflj")) # evaluates JSONs and returns an object 
r2.quit() 

Я предлагаю вам прочитать Radare2 Book, чтобы узнать больше о radare2 и как использовать его.


1
[0x01012d6c]> pd 1 @ 0x1012d89 

| 0x01012d89 ff154c110001 call dword [sym.imp.KERNEL32.dll_GetStartupInfoA]; 0x100114c 

[0x01012d6c]> pxrj 4 @ 0x100114c 

[{"addr":16781644,"value":2011045392,"ref":"reloc.KERNEL32.dll_GetStartupInfoA_16"}] 
[0x01012d6c]>