是否有一种在远程Windows框中动态运行DLL的方法?
假设用户希望向远程服务器发送自己的DLL文件,并在远程站点运行DLL中的函数。用户可以提供函数入口点以及所需的参数,但不能提供更多。(例如没有头文件)
我正在考虑在远程站点上设置一个代理可执行文件,它可以(1)动态加载和绑定未知的DLL,(2)使用参数运行函数。这是一种好的方法,还是这样的可执行文件?
发布于 2010-09-03 02:15:25
您可以使用动态加载DLL的技术。
通常,通过静态地将一个.LIB链接到您的项目并编译它,从而使用DLL。要在运行时动态加载DLL,可以使用以下WIN32 API函数和其他一些技巧。
LoadLibaray();LoadLibarayEx();GetProcAddress();FreeLibrary();
还有一些其他的花招
这在下面的wiki文章- 图书馆中都有解释。
您在远程计算机上安装可执行文件的想法是很好的。只要您与用户就函数名称和参数达成一致。如果dll符合此要求,则可以随时更改dll,而无需更改EXE。一旦设置和工作,就很容易添加额外的功能。
发布于 2010-09-03 01:41:05
是的,您可以使用这些信息编写运行DLL函数的小程序,并使用sysinternals中的PSEXEC之类的东西远程调用它。
PsExec是一种轻量级的telnet替换,它允许您在其他系统上执行进程,完全具有控制台应用程序的交互性,而不必手动安装客户端软件来手动安装客户端软件。
发布于 2010-09-03 15:18:41
Andrew的答复对于非托管代码来说是合理的。他围绕GetProcAddress描述的技术本质上就是RunDll32.exe所做的。RunDll32.exe是Windows的一部分,专门用于加载任意DLL并执行它们的代码。你可以这样运行:
RundL32.EXE dllfile,入口点
当您这样做时,RunDll32将调用DLL上的LoadLibrary,然后调用您给它的入口点名称上的GetProcAddress。如果一切顺利,则调用入口点函数。
为此,需要导出入口点函数才能实际工作。还必须这样宣布:
void CALLBACK MyEntryPoint(
HWND hwnd,
HINSTANCE hinst,
LPSTR lpszCmdLine,
int nCmdShow);https://stackoverflow.com/questions/3632473
复制相似问题