Memory 模块内部的功能偏移是否始终保持不变?

Memory 模块内部的功能偏移是否始终保持不变?,memory,Memory,我有一个可执行文件(比如notepad.exe)。我正在尝试为此可执行文件创建函数映射。所以当我运行这个可执行文件时,它会被加载到某个地址(模块的基址)。现在,每个函数在模块内部都有一些偏移量。我试图通过模块内部的偏移量(函数代码的起始位置)唯一地标识每个函数。您认为无论我在哪台机器上运行可执行文件,该偏移量都会保持不变吗?自Vista以来,Windows具有一种称为地址空间布局随机化的功能,即将可执行文件的基放在随机的起始地址。目标是阻止某些类型的安全攻击。目前,没有对函数进行内部随机化,但在

我有一个可执行文件(比如notepad.exe)。我正在尝试为此可执行文件创建函数映射。所以当我运行这个可执行文件时,它会被加载到某个地址(模块的基址)。现在,每个函数在模块内部都有一些偏移量。我试图通过模块内部的偏移量(函数代码的起始位置)唯一地标识每个函数。您认为无论我在哪台机器上运行可执行文件,该偏移量都会保持不变吗?

自Vista以来,Windows具有一种称为地址空间布局随机化的功能,即将可执行文件的基放在随机的起始地址。目标是阻止某些类型的安全攻击。目前,没有对函数进行内部随机化,但在新版本的Windows中,没有任何东西可以阻止这种情况发生。

我不清楚是什么加载了什么。请澄清。除此之外,最终目标是什么?@jweyrich:我的意思是这个过程被加载到内存中。我真的不知道是谁装的。最终目标是通过偏移量唯一地标识程序中的每个函数。我知道ASLR,但我认为它只用于加载的dll,不用于可执行文件。此外,我观察到我的可执行文件的基础是相同的,即使我在不同的机器上运行它。那么,根据你的说法,偏移量应该保持不变,对吗?@Bruce:对,偏移量应该保持不变。Microsoft使用工具优化可执行文件中基本块的布局();这与函数重新排序/随机化基本上是不一致的,因此我认为现在函数偏移量是不变的,这是一个安全的假设。