【问题标题】:How to know the origin of a ret opcode while tracing a program如何在跟踪程序时知道 ret 操作码的来源
【发布时间】:2016-05-01 18:23:21
【问题描述】:

我正在制作一个有点像 strace 的小程序,除了我让它捕获所有调用和 rets。 由于间接调用,我无法找到获取所有调用和 ret 的方法,我想找到一种方法来获取 ret 操作码源自的函数。你们有什么想法吗?

【问题讨论】:

  • 这是什么指令集?

标签: assembly trace low-level ptrace


【解决方案1】:

您可以模拟ret 的作用:它查看地址%esp 的堆栈,并将EIP 设置为该值。当前堆栈地址之前的指令将是这里的call

【讨论】:

  • 好的,但是由于上一条指令的大小不固定,是不是很难回到这条指令的开头?
  • 是的,这是所有可变大小操作码架构的一般限制——你不能倒退。但是你确实知道调用函数。我不确定你为什么要首先获得call,但这样做的方法是从你知道的任何有效点反汇编整个函数,停在ret 读取的地址处.
猜你喜欢
  • 1970-01-01
  • 2012-12-23
  • 2017-03-02
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多