在远程内核调试中部分丢失了 DLL

问题描述

我正在使用 IDA + WinDBG 插件进行一些远程内核调试,我想在 DLL 内的某个函数中设置断点,这是我在 IDA 中反汇编它时发现的。我切换到加载目标 DLL 的进程,但不幸的是我发现内存中的 DLL 部分丢失,包括我的函数

证明示例如下。此处 IDA 识别出函数 sub_180001FC8,但在 WinDBG 中,此反汇编在地址 0x7fff3d131fff 处中断。

Screenshot 1 - DLL 在实时内核调试中加载到内存中

Screenshot 2 - 在 IDA 中“静态”打开相同的 DLL

出了什么问题以及如何恢复丢失的零件?

解决方法

我终于找到了答案。 反汇编以EventLogReader中断的区域被调出内存区域。
要“恢复”页面,我使用了以下命令:

??

对于我的情况:

.pagein /f /p <process_address> <page_start_address>

此命令从辅助存储加载内存页面,它们在反汇编中可见。

参考文献:
https://en.wikipedia.org/wiki/Memory_paging
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/-pagein--page-in-memory-