gpt4 book ai didi

c++ - 如果加载到应用程序,DLL 中的函数地址是否可以更改?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:10 27 4
gpt4 key购买 nike

我反汇编了一个 DLL 并看到了一些函数。我找到了我需要的函数,它的地址是 0x10001340

如果我将这个 dll 加载到我的应用程序中,这个地址会保持不变吗?那么我可以通过我的应用程序的地址调用该函数吗?

我问是因为我不确定:如果加载此 dll 时,主应用程序中的某些函数已经具有相同的地址怎么办?因此,也许 dll 中的函数可以在加载等时更改地址。

最佳答案

在 Windows 上,dll 有一个优先加载地址,但如果加载程序注意到虚拟地址空间的这一部分已被使用,则加载程序能够更改所有这些引用。这个过程称为“ rebase ”。

“默认”基地址是在链接时指定的(/BASE 与 Microsoft 链接器),如果您计划使用dll与另一个具有相同基地址的dll一起;这加快了加载过程,因为加载程序不必在每次加载时都对其中一个 dll 进行 rebase 。 (IIRC 也有一些工具可以对现有的 dll 进行 rebase 并将结果保存在磁盘上)

请记住,从 Windows Vista 开始,使用指定标志编译的 dll 总是加载到随机基地址以避免某种攻击。

关于c++ - 如果加载到应用程序,DLL 中的函数地址是否可以更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10970472/

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