点击
x
或Ctrl-x
键以交叉引用此函数被调用时,它仅在IDA识别的位置被“调用”,如下所示:这里的问题是,上面显示的结构/技术是什么?它直接与我遇到的“典型”设置形成对比,后者只是进入.idata,交叉引用一个函数,并向我展示直接在代码中调用的区域。也没有直接引用这些跳转所驻留的内存地址,例如14658844h。情况下,此实例出现在控制流程图上,并且在红色箭头上方可以看到“孤立的” jmp,这很明显:
就是图2中所示跳转所在的内存地址(函数ptrs)以某种方式在代码中使用一些偏移量间接引用,以帮助掩盖这些API函数的用法。这是编译器功能还是手册?
#1 楼
这些是由编译器或/和链接器为了定位外部函数引起的间接跳转。根据函数的定义方式,链接器和编译器都可能最终会发出存根。 ,因此使分析过程中的调用栈变得异常疯狂。
评论
Igor在Stack Overflow上回答了几乎相同的问题,所以我只能为您指出他的答案,然后让他自己在这里回答! stackoverflow.com/a/22688670@IanCook很棒,谢谢。您是否有任何技巧或最佳实践来跟踪代码中的这些调用?另外,是否有一个专门的研究领域涵盖此问题?例如,诸如x86汇编文本中的内容还是完全针对编译器的内容?
这是特定于msvc(和vb6?)的。原因是它节省了重定位的次数,因为可以使用相对调用(E8xxxxxxxx)指令来完成对这些api的调用。