如果我哪里都错了请纠正我..。
我想要做的事情:在通过WinDBG进行远程内核调试时,我想在某个DLL中找到一个特定的函数,这个DLL是由WinDBG服务加载的。(WinDBG插件在IDA + VirtualKD + VMWare VM中使用Windows 10 x64)。我需要内核模式,因为我需要切换进程并查看所有内存。
我所做的:
在IDA中发现了对函数的偏移(不幸的是,DLL没有在内核模式下调试symbols).
!process 0 0 svchost.exe)并查看他们的PEBs (C:\Windows\system32\svchost.exe -k ...).
.process /i <address>; g),刷新模块列表中的DLL,并获得它的基本地址。问题:加载到内存中的DLL与原始DLL文件不完全对应,所以我找不到函数。当我跳到像<dll_base_address> + <function_offset>这样的地址时,那里和周围什么都没有。但是我用这个方法找到了其他一些函数,所以它看起来是正确的。然后,我试图根据原来的DLL文件找到属于函数的字节序列,但也一无所获。函数使用字符串,这是我在data部分找到的,但是没有xrefs。看来这个功能已经完全消失了。
我做错了什么?
P.S.:我还将内存从<dll_start>转储到<dll_end>,并将其与原始文件进行比较。除了不同的跳转地址和偏移量,有时汇编程序代码会被完全忽略.
发布于 2021-05-19 12:39:02
看起来,一些内存页被分页掉了(移到二级存储)。此命令从辅助存储加载页面,并显示在反汇编中:
.pagein /f /p <process_address> <memory_page_address>发布于 2021-05-19 12:35:44
看来内存页被呼出了。.pagein命令起了作用
https://stackoverflow.com/questions/67586771
复制相似问题