【发布时间】:2017-05-10 04:59:49
【问题描述】:
我有这段 x86 汇编代码:
mov edx, off_984C400
mov eax, [edx+1E0h]
call eax
OpenSecurityTraining-Videos 告诉我,[something] 意味着处理器尝试访问位于 something 位置的内存。
这意味着move 0x984C400 into edx, add 0x1E0 to it and call whatever address there is in memory。
我现在的问题是,我只能通过 IDA 进行静态分析,不知道如何找出[0x984C400 + 0x1E0] 的地址。有什么方法可以获取函数的静态地址吗?
【问题讨论】:
-
标题与正文提出了不同的问题。间接寻址模式有什么不明白的地方? IDA 通常非常适合找到间接目标,如果它没有提出任何建议,那么目标可能取决于程序状态,并且更容易知道它是什么的方法是在调用之前中断。您可以查看对 off_984c400 的所有交叉引用,并希望一些结果对您有所帮助
-
0x1E0是 480... 这与off_984C400有相当大的偏移量,因此对off_984C400的交叉引用可能不会显示正在准备地址的代码(如果它被动态写入内存在0x984C5E0通过其他代码)。如果您能够调试代码,那么在此处放置一个内存写入断点以查看地址是如何设置的可能会更容易(如果它不是静态的,那么调用之前的断点就足以揭示这一切,就像玛格丽特建议的那样)。 -
Is there any way I can get the static address of the function?不太可能。如果只有一个可能的目的地,那么代码可能一开始就不会使用间接的call。例外情况是库函数调用,其中动态链接是通过间接级别完成的,而不是通过在典型操作系统上重写整个可执行文件中的call rel32编码。
标签: assembly reverse-engineering static-analysis ida