【问题标题】:How to find addresses that a program used?如何找到程序使用的地址?
【发布时间】:2013-05-10 07:25:35
【问题描述】:

我想查找 exe 文件使用的内存地址。我有 exe 文件,我想要一个它使用的地址列表。

这必须静态完成并且不运行可执行文件本身。 有人可以帮帮我吗?

另外,如果你知道动态的方法,请告诉我。

【问题讨论】:

  • 这通常不会起作用 - 它可能会做一些任意奇怪的事情,然后将其用作地址(例如计算哈希的原像),或者它可能会或可能会做一些事情不要停止,然后使用一些随机地址。请参阅停机问题。
  • 我只是想找出程序使用哪些地址,然后在其他地方使用这些地址。这是我教授的项目。

标签: assembly static-analysis dynamic-analysis


【解决方案1】:

您必须查看 exe 标头。当可执行文件运行时,加载程序必须相对于基地址调整地址列表。这称为重定位表。当您通过 IDA 之类的反汇编程序查看 exe 时,您可以假设一个加载地址,或者 exe 可以指定它。

通常地址是相对的,因此即使您找到了一次地址,也不能保证它总是在同一个地方。如果一个程序是用与位置无关的代码编写或编译的,那么它不依赖于任何绝对地址。

只是为了反汇编,您可以查看 IDA 或类似工具。

【讨论】:

  • 感谢您的回答。您的意思是程序使用的所有地址都在重定位表中?但是如果程序使用绝对地址而不是相对地址怎么办?
  • 重定位表只包含必须重定位的地址。如果一个程序使用绝对地址,我认为没有条目,因为没有必要。虽然有一个指定基地址的条目,但当然如果程序访问其他地址(如设备等),我认为不会在任何地方找到条目。
  • 那么如何找出程序一般使用哪些地址呢?
  • 使用像 IDA 这样的 dissassmebler。和/或查看可执行标头,因为所有相关信息都在那里,但只有操作系统需要知道的信息。其他一切都必须进行逆向工程。
猜你喜欢
  • 2015-09-23
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多