在什么情况下可以使用rundll32来调用DLL中的函数?

我想从命令行调用各种Windows DLL中的功能。看起来该rundll32实用程序将满足我的需要-它需要一个DLL名称和一个函数名称,并使用参数运行该函数。

我当然希望不会有任何问题。我可以使用哪些功能rundll32

几乎肯定会有问题。

我可以使用哪些功能rundll32

好吧,最理想的情况是,您根本不会使用它-已弃用

Rundll32是Windows 95的遗留物,至少从Windows Vista开始就已弃用,因为它违反了许多现代工程准则。如果通过Rundll32运行某些内容,那么您将失去根据所运行的内容定制执行环境的能力。

rundll32仅设计用于调用非常特定类型的函数,特别是用于创建窗口和处理窗口消息的函数。在对这个微软文档rundll32界面解释说,我们在调用函数必须采取一个HWND,一个HINSTANCE,一个LPSTR,和int(按顺序),并且必须使用_stdcall/CALLBACK调用约定。

有关您要调用的功能,请查阅MSDN文档,以查看其是否具有该签名。例如,ExitWindowsEx不合适。实际上,我找不到所记录的带有该签名的单个函数。

如果不确定这一切意味着什么,则可以跳过下一部分,然后继续进行最后一部分。

如果在其他功能上使用它会出什么问题?

还记得整个功能签名的事情吗?rundll32假定您要调用的函数具有正确的签名,无论实际上是否如此。当其假设错误时,与堆栈相关的异常奇特的事情可能会继续下去。(堆栈是一个存储位置,用于存储在函数之间传递的参数。)

不匹配的函数签名将导致将提供的数据rundll32解释为不同的内容,因为函数期望其参数位于堆栈中。第一个基准rundll32供应是一个窗口句柄,该窗口句柄以不确定的方式分配。因此,如果您滥用了rundll32您实际上是在将随机数据作为第一个参数传递进一步阅读:如果您不匹配调用约定,会出什么问题?

其余参数效果不佳。即使您通过来向函数提供命令行rundll32,也不会将其解析为适合该函数的数据类型。取而代之的是,rundll32仅获取整个“额外”文本,将其塞入字符串变量,然后将指向该数据的指针作为后面的参数传递给函数。这取决于解析文本的功能。因此,永远不会希望使用带有用户提供的参数的任意函数rundll32

如果目标函数不要求任何参数,那不是完全的灾难,但是您仍然在搞砸堆栈。里面有代码rundll32可以解决这个问题,但这并不能给您借口继续滥用它。

如果您正在使用rundll32旨在通过这种方式使用的第三方DLL中调用兼容功能,则仍然可能会遇到问题。rundll32始终选择使用所有Windows新功能(例如Data Execution Prevention),这些功能可能会引入并非为第三方代码设计的更改;这就是为什么该行为是选择加入的。

幸运的是,有一种更好的方法可以做您想要的事情。

我该怎么办呢?

试图锁定工作站(user32.dll,LockWorkStation)?快跑吧tsdiscon

尝试关闭系统(user32.dll,ExitWindowsEx)?将该shutdown实用程序与适当的标志一起使用-shutdown /?有关帮助,请参见

您是应用程序开发人员,并且尝试在不编写新EXE的情况下调用您自己的DLL函数吗?可能是用C ++编写该EXE。

试图运行其他东西吗?我的开源实用程序SprintDLL支持用户指定的参数列表,多种调用约定以及可与多个函数及其输出配合使用的脚本。如果您只想使用Windows附带的工具,则可以使用PowerShell进行P / Invoke


将该问题和答案作为参考,可用于更正建议rundll32以可疑方式使用的材料如果您看到有人在骂人rundll32,请给他们指向此页面的链接!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在什么情况下会调用C ++复制构造函数?

来自分类Dev

在什么情况下我可以使用Solr Core

来自分类Dev

在JavaScript中,什么情况下= == b,但是使用a或b可以得出不同的结果?

来自分类Dev

在什么情况下可以删除帐户?

来自分类Dev

在什么情况下我应该在C ++ 11中为枚举类使用固定宽度的整数

来自分类Dev

