سؤال

أحاول كتابة exe تقوم أيضًا بتصدير الوظائف التي يمكن استدعاؤها باستخدام RunDLL32. هل هذا ممكن وإذا كان الأمر كذلك ، فلماذا لا يعمل هكذا؟

تابعت عن كثب نصيحة Microsoft حول هذا.

#define RUNDLL32(func) extern "C" __declspec(dllexport) void CALLBACK func(HWND hWnd, HINSTANCE hInst, LPSTR lpszCmdLine, int nCmdShow)

RUNDLL32(MyFunc)
{
  MessageBox(0, 0, 0, 0);
}

ولكن عندما استدعاء مع

rundll32 myprog.exe,_MyFunc@16

Rundll32 تحطم/DEP ينطلق.

هل كانت مفيدة؟

المحلول

يستخدم Rundll32.exe LoadLibrary () لتحميل الصورة القابلة للتنفيذ. من غير المحتمل أن ينجح هذا بشكل جيد بالنسبة إلى EXE ، لا يتوقع تحميله على عنوان ليس افتراضيًا. وهو ما يضمن حدوثه ، يحتل Rundll32.exe بالفعل هذا العنوان الافتراضي. لست متأكدًا مما إذا كان بإمكانك العبث بالرابط حتى لا يحذف سجلات النقل.

لكن لا تهتم بهذا النهج ، فقط قم بإنشاء DLL بدلاً من exe. ونقل الحجج الحقيقية إلى MessageBox (). ونعم ، استخدم ملف .def لإعادة تسمية الوظيفة المصدرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top