2015-02-20 3 views
1

Может кто-нибудь дайте мне знать, как мы собираемся вывести все графики подпрограмм в пакетном режиме, подавая в суд IDC. то есть у меня есть 447 подпрограмм и хочу вывести их все, и я хотел бы убедиться, что сначала получаю все адреса процедур автоматически, потому что, зная адрес, я могу просто использовать GenFuncCall. P.S: Это единственный cfg, который я могу получить от Ida Pro, учитывая двоичный дизассемблированный файл?Ida pro gragh output серийный режим

+1

Я не уверен, о чём ваш вопрос: хотите ли вы создать файл GDL для каждой из ваших подпрограмм, всех XREF между подпрограммами, XREF из/из всех BBL внутри ваших подпрограмм? Не могли бы вы уточнить, каковы ваши намерения? – Neitsa

+0

Да, я могу генерировать файлы .dot (gdl) для моих подпрограмм на основе адреса и/ИЛИ всех них после указания начального/конечного адреса для всех. Но что, если мы не знаем адрес всех подпрограмм? Не удалось найти метод для получения адреса подпрограмм – Amir

ответ

1

Если вы просто хотите, адреса всех известных функций в IDB, вы могли бы использовать что-то вроде этого, используя IDAPython (только в качестве примера):

def main(): 
    for count, func_ea in enumerate(Functions()): 
     if func_ea == BADADDR: 
      break 
     func_name = GetFunctionName(funcea) 
     func_start = func_ea 

     print("[{:4}] name: {}; start address: {:#x}".format(count, func_name, func_start)) 

if __name__ == "__main__": 
    main() 
+0

Да, это хороший старт – Amir

2

Я нуждался в CFG всей моей программы, базы Например, я начал с был: https://code.google.com/p/idapython/source/browse/trunk/examples/ex_gdl_qflow_chart.py

Он использует класс диаграммы потока: https://www.hex-rays.com/products/ida/support/idapython_docs/idaapi.FlowChart-class.html

стоит также отметить, чтобы вызвать в пакетном режиме, вы хотите что-то вроде это

idal64 -A -S {yourscriptname} {.py yourbinary}

Советы:

  • Прототип сценарий в первом выручить IDAPro графического интерфейса
  • Открытие графика процессор может вызвать проблемы с синхронизацией, его взломать, но что-то вроде задержки выполнения сценария, казалось, помогло, например

    idaapi.autoWait() Timer(2, idacfg).start()

    где idacfg ваш питон функция из примера

  • печати на стандартный вывод, кажется, не работает в пакетном режиме, так что вы хотите установить стандартный вывод в файл для вашей отладки ,

  • Закрытие GUI в пакетном режиме по-прежнему является проблемой для меня.

Надеюсь, что это поможет.