首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在远程Windows框中动态运行DLL?

在远程Windows框中动态运行DLL?
EN

Stack Overflow用户
提问于 2010-09-03 01:34:15
回答 3查看 1.5K关注 0票数 1

是否有一种在远程Windows框中动态运行DLL的方法?

假设用户希望向远程服务器发送自己的DLL文件,并在远程站点运行DLL中的函数。用户可以提供函数入口点以及所需的参数,但不能提供更多。(例如没有头文件)

我正在考虑在远程站点上设置一个代理可执行文件,它可以(1)动态加载和绑定未知的DLL,(2)使用参数运行函数。这是一种好的方法,还是这样的可执行文件?

EN

回答 3

Stack Overflow用户

发布于 2010-09-03 02:15:25

您可以使用动态加载DLL的技术。

通常,通过静态地将一个.LIB链接到您的项目并编译它,从而使用DLL。要在运行时动态加载DLL,可以使用以下WIN32 API函数和其他一些技巧。

LoadLibaray();LoadLibarayEx();GetProcAddress();FreeLibrary();

还有一些其他的花招

  • 您需要将dll函数声明为导出。
  • 在c++中,您需要使用extern "C“来防止函数的名称损坏。
  • 哥伦比亚革命武装力量。用GetProcAddress

这在下面的wiki文章- 图书馆中都有解释。

您在远程计算机上安装可执行文件的想法是很好的。只要您与用户就函数名称和参数达成一致。如果dll符合此要求,则可以随时更改dll,而无需更改EXE。一旦设置和工作,就很容易添加额外的功能。

票数 2
EN

Stack Overflow用户

发布于 2010-09-03 01:41:05

是的,您可以使用这些信息编写运行DLL函数的小程序,并使用sysinternals中的PSEXEC之类的东西远程调用它。

PsExec是一种轻量级的telnet替换,它允许您在其他系统上执行进程,完全具有控制台应用程序的交互性,而不必手动安装客户端软件来手动安装客户端软件。

票数 1
EN

Stack Overflow用户

发布于 2010-09-03 15:18:41

Andrew的答复对于非托管代码来说是合理的。他围绕GetProcAddress描述的技术本质上就是RunDll32.exe所做的。RunDll32.exe是Windows的一部分,专门用于加载任意DLL并执行它们的代码。你可以这样运行:

RundL32.EXE dllfile,入口点

当您这样做时,RunDll32将调用DLL上的LoadLibrary,然后调用您给它的入口点名称上的GetProcAddress。如果一切顺利,则调用入口点函数。

为此,需要导出入口点函数才能实际工作。还必须这样宣布:

代码语言:javascript
复制
void CALLBACK MyEntryPoint(
  HWND hwnd,
  HINSTANCE hinst,
  LPSTR lpszCmdLine,
  int nCmdShow);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3632473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档