我正在分解一个似乎使用switch语句的函数,从而在两个不同的地方(相同的函数!)导致了索引间接跳转:跳转表有5个条目,第二个是4。不幸的是,编译器将它们直接放在内存的后面。在计算这些节点的图形连接时,这似乎使IDA感到困惑:


>图节点显示9个传出连接。其中5个是真正的连接,接下来的4个不是真正的连接-它们属于一个不同的跳转表,该跳转表恰好在此地址之后。我想告诉IDA“此跳转表有5个有效条目,在创建图节点时忽略其他条目”。

最初的问题是:


第一个跳转表有9个连接,其中4个不属于< br那个声明。 (为简洁起见,此处省略了第二个连接,只有一个连接)。有什么方法可以告诉IDA从第一个表中删除多余的
连接,并可能从第二个表中创建到相应目标的新连接
? >我已经尝试过将跳转表定义为数组,然后取消定义函数并将其重新定义为代码,但这并没有什么改变。

(我正在使用IDA 5.0,因为一个业余项目,我不想花几百美元买一年要用几次的东西。

#1 楼

可能,但不是免费版本:


将光标放在jmp

编辑->其他->指定开关习惯...


评论


不是我想听到的,但我可能会得到最好的答案。

–贡特拉姆·布洛姆(Guntram Blohm)
14年4月16日在12:09

#2 楼

我不确定我是否理解您的问题,但是如何配置跳转表是:将整个表转换为db字节(非数组),每行一个字节。
将顶部元素设置为2个字节(dw),然后设置为O。
从顶部元素向下突出显示最后一个元素,并配置为数组(*),但未选中“数组”复选框。
如果在第一个表之后紧接着有第二个表,请执行相同的操作。

编辑:
我有点罗word。我认为您需要的是将每行的跳转分开,然后使用数组命令{*}进行操作,然后取消选中所有复选框。我对图形视图的经验是,无论如何配置它们,它都不知道如何处理跳转表。

评论


抱歉,我想我的问题会引起误解(“从第一个表中删除多余的连接”)。我的问题是,图节点有9个传出连接,其中应该只有5个,因此某些链接是错误的,并且图比应有的更为复杂。我想以某种方式告诉IDA“这个跳转表有5个条目,即使它看起来是9个,因为最后4个条目属于另一个跳转表”。不幸的是,“无论如何配置跳转表,都不知道如何处理跳转表”,这可能是不可能的。

–贡特拉姆·布洛姆(Guntram Blohm)
2014年4月15日在17:42

也许我错了,但是我认为图表视图被跳转表打断了,所以我从不追求它。似乎您必须告诉IDA,跳转表的一部分在一个函数(proc)中,而另一个在另一个函数中。

– Paddywhacker
2014年4月15日在20:29