dll的基址与对应的lib文件

╰半夏微凉° 2022-01-11 05:25 419阅读 0赞

c++中 dll文件的静态调用 会使用与其对应的 lib库文件与.h头文件,lib库的生成目录可以自己指定如下图,一个vs2010 创建的dll项目的链接器页面,有几项属性值的了解。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9zdHVkeS1saWZlLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70

生成对应lib文件的设置:在 导入库 这项输入lib文件生成的目录。

基址:可以手动指定加载dll后,dll所占内存的地址(但是这个都是会变得),比如像上面这个dll项目,我指定了基地址

0x11000000 然后为了验证,把生成的dll使用 IDA打开:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9zdHVkeS1saWZlLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70 1

显示的基地址目前确实是按照设置的基地址来的(PE头占1000字节)。

下面使用OD 启用辅助程序加载dll:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9zdHVkeS1saWZlLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70 2

从上图可以看到,dll的基址为0x10DC000 基地址因程序的加载改变了,dll的基址动态变化了。

在一个程序运行过程中,程序本身会基于内存中某个地址为基址,来存放整个程序,如果指定的基址被占用或者其它原因,会使机制发生相应改变,不再是编译时指定的基址。

发表评论

表情:
评论列表 (有 0 条评论,419人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LIBDLL区别使用

    共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link lib

    相关 修改lib对应dll名称

    修改lib库对应的dll名称      在某些场景下,我们需要修改lib库对应的dll名称,如果直接使用notepad++等工具打开lib文件,修改其中的dll名称