在分析目标文件时,反汇编程序如何保持寄存器的值?

Akh*_*hil -2 debugging assembly gdb reverse-engineering

当我们使用gdb或任何反汇编程序分析目标文件时,会将断点放入其中。它随时显示寄存器的当前状态。可能有许多程序在后台运行。这些程序中的每一个也将使用这些寄存器并可以更改其值。

当其他进程可能不断在改变它时,反汇编程序如何维护我们程序的寄存器值?

Pet*_*des 5

反汇编喜欢objdump -d没有运行该程序并没有寄存器值。他们所拥有的只是机器代码,因此他们可以打印每个指令使用的寄存器,但不能打印指令运行时将持有的值。

任何给定的指令(如dec edx)都可以在程序的生命周期内多次运行,并且具有多个不同的EDX值。因此,显然,您不能只为反汇编列表中的指令静态打印单个寄存器值。


您正在询问调试器,它们实际上会运行程序以及在断点或单步执行时将其停止。

在Linux,MacOS或Windows之类的多任务OS中,该OS提供系统调用以跟踪另一个进程,例如Linux ptrace。这使GDB可以插入断点或单步执行。并且当目标进程停止时,GDB可以ptrace用来读取保存的体系结构状态(寄存器值)。

操作系统由一个OS在一个CPU上运行多个任务,并使用“ 上下文切换 ”来保存旧任务的寄存器状态,并恢复新任务的状态。 每个任务都有其自己的寄存器状态,该寄存器状态在每次实际运行时都会加载到体系结构寄存器中。

这是基本的操作系统内容,如果您想了解更多信息,请获取教科书或google其中一些关键字。