Wine中PE格式文件的加载(四):DLL的装入和连接

在加载完PE可执行文件后,回到kernel32的入口函数__wine_kernel_init中,接下来调用了函数LdrInitializeThunk。dll的装入和连接过程主要是该函数实现的。

函数部分代码如下图所示:

 

先用main_exe_file判断主模块是否已经被建立了,这是在wine_process_init函数中被赋值的一个句柄类型。

get_moderf的作用正如注释所说,是为可执行文件分配一个模块的引用结构。

在Wine装入和连接dll的时候,每个用到的dll以及exe,都对应于一个“模块的引用结构”,WINE_MODREF类型,并且装载过程中也将单个dll或exe视作一个模块。结构如下图所示:

其中LDR_MODULE类型来源于Windows。由于每个dll中都描述了其直接依赖的一组dll,所以需要用一个指针数组deps来记录。而nDeps顾名思义就是直接依赖的dll个数。

所以在装入和连接过程中,应该是有这样一颗树

然后就是对PEB信息进行填充。

该函数中直接负责dll装载和连接的,只有fixup_imports。函数代码如下图所示:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值