gpt4 book ai didi

c# - dll基地址

转载 作者:行者123 更新时间:2023-11-30 22:35:36 25 4
gpt4 key购买 nike

我有一个包含一个 exe 和三个 Dll 的小型测试解决方案,exe 分别调用三个 Dll 一次。我已将 Dll1.dll、Dll2.dll 和 Dll3.dll 的 Build->Advanced->DLL Base Address 设置分别设置为 0x41000000、0x42000000 和 0x43000000。我跑了

ngen install ConsoleApplication1.exe

这已经成功地生成了应用程序和三个 Dll。我真的不想生成 exe,但到目前为止,这是产生任何结果的唯一方法。

在运行时,我使用 VMMap 来监视虚拟地址空间,它显示 ngen 的 Dll 位于一个一致的虚拟内存范围内,但是它们仍然在该范围内跳来跳去,每次都在稍微不同的地址加载我运行它们的时间。 VMMap 显示在我尝试加载图像的地址没有分配任何内容,因此这种跳跃行为不是由地址冲突引起的。

我一直在记录日志:

   Dll1       Dll2       Dll3
0x40140000 0x411D0000 0x42810000
0x40580000 0x41EB0000 0x426B0000
0x40190000 0x41FB0000 0x42380000
0x40F30000 0x41FD0000 0x42050000
0x409B0000 0x41BF0000 0x42910000
0x408E0000 0x41860000 0x42050000
0x40B50000 0x41280000 0x42A80000

请注意,地址的前两位数字在所有运行中对于所有三个 Dll 保持一致。

我的实际问题:这是成功的指标吗?我有点困惑,因为我认为 Dll 将正好位于 0x41000000、0x42000000 和 0x43000000。结果显示他们在那个区域闲逛,但从来没有真正坐在我要求他们坐的地方。我的理解是,您希望将 Dll 准确地加载到您要求的地址,这样它们就不必进行昂贵的 rebase 操作(当您的 Dll 被加载时,这非常非常昂贵) ngen'd)。但是,这不正是正在发生的事情吗?当然,我的 Dll 在某个区域徘徊,但它们并没有完全位于我要求它们所在的位置,所以肯定会在每次运行时执行昂贵的 rebase 操作?这正是我想要避免的。

注意:我对支持/反对 rebase 和 ngen 的争论不感兴趣。我只想知道发生了什么以及如何让它工作。

干杯!

最佳答案

可能是 ASLR(地址空间布局随机化)- 查看来自 http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/bac7e300-f3df-4087-9c4b-847880d625ad 的链接

关于c# - dll基地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7395447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com