idaapi.BasicBlock
返回的IDA Pro的idaapi.FlowChart()
对象可以是以下类型(请参见SDK来源中的gdl.hpp
):// flow chart block types
enum fc_block_type_t
{
fcb_normal, // normal block
fcb_indjump, // block ends with indirect jump
fcb_ret, // return block
fcb_cndret, // conditional return block
fcb_noret, // noreturn block
fcb_enoret, // external noreturn block (does not belong to the function)
fcb_extern, // external normal block
fcb_error, // block passes execution past the function end
};
我能够找到除
fcb_cndret
以外的所有类型的示例。 条件返回块
是什么意思?有人可以举个例子吗?
#1 楼
我也不知道,所以我整理了这个小脚本,进行了一些实证分析。import idaapi
import idc
import idautils
for f in Functions():
fc = idaapi.FlowChart(idaapi.get_func(f))
for bb in fc:
if bb.type == 3:
print "%x type: %d" % (bb.startEA, bb.type)
print "Done"
我将其扔到了多个x86和x86_64二进制文件中而没有结果。
所以,可能是这样的:
这种块很少出现
仅在其他体系结构中出现(抱歉,我在这台计算机上没有任何ARM或MIPS进行测试,对不起)
保留枚举字段以供将来使用
我只花了两美分。
更新
我用ARM二进制文件进行了尝试,发现了两个。
显然,这些是其中有条件指令修改PC寄存器的块(请参见屏幕快照)
欢呼