Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
强制在特定地址加载模块(DLL) 在WinDbg中加载并运行可执行文件 它在特定地址加载所需的模块 在此会话中设置的断点/检索的跟踪取决于这些地址 当为同一可执行文件启动另一个会话时(取决于代码执行路径更改dll依赖顺序,或某些不确定的加载程序行为),模块现在加载到不同的地址_Windbg - Fatal编程技术网

强制在特定地址加载模块(DLL) 在WinDbg中加载并运行可执行文件 它在特定地址加载所需的模块 在此会话中设置的断点/检索的跟踪取决于这些地址 当为同一可执行文件启动另一个会话时(取决于代码执行路径更改dll依赖顺序,或某些不确定的加载程序行为),模块现在加载到不同的地址

强制在特定地址加载模块(DLL) 在WinDbg中加载并运行可执行文件 它在特定地址加载所需的模块 在此会话中设置的断点/检索的跟踪取决于这些地址 当为同一可执行文件启动另一个会话时(取决于代码执行路径更改dll依赖顺序,或某些不确定的加载程序行为),模块现在加载到不同的地址,windbg,Windbg,如果有一种方法可以指示windbg/loader在给定地址加载尚未加载的模块,这将非常有用。这将使某些脚本/文本比较更容易 是的,我确实意识到,例如,相对于符号名设置断点应该是首选的,而不是使用固定的addrese,但是能够“重现”参考调试环境肯定有一定的优势 假设我们处理的是第三方DLL(我无法使用预定义的加载地址重新编译),有没有办法做到这一点 我很高兴看到.reload命令有一个address参数,看起来它完全可以满足我的要求。但是,即使该命令将加载模块,当程序继续运行(需要实际加载dll

如果有一种方法可以指示windbg/loader在给定地址加载尚未加载的模块,这将非常有用。这将使某些脚本/文本比较更容易

是的,我确实意识到,例如,相对于符号名设置断点应该是首选的,而不是使用固定的addrese,但是能够“重现”参考调试环境肯定有一定的优势

假设我们处理的是第三方DLL(我无法使用预定义的加载地址重新编译),有没有办法做到这一点

我很高兴看到
.reload
命令有一个address参数,看起来它完全可以满足我的要求。但是,即使该命令将加载模块,当程序继续运行(需要实际加载dll)时,它仍会继续加载同一模块的另一个副本(?),并发出如下警告:

WARNING: moduleX_1be0000 overlaps moduleX

所以它并没有像我预期的那样工作,所以这个问题

WinDbg不加载模块(DLL)。模块由可执行文件加载

WinDbg的
ld
.reload
命令不加载模块,而是加载符号信息(PDB文件)

更改模块地址的过程称为重定基址。如果基址不再可用(例如,堆已经在使用中),就会发生这种情况。在这种情况下,您根本无法阻止重定基址

一件可能有帮助的事情是禁用ASLR(地址空间布局随机化)。您可以在DLL或EXE中更改该设置。它是COFF标题的一部分:

在Windows7上,有很多方法,但不建议仅为了帮助您调试单个进程而对每个系统更改该设置

另一个选项是使用Windows SDK的
rebase.exe
,并将基址更改为您认为在加载DLL时更可能空闲的虚拟地址。我自己从来没有这样做过,但是
重设基础
帮助说:

如果您想重新设置到固定地址(ala QFE) 使用files.txt包含的@@files.txt格式 除文件名外的地址/大小组合


因此,您可以定义自己的地址。

检查选项,是的,我也意识到了
的主要目的。重新加载
与符号有关,但官方的帮助页面明确指出:
在某些情况下,此命令也会重新加载或卸载模块本身
。如果不是这样的话,existion address参数就没有多大意义了。至于ASLR,我确实在SO RE中看到了一篇标题与我类似的文章,这篇文章反过来又将我指向了你链接的那篇文章。我只是在尝试系统范围内的设置(通过EMET),结果它彻底搞乱了系统。调试器目标不起作用,在我的例子中,它还导致其他应用程序出现问题。我还研究了重定基期的选择。页面上说MS的
rebase
(不以基址为参数,并根据文件名/散列设置,所以它不能保证基址不冲突,你知道情况是否仍然如此吗?@OzgurH:在Windows>7中使用ASLR可能会导致问题。事实上,有些人说Win8.1中已经存在问题:我已经更新了关于固定基址的答案。看起来相当复杂。老实说,我希望有更多的虚拟/动态/非侵入式解决方案。然而,如果在接下来的几天里没有其他答案出现,我将尝试rebase和PE编辑建议,看看它们是否达到了我的目标。。。。。。。。(感谢您的快速回复/编辑我的评论!-rebase可能终究会起作用(假设ASLR不总是赢!?)(顺便说一句,您注意到我对您5年多前的问题的回答了吗(#20515857)?:)