Assembly 我如何才能让IDA Pro“使用”;见;外部参照到字符串?

Assembly 我如何才能让IDA Pro“使用”;见;外部参照到字符串?,assembly,ida,Assembly,Ida,目前,我正在IDA Pro中反汇编Mach-O可执行文件。我已经浏览并找到了我感兴趣的字符串,但是当我试图找到它的外部参照时,却找不到。我确信原始代码中引用了字符串,但IDA Pro似乎无法找到它们是如何被引用的 有什么技巧可以让IDA Pro看到外部参照吗?您是否给了它足够的时间来分析整个程序?如果有引用,可能需要一段时间才能在大型程序中找到它 它也可能被IDA找不到其流路径的指令引用。这可能发生在IDA无法猜出表大小的跳转表上。IDA中出现I的原因是您查看需要判断和正确解释的指令,并将它们设

目前,我正在IDA Pro中反汇编Mach-O可执行文件。我已经浏览并找到了我感兴趣的字符串,但是当我试图找到它的外部参照时,却找不到。我确信原始代码中引用了字符串,但IDA Pro似乎无法找到它们是如何被引用的


有什么技巧可以让IDA Pro看到外部参照吗?

您是否给了它足够的时间来分析整个程序?如果有引用,可能需要一段时间才能在大型程序中找到它


它也可能被IDA找不到其流路径的指令引用。这可能发生在IDA无法猜出表大小的跳转表上。IDA中出现
I
的原因是您查看需要判断和正确解释的指令,并将它们设置为适当的类型,以便IDA可以完成大部分工作。

字符串可能属于字符串数组,并且字符串的第一个元素由IDA Pro引用

例如:

str_table dd offset str1 ; ^xrefs: display_message(int idx)
dd offset str2
dd offset 0x1234 (if you press ctrl+o it may resolve to mystr)

mystr db "Hello world"

因此,尝试查找字符串附近的字符串引用,看看它们是否属于表,创建数组等。

idc脚本函数
add_dref()
将是您要查找的函数。

这个问题很老了,但在IDA中看到没有直接交叉引用的字符串是很常见的。如果字符串的地址是在运行时以某种方式计算的,IDA通常不会识别交叉引用。对于PE文件,您经常会在资源部分的字符串中看到这一点。无论如何,如果您在x86上并且可以运行可执行文件,那么在调试器中对字符串设置访问中断可能会很有用,以便调试器在访问字符串时中断。然后,您可以生成一个堆栈跟踪并从那里向后工作。