IDA Pro:独立于平台的检查指令是否为跳转的方法

逆向工程 艾达 拆卸 蟒蛇
2021-06-18 03:50:10

我正在寻找一种方法来判断一条指令是否为跳转指令。当然,我想避免检查所有可能的 CPU 架构的所有可能的跳转助记符。

我想可以检查所属的外部参照类型。然而,可能有几种不同的类型:Code_Near_Jump Code_Far_Jump而且Data_Read(对于间接跳转)。这种方法看起来很复杂,对我来说不是很可靠。

有关call说明,有idaapi.is_call_insn(addr). 跳跃有没有类似的东西?

1个回答

有关想法,查看https://github.com/trailofbits/mcsema/blob/master/tools/mcsema_disass/ida/get_cfg.py

以下是如何获取入口点操作码的助记符的示例:

import idaapi
import idautils

ea = idaapi.get_screen_ea()  // Gets the entrypoint VA
idautils.DecodeInstruction(ea).get_canon_mnem() // e.g. push or jne

我最近使用了该技术,检查了示例是否有效。基本上,如果您可以获得指令的 VA,那么您可以在 idautils 中使用 DecodeInstruction 或 DecodePreviousInstruction。

然后你可以使用比特轨迹使用的常量,例如

COND_BRANCHES = [\
idaapi.NN_ja,\
idaapi.NN_jae,\
idaapi.NN_jb,
....

功能文档在这里 - https://www.hex-rays.com/products/ida/support/idapython_docs/