Reactos当中的Rundll的实现

本文详细介绍了Reactos中Rundll函数的关键部分——CommandLineToArgv的实现过程,包括参数有效性验证、参数数量计算、内存分配及参数序列填充等步骤。重点解析了如何处理命令行中的空格、引号和连续斜线,以正确分解参数。
摘要由CSDN通过智能技术生成
RunDll32.exe是微软系统自带的一个小程序,功能是加载系统中的dll,并且作为程序运行。控制面板里面有很多选项都可以由Rundll.exe进行加载运行。
现在,我们根据reactos当中的源代码对其实现进行分析。


首先看rundll32.exe调用进行调用的函数原型(源文件当中对函数的UNICODE和ASCII进行了区分)。
typedef int (WINAPI *DllWinMainW)(
  HWND hWnd,
  HINSTANCE hInstance,
  LPWSTR lpwCmdLine,
  int nCmdShow
);

整个函数当中的最主要部分是CommandLineToArgv,通过函数名称可以知道这个函数就是对输入的命令行进行分析,并且分解成为相应的参数。

下面对其进行分步分析(完整的代码在我的CSDN资源里面)

第一步很简单,就是验证函数参数的有效性。

第二步,计算命令行当中参数的个数。因为有一个参数可能会被当做参数对DllWinMainW进行调用。所以参数数目可能是三个可能是四个。

// 计算参数的数目
    while (nNames < 4) {
        if (*lpSrc == 0 || (*lpSrc == _T(',') && nNames == 2) || ((*lpSrc == _T(' ') || *lpSrc 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值