Wine中PE格式文件的加载(一):Wine初始化过程

首先了解下Wine初始化过程。

我们执行”wine WeChat.exe”命令,发生的过程是怎么样的?接下来从wine源码一步步分析函数调用过程。

在loader/目录下的源码编译,由main.c生成了“wine”Linux可执行文件;preloader.c生成了“pre-loader”Linux可执行文件。

假设在终端通过命令“wine  WeChat.exe”启动微信;该过程涉及preloader,但是最终会执行到“wine”中的main函数。所以这里从wine的main函数调用wine_init开始分析。

wine_init函数如下图所示:

主要做了以下三件事:

1.     调用了mmap_init()函数,这个函数与预留地址空间相关。

2.     通过wine_dlopen()装入由Wine提供的动态连接库ntdll.dll。由于Wine特殊的系统结构,它不能使用微软的ntdll.dll,而只能使用Wine自己的DLL,这样的DLL称为“内置(built-in)”DLL。

3.     执行内置ntdll.dll中的函数__wine_process_init()。先通过wine_dlsym()取得这个函数的入口地址,然后通过指针init_func进行调用。之所以要以这样的方式调用,是因为这个函数在ntdll.dll中,而wine_dlopen()只是装入了这个DLL、却并未完成与此模块的动态链接。

 <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值