代码之家  ›  专栏  ›  技术社区  ›  Lasse V. Karlsen

如果我想重设DLL的基础,我该怎么做?

  •  1
  • Lasse V. Karlsen  · 技术社区  · 16 年前

    this question .

    我想我能做的如下:

    1. LISTDLLS
    2. 将重新映射的DLL地址用作这些DLL的新基址

    然而,这已经变成了 Schrödinger

    例如,假设在初始运行后,我有一个列表,其中显示DLL a、B和C需要位于地址1000、2000和3000。没有提到DLL D、E和F,它们也是同一系统的一部分。大概这些是在它们当前的基址加载的,否则我会假设LISTDLLS会告诉我这一点。

    因此,我更改了A、B、C的地址,重复所有操作,现在DLL C、D和E已被重新定位。A和B现在没事了,E和F现在被重新定位了,C仍在被洗牌。

    由于我们所有DLL的原始基址都是默认的,这意味着每个DLL(可能除了加载的第一个)都被重新定位,从而映射到页面文件,我认为在0以上会有潜在的收益。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Sedat Kapanoglu johnnywhoop    16 年前

    您可以使用DUMPBIN(Visual Studio中提供)找到DLL首选的加载地址和内存范围,并根据这些数字进行规划。

    垃圾箱/标题会给你:

     7DC90000 image base (7DC90000 to 7DD5FFFF)