在什么情况下可以省略透视划分?

来自分类Dev

在什么情况下可以省略C中的花括号?

来自分类Dev

下述方法在什么情况下可以使用?谁能提供一些有用的例子?

来自分类Dev

在什么情况下可以使用上下文?

来自分类Dev

为什么在不包含STL的情况下可以使用nullptr?

来自分类Dev

什么情况下使用Java中的执行人无界队列?

来自分类Dev

在什么情况下可以决定平等?

来自分类Dev

在什么情况下可以省略SVG path的命令?

来自分类Dev

在什么情况下我必须使用std :: function?

来自分类Dev

在pytorch中,损失函数需要在什么情况下继承nn.module?

来自分类Dev

gluPerspective在什么情况下可以看到顶点?

来自分类Dev

在什么情况下使用异常处理是可行的?

来自分类Dev

如何在不使用Rundll32的情况下打开“查找用户,联系人和组”对话框?

来自分类Dev

在什么情况下,您可以在AngularJS中定义HTTP拦截器?

来自分类Dev

为什么bash函数可以在不使用局部变量的情况下递归调用自身?

来自分类Dev

Eclipse中的MarkSelection是什么,它将在什么情况下使用?

来自分类Dev

在什么情况下,您可以在DynamoDB上使用简单哈希键?

来自分类Dev

在什么情况下将不使用在路径中首先找到的可执行文件

来自分类Dev

为什么在iPython中可以使用斜线来调用函数?

来自分类Dev

如何在不使用Node JS调用函数的情况下将函数调用推送到数组中以使用Q?

来自分类Dev

何时或在什么情况下我应该使用 Optional 来检查 null?

来自分类Dev

在什么情况下可以使用 mongoexport?

来自分类Dev

VoIP Push:在什么情况下 didInvalidatePushTokenForType 会被调用?

来自分类Dev

在什么情况下Java中的JFrame是空白的

Related 相关文章

  1. 1

    在什么情况下会调用C ++复制构造函数?

  2. 2

    在什么情况下我可以使用Solr Core

  3. 3

    在JavaScript中,什么情况下= == b,但是使用a或b可以得出不同的结果?

  4. 4

    在什么情况下可以删除帐户?

  5. 5

    在什么情况下我应该在C ++ 11中为枚举类使用固定宽度的整数

  6. 6

    在什么情况下可以省略透视划分?

  7. 7

    在什么情况下可以省略C中的花括号?

  8. 8

    下述方法在什么情况下可以使用?谁能提供一些有用的例子?

  9. 9

    在什么情况下可以使用上下文?

  10. 10

    为什么在不包含STL的情况下可以使用nullptr?

  11. 11

    什么情况下使用Java中的执行人无界队列?

  12. 12

    在什么情况下可以决定平等?

  13. 13

    在什么情况下可以省略SVG path的命令?

  14. 14

    在什么情况下我必须使用std :: function?

  15. 15

    在pytorch中,损失函数需要在什么情况下继承nn.module?

  16. 16

    gluPerspective在什么情况下可以看到顶点?

  17. 17

    在什么情况下使用异常处理是可行的?

  18. 18

    如何在不使用Rundll32的情况下打开“查找用户,联系人和组”对话框?

  19. 19

    在什么情况下,您可以在AngularJS中定义HTTP拦截器?

  20. 20

    为什么bash函数可以在不使用局部变量的情况下递归调用自身?

  21. 21

    Eclipse中的MarkSelection是什么,它将在什么情况下使用?

  22. 22

    在什么情况下,您可以在DynamoDB上使用简单哈希键?

  23. 23

    在什么情况下将不使用在路径中首先找到的可执行文件

  24. 24

    为什么在iPython中可以使用斜线来调用函数?

  25. 25

    如何在不使用Node JS调用函数的情况下将函数调用推送到数组中以使用Q?

  26. 26

    何时或在什么情况下我应该使用 Optional 来检查 null?

  27. 27

    在什么情况下可以使用 mongoexport?

  28. 28

    VoIP Push:在什么情况下 didInvalidatePushTokenForType 会被调用?

  29. 29

    在什么情况下Java中的JFrame是空白的

热门标签

归档