Jim*_*eth 12 delphi dll executable
在Delphi中,Image Base链接器选项默认为00400000.
根据帮助:
指定已编译映像的首选加载地址.通常仅在编译DLL时更改此值.默认= 400000
在EXE上更改它没有效果吗?效果会是什么?地址是相对于每个进程的吗?
Bar*_*lly 28
可执行映像(EXE和DLL,以及其他伪装的DLL,如BPL和OCX)由OS加载程序在其首选加载地址(Image Base)加载(如果可能); 如果虚拟地址空间的该区域被保留用于某些其他目的(另一个图像,线程堆栈,堆分配),则OS加载器将重新定位图像.重新定位图像涉及将其放在地址空间中的其他位置,然后将新加载地址与首选加载地址之间的差异,并将此差异添加到图像内的每个重定位修复.重定位修正指向可执行映像中代码或数据引用自身的所有位置,例如代码从全局变量加载值,或绝对跳转到其他例程.
因为重定位涉及操作系统修改图像数据的内存中版本,所以需要更长的时间,它需要更多的I/O并提交更多页面(需要重新分配整个映像的重定位),以及操作系统虚拟内存子系统将无法与已加载相同可执行映像的其他进程共享加载的映像(因为它将在内存中不同).因此,希望在装载时避免重新定位.
可执行映像的首选地址$00400000按照惯例在32位Windows上运行,而其他DLL(包括OS DLL)依赖于此约定,因为没有可能与主可执行文件重合的默认加载地址.因此他们避免搬迁.事实上,重新定位EXE图像的频率很低,因此重定位数据通常可以从EXE图像中剥离而不会造成伤害.
更改DLL是有意义的,以避免与任何默认的操作系统DLL和通常随DLL/EXE一起提供的任何其他DLL冲突.由于为EXE更改它会增加操作系统重新定位DLL的可能性,因此不建议更改EXE加载地址.
像UPX这样的可执行映像压缩程序不建议特别用于DLL,也不建议运行许多实例的可执行文件,因为内存中的解压缩就像重定位一样,可以防止内存映像在多个进程之间共享.
| 归档时间: |
|
| 查看次数: |
2983 次 |
| 最近记录: |