首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么加载在内存中的DLL与原始DLL文件不完全对应?

问为什么加载在内存中的DLL与原始DLL文件不完全对应?
EN

Stack Overflow用户
提问于 2021-05-18 13:02:48
回答 2查看 173关注 0票数 1

如果我哪里都错了请纠正我..。

我想要做的事情:在通过WinDBG进行远程内核调试时,我想在某个DLL中找到一个特定的函数,这个DLL是由WinDBG服务加载的。(WinDBG插件在IDA + VirtualKD + VMWare VM中使用Windows 10 x64)。我需要内核模式,因为我需要切换进程并查看所有内存。

我所做的:

在IDA中发现了对函数的偏移(不幸的是,DLL没有在内核模式下调试symbols).

  • Connected到VM,

  • 通过遍历svchost- process (!process 0 0 svchost.exe)并查看他们的PEBs (C:\Windows\system32\svchost.exe -k ...).

  • Switched中的CommandLine字段到进程(.process /i <address>; g),刷新模块列表中的DLL,并获得它的基本地址。

问题:加载到内存中的DLL与原始DLL文件不完全对应,所以我找不到函数。当我跳到像<dll_base_address> + <function_offset>这样的地址时,那里和周围什么都没有。但是我用这个方法找到了其他一些函数,所以它看起来是正确的。然后,我试图根据原来的DLL文件找到属于函数的字节序列,但也一无所获。函数使用字符串,这是我在data部分找到的,但是没有xrefs。看来这个功能已经完全消失了。

我做错了什么?

P.S.:我还将内存从<dll_start>转储到<dll_end>,并将其与原始文件进行比较。除了不同的跳转地址和偏移量,有时汇编程序代码会被完全忽略.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-19 12:39:02

看起来,一些内存页被分页掉了(移到二级存储)。此命令从辅助存储加载页面,并显示在反汇编中:

代码语言:javascript
复制
.pagein /f /p <process_address> <memory_page_address>

更多信息见:The DLL is partly missed in remote kernel debugging

票数 0
EN

Stack Overflow用户

发布于 2021-05-19 12:35:44

看来内存页被呼出了。.pagein命令起了作用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67586771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档