【问题标题】:Single step a process by one assembly instruction通过一个汇编指令单步执行一个过程
【发布时间】:2011-09-28 01:47:50
【问题描述】:

当您使用 ptrace 执行单步操作时,该过程是执行一“行”代码还是执行一行汇编。如果是前一种情况,有没有办法只通过一条处理器指令在 linux 中步进一个进程?

我的意思是在内核中执行此操作,但 GDB 源代码有点大,很难准确跟踪它在执行 ASM 单步操作时所做的工作。我想单步执行一个过程,只是我不确定 ptrace 单步的确切行为是什么(只有 1 条指令或更多?)

【问题讨论】:

    标签: linux assembly linux-kernel x86 ptrace


    【解决方案1】:

    它只做一行组装。您可以通过打开两个会话来验证这一点,在一个会话中,您可以运行您的程序,该程序显示 IP 寄存器的内容(32 位 EIP 和 64 位 RIP),在另一个会话中使用以下命令运行 objdump - objdump -d - j.code |减少并验证

    【讨论】:

      【解决方案2】:

      使用 gdb:http://condor.depaul.edu/glancast/373class/docs/gdb.html#Running_the_Program_being_Debugged

      如果您有权访问源代码或调试符号,则可以一次执行一行。如果你不这样做,你将不得不一次执行一个指令。

      【讨论】:

      • 由于某种原因我的编辑没有坚持我的意思是在 linux 内核中执行此操作,我不确定 ptrace_request(SINGLESTEP...) 是否会完全符合我的要求。
      • 你是说你打算单步内核?或者你想让内核单步执行一个进程?
      • 在我已经知道的一个进程中,您可以使用 KGDB 模块单步执行内核。
      猜你喜欢
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 2017-03-19
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      相关资源
      最近更新 更多