Windows 为什么加载到内存中的DLL不';是否与原始DLL文件不完全对应?

Windows 为什么加载到内存中的DLL不';是否与原始DLL文件不完全对应?,windows,debugging,reverse-engineering,windbg,ida,Windows,Debugging,Reverse Engineering,Windbg,Ida,如果我哪里错了,请纠正我 我想做什么: 我想在通过WinDBG进行远程内核调试期间,在Windows服务加载的某个DLL中找到某个函数。(使用Windows 10 x64的IDA+VirtualKD+VMWare虚拟机中的WinDBG插件)。 我需要在内核模式下运行,因为我需要切换进程并查看所有内存 我所做的: 我在IDA中找到了函数的偏移量(不幸的是,DLL没有调试符号) 以内核模式连接到VM 通过迭代svchost进程(!进程0 0 svchost.exe)并查看其PEB中的命令行字段(C:

如果我哪里错了,请纠正我

我想做什么: 我想在通过WinDBG进行远程内核调试期间,在Windows服务加载的某个DLL中找到某个函数。(使用Windows 10 x64的IDA+VirtualKD+VMWare虚拟机中的WinDBG插件)。 我需要在内核模式下运行,因为我需要切换进程并查看所有内存

我所做的:

  • 我在IDA中找到了函数的偏移量(不幸的是,DLL没有调试符号)
  • 以内核模式连接到VM
  • 通过迭代svchost进程(
    !进程0 0 svchost.exe
    )并查看其PEB中的命令行字段(
    C:\Windows\system32\svchost.exe-k…
    ),找到了服务的进程
  • 切换到进程(
    .process/i;g
    ),刷新模块列表(
    .reload
  • 在用户模块列表中找到目标DLL并获取其基址
  • 问题: 加载到内存中的DLL与原始DLL文件不完全对应,因此我在那里找不到函数。 当我跳转到像
    +
    这样的地址时,那里和周围什么都没有。但是我发现其他一些函数使用这个方法,所以它看起来是正确的。 然后,我试图根据原始DLL文件查找属于该函数的字节序列,但也没有得到任何结果。 该函数使用我在数据部分中找到的字符串,但没有外部参照。 看起来这个功能已经完全消失了

    我做错了什么


    另外,我将内存从
    转储到
    ,并将其与原始文件进行比较。除了不同的跳转地址和偏移量之外,有时汇编代码完全丢失了…

    似乎内存页被调出了
    .pagein
    命令完成了这项任务

    看起来,一些内存页被调出(移动到辅助存储器)。此命令从辅助存储器加载页面,并显示在反汇编中:

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

    有关更多信息,请参阅:

    数据从哪个地址开始丢失?如果它是一个页面偏移量,可能它当前已被调出。它将显示为
    @thomas weller,谢谢!内存页似乎被调出了。佩金指挥部成功了