Как работает RunDll32? - PullRequest
       23

Как работает RunDll32?

7 голосов
/ 21 ноября 2011

Как именно RunDll32 вызывает функцию, не зная числа / типов аргументов, которые может принимать функция?

Имеет ли она встроенный компилятор или что-то в этом роде?

Ответы [ 2 ]

12 голосов
/ 21 ноября 2011

RunDll32 в значительной степени является тонкой оболочкой, которая вызывает LoadLibrary для загрузки заданной DLL, вызывает GetProcAddress, чтобы получить адрес функции нужной функции, а затем вызывает функция.

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

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

где CALLBACK - макрос, который расширяется до __stdcall соглашения о вызовах. См. эту статью базы знаний для более подробного описания.

Если функция вашей DLL не имеет правильной подписи или соглашения о вызовах, это может привести к серьезным последствиям. См. Что может пойти не так, если вы не соответствуете соглашению о вызовах? для получения многих подробностей. К счастью (или, возможно, к сожалению), RunDll32 написан таким образом, чтобы уменьшить количество ошибок такого типа , но это все равно не означает, что это хорошая идея. Не используйте RunDll32 для вызова функций, которые не имеют правильной подписи . Это просто бомба замедленного действия, ожидающая взрыва в следующей версии Windows.

2 голосов
/ 21 ноября 2011

Он не может вызывать только любую функцию, он может вызывать только функцию , специально написанную для вызова .Следовательно, нет магии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...