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
Reactos当中的Rundll的实现
最新推荐文章于 2023-10-25 19:15:41 发布
本文详细介绍了Reactos中Rundll函数的关键部分——CommandLineToArgv的实现过程,包括参数有效性验证、参数数量计算、内存分配及参数序列填充等步骤。重点解析了如何处理命令行中的空格、引号和连续斜线,以正确分解参数。
摘要由CSDN通过智能技术生成