динамически запускать DLL на удаленной коробке Windows? - PullRequest
1 голос
/ 03 сентября 2010

Есть ли способ динамического запуска DLL на удаленном компьютере с Windows?

Допустим, пользователь хочет отправить свой собственный файл DLL на удаленный сервер и запустить функцию в этой DLL на удаленном сайте.,Пользователь может предоставить точки входа в функцию, а также необходимые параметры, но не более.(например, без заголовочного файла)

Я думаю о настройке исполняемого файла агента на удаленном сайте, который может (1) динамически загружать и связывать неизвестную DLL и (2) запускать функцию с параметрами.Это хороший подход или такой исполняемый файл возможен?

Ответы [ 3 ]

2 голосов
/ 03 сентября 2010

Вы можете использовать метод динамической загрузки ваших DLL.

Обычно вы используете DLL, статически связывая .LIB с вашим проектом и компилируя его.Для динамической загрузки DLL во время выполнения вы используете следующие функции WIN32 API и несколько других приемов:

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

Существуют и другие приемы

  • Вам необходимо объявить функции dll как export'ed.
  • В c ++ вам нужно использовать extern«C» для предотвращения искажения имен ваших функций.
  • FARPROC ... с GetProcAddress

Все это объясняется в следующей статье вики - http://en.wikipedia.org/wiki/Dynamic-link_library

Ваша идея установить исполняемый файл на удаленной машине является хорошей.Пока вы согласны с именами функций и параметрами с пользователем.Если dll соответствует этому, то dll можно изменить в любое время, не требуя изменения вашего EXE-файла.После настройки и работы просто добавить дополнительные функции.

1 голос
/ 03 сентября 2010

Да, вы можете написать небольшую программу, которая запускает функцию DLL, используя эту информацию, и вызывать ее удаленно, используя что-то вроде PSEXEC из sysinternals.

PsExec - легкий Telnet-замена, которая позволяет вам выполнять процессы в других системах, в комплекте с полной интерактивностью для консольные приложения, не имея вручную установить клиентское программное обеспечение вручную установить клиентское программное обеспечение

0 голосов
/ 03 сентября 2010

Эндрю Кэш отвечает за неуправляемый код. Техника, которую он описывает для GetProcAddress , по сути, то, что делает RunDll32.exe . RunDll32.exe является частью Windows и специализируется на загрузке произвольных библиотек DLL и выполнении их кода. Вы можете запустить его так:

RUNDLL32.EXE [dllfile], [точка входа] [необязательные аргументы]

Когда вы сделаете это, RunDll32 вызовет LoadLibrary для DLL, а затем GetProcAddress для имени точки входа, которое вы ей дадите. Если все идет хорошо, то вызывается функция точки входа.

Для того, чтобы это действительно работало, функцию точки входа необходимо экспортировать. Он также должен быть объявлен так:

void CALLBACK MyEntryPoint(
  HWND hwnd,
  HINSTANCE hinst,
  LPSTR lpszCmdLine,
  int nCmdShow);
...