给定内存中用户驱动程序的初始状态,我们是否可以记录给cpu的指令,将程序重新加载到其初始状态并回放cpu指令并让程序像用户使用时一样运行,那里的用户?
如果这个问题写得不好或令人困惑,我很抱歉.
最有可能的!可以在调试器中逐条指令地单步调试程序。您还必须以某种形式记录指令,尽管程序源或可执行文件可能也同样有效。
有些程序喜欢存储网络日志或操作日志等内容,以便存储程序在某个时间点的状态。数据库还可以存储重要信息,当程序“失败”时也可以查看这些信息。像日志这样简单的东西对于记录程序的输入很有用。
为了单步执行指令,您应该能够使用GDB 中的nexti和stepi命令来逐条执行指令。我们还可以用来disassemble获取与各个 CPU 指令相匹配的汇编指令。LLDB 和 MSVC 的调试器中也应该有类似的东西。
现在,以我的“内存中用户驱动程序的状态”为例:

这是 Windows 蓝屏死机,但我们可以看到 Windows 实际上创建了物理内存转储,并且还使用了内核调试器。
可以假设,物理内存转储可用于及时找出系统当时的问题以及导致操作系统崩溃的原因。
至于记录各个指令,可执行程序本身应该足以记录到底发生了什么,因为程序的执行路径是由它使用的函数和操作明确定义的。除非您使用某种运行时元编程(在运行时编写执行代码),否则应该能够分析事物。而且,即使您确实在运行时编写执行代码,它仍然应该能够从良好的内存转储中提取,也许从沙盒环境内部或通过元程序来提取失败程序的状态。
相关:http ://www.unknownroad.com/rtfm/gdbtut/gdbadvanced.html#STEPI