0
我有这片x86汇编代码:认识86 R/M32指令
mov edx, off_984C400
mov eax, [edx+1E0h]
call eax
的OpenSecurityTraining-画TEACHED我说的是,处理器尝试在该位置something
访问存储器[something]
meants。
这将意味着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'的内存中)。如果你能够调试代码,那么在那里设置一个内存写入断点可能会更容易,以查看地址是如何设置的(如果它不是静态的,那么在调用之前的断点就足以将其全部公开,就像Margaret所建议的那样)。 – Ped7g
'有没有什么办法可以得到函数的静态地址?'不太可能。如果只有一个可能的目标,那么代码可能不会首先使用间接的“调用”。这个例外是针对库函数调用,其中动态链接是通过间接级别来完成的,而不是在典型的操作系统上重写整个可执行文件中的'调用rel32'编码。 –