Windows rundll32.exe的实际用途是什么?

Windows rundll32.exe的实际用途是什么?,windows,dll,rundll32,Windows,Dll,Rundll32,我正在搜索为什么rundll32.exe进程在我的系统上运行,这时我发现它充当了以application/exe形式运行dll的容器。我无法理解我希望dll作为应用程序运行的原因/用例。库不只是为了提供功能支持而不是作为单个应用程序运行吗?rundll32不是为了一般意义上的“运行DLL”(实际上没有任何意义,DLL没有一个入口点,“经典”DLL没有足够的元信息来正确调用任何导出的符号) 相反,它允许使用符合一些定义良好的规范的DLL作为具有多个入口点的可执行文件;我认为这个想法要么是允许将多个

我正在搜索为什么rundll32.exe进程在我的系统上运行,这时我发现它充当了以application/exe形式运行dll的容器。我无法理解我希望dll作为应用程序运行的原因/用例。库不只是为了提供功能支持而不是作为单个应用程序运行吗?

rundll32不是为了一般意义上的“运行DLL”(实际上没有任何意义,DLL没有一个入口点,“经典”DLL没有足够的元信息来正确调用任何导出的符号)

相反,它允许使用符合一些定义良好的规范的DLL作为具有多个入口点的可执行文件;我认为这个想法要么是允许将多个小型实用程序与共享代码合并成一个二进制文件,要么是为主要供其他应用程序使用的库提供额外的“测试”入口点(手动调用)

rundll所做的实质是在内存中加载dll并调用指定的函数,期望它必须具有与exe入口点相同的签名


更多信息可用。

rundll32并不意味着一般意义上的“运行DLL”(实际上没有意义,DLL没有单个入口点,“经典”DLL没有足够的元信息来正确调用任何导出的符号)

相反,它允许使用符合一些定义良好的规范的DLL作为具有多个入口点的可执行文件;我认为这个想法要么是允许将多个小型实用程序与共享代码合并成一个二进制文件,要么是为主要供其他应用程序使用的库提供额外的“测试”入口点(手动调用)

rundll所做的实质是在内存中加载dll并调用指定的函数,期望它必须具有与exe入口点相同的签名


更多信息可用。

此EXE可以加载任何DLL并获取指定函数的地址,然后调用它。这避免了只为调用特定DLL上的函数而编写EXE的需要(前提是加载DLL后可以直接调用该函数)

加载DLL意味着从EXE调用
LoadLibrary
,试图在当前进程(RunDLL32.EXE)中初始化DLL。在内存中加载DLL意味着调用给定DLL的
DllMain
,这是由加载程序(OS)完成的。如果所有操作都成功,则进程将获得已加载DLL的句柄

成功获取DLL句柄后,它将使用
GetProceAddress
获取函数的地址,并通过函数的地址调用函数

例如(在命令提示下):

将加载
user32.dll
,然后调用
lockstation
,这将最终锁定工作站


我不确定RunDLL32如何找到原型、所需参数、返回类型和调用约定。

此EXE可以加载任何DLL并获取指定函数的地址,然后调用它。这避免了只为调用特定DLL上的函数而编写EXE的需要(前提是加载DLL后可以直接调用该函数)

加载DLL意味着从EXE调用
LoadLibrary
,试图在当前进程(RunDLL32.EXE)中初始化DLL。在内存中加载DLL意味着调用给定DLL的
DllMain
,这是由加载程序(OS)完成的。如果所有操作都成功,则进程将获得已加载DLL的句柄

成功获取DLL句柄后,它将使用
GetProceAddress
获取函数的地址,并通过函数的地址调用函数

例如(在命令提示下):

将加载
user32.dll
,然后调用
lockstation
,这将最终锁定工作站


我不确定RunDLL32如何找到原型、所需参数、返回类型和调用约定。

它是Microsoft代码的小程序,不是您的。它避免了令人不快的选择,要么是大量健壮的EXE,要么是必须从DLL导出实现细节。如果你想避免在你的代码中出现同样的不愉快,那没关系,它有一个很好的文档界面。它是一个用于Microsoft代码的小程序,而不是你的。它避免了令人不快的选择,要么是大量健壮的EXE,要么是必须从DLL导出实现细节。如果您想避免代码中出现同样的不愉快,那么这很好,它有一个文档化的界面。只需快速澄清一下,*.dll和*.exe类型的文件中都有
DllMain
函数吗?
DllMain
函数是否必须存在,以便OS能够在proc中加载它并随后提供句柄?那么,*.dll和*.exe之间有什么区别呢?与*.dll文件不同,*.exe文件在
DllMain
之上是否有其他附加功能,因此它们可以自己启动?没有任何exe文件不包含
DllMain
-它是仅用于dll(或.SYS,OCX)的入口点函数。对于GUI或控制台,EXE入口点通常分别是
WinMain
main
(忽略这些方法的
w
版本)。DLL必须具有
DllMain
,并且必须返回
0
,以指示初始化成功。请快速澄清一下,*.DLL和*.exe类型的文件中是否都有
DllMain
函数?
DllMain
函数是否必须存在,以便OS能够在proc中加载它并随后提供句柄?那么,*.dll和*.exe之间有什么区别呢?*.exe文件是否在
DllMain
的基础上增加了其他内容,因此它们可以独立启动,而不像*.dll文件?没有一个exe文件不包含
DllMain
-它是ent
    rundll32.exe user32.dll,LockWorkStation