Почему один и тот же сценарий декомпиляции IDApython дает разные результаты между командной строкой и интерфейсом IDA? - PullRequest
0 голосов
/ 20 апреля 2019

Я использую idaapi.decompile() в своем скрипте IDApython для получения псевдокода текущей функции.И это сработало в команде сценариев IDA Pro.

А вот мой код:

def get_pseudocode(ea):
    """
    get function's pseudocode
    Args:
        ea: functions's start address
    Returns:
        pse_str: pseudocode
    """
    print("ea: ", ea)
    f = idaapi.get_func(ea)
    print("f: ", f)
    print("f bb_num: ", len(list(idaapi.FlowChart(f))))
    if f is None:
        print("Function is None!")
        return False

    cfunc = idaapi.decompile(f)
    if cfunc is None:
        print("Failed to decompile!")
        return False

    pse_str_list = []

    pse_code = cfunc.get_pseudocode()
    for each_line in pse_code:
        line = idaapi.tag_remove(each_line.line)
        pse_str_list.append(line)

    pse_str = "\n".join(pse_str_list)

    return pse_str

Однако, когда я пытался запустить скрипт из командной строки:

D://ProgramFiles/IDA/ida64.exe -LD:/mylog.log -c -A -SD://funcpesudo/getPseudocode.py D://transfer/m64-O0/aes-x86_64.o

Я получил эту ошибку:

('ea: ', 0L)
('f: ', <ida_funcs.func_t; proxy of <Swig Object of type 'func_t *' at 0x000000E74712E2A0> >)
('f bb_num: ', 3)
Hex-Rays Decompiler got called from Python without being loaded -> OK
D://funcpesudo/getPseudocode.py: Decompilation failed: 
Traceback (most recent call last):
  File "D:\ProgramFiles\IDA\python\ida_idaapi.py", line 553, in IDAPython_ExecScript
    execfile(script, g)
  File "D://funcpesudo/getPseudocode.py", line 120, in <module>
    main()
  File "D://funcpesudo/getPseudocode.py", line 115, in main
    analysis()
  File "D://funcpesudo/getPseudocode.py", line 71, in analysis
    pse_code = get_pseudocode(func)  # 伪代码
  File "D://funcpesudo/getPseudocode.py", line 36, in get_pseudocode
    cfunc = idaapi.decompile(f)
  File "D:\ProgramFiles\IDA\python\ida_hexrays.py", line 8852, in decompile
    raise DecompilationFailure(hf)
DecompilationFailure: Decompilation failed: 

Итак, я думаю, что объект функции f в функции get_pseudocode является правильным, и я просто не знаю, почему возникает эта ошибка.

Кто-нибудь может мне помочь?Большое спасибо. Английский не мой родной язык;прошу прощения за ошибки при печати. ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...