سؤال

ولقد تم للتو الدخول في البرمجة مستوى منخفض (القراءة / الكتابة إلى ذاكرة هذا النوع من الشيء) ولقد واجهت مشكلة لم اجد جوابا.

وقطعة من المعلومات أريد أن يقرأ من لديه عنوان الذي هو نسبة إلى DLL تحميل في البريد الذاكرة، ز، هو في mydll.dll + 0x01234567. ايم المشكلة بعد أن دلل يتحرك حولها في الذاكرة ولكن الإزاحة يبقى على حاله. هناك على أية حال لمعرفة موقع هذا دلل في الذاكرة.

وأحاول حاليا للقيام بذلك ويفضل في ج # ولكن سأكون ممتنا للمساعدة في معظم لغات مستوى highish.

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

المحلول

وحاولت أن الأسلوب المقترح روب ووكر ولا يمكن الحصول عليها للعمل (وأعتقد أنه لم ينجح لأنه تم تحميل دلل كجزء من تنفيذ آخر بحيث لا يمكن العثور عليه بسهولة).

وأنا لم ومع اكتشاف الحل الذي عملت بالنسبة لي حتى هنا هو:

وأنا خلقت كائن من نوع عملية

String appToHookTo = "applicationthatloadedthedll";
Process[] foundProcesses = Process.GetProcessesByName(appToHookTo)
ProcessModuleCollection modules = foundProcesses[0].Modules;
ProcessModule dllBaseAdressIWant = null;
foreach (ProcessModule i in modules) {
if (i.ModuleName == "nameofdlliwantbaseadressof") {
                    dllBaseAdressIWant = i;
                }
        }

والآن لديك وحدة يمكنك القيام به فقط dllbaseAdressIWant.BaseAddress للحصول على قيمة.

ويساعد هذا الأمل

نصائح أخرى

ومن منظور Win32 وتحتاج إلى استخدام GetModuleHandle و GetModuleInformation الوظائف. تتيح لك هذه تبدو وحدة معالجة من قبل الاسم، ومن ثم استرجاع المعلومات، بما في ذلك العنوان الأساسي عن ذلك التعامل معها.

وينبغي أن يكون على التوالي إلى الأمام للالتفاف واجهات برمجة التطبيقات باستخدام P القياسية / استدعاء مغلفة.

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