سؤال

أتمنى تحميل المكتبة على ملف C++ DLL غير مُدار باستخدام تعليمات برمجية مُدارة، ثم الاتصال بـ GetProcAddress على الوظائف الخارجية التي تم تشويهها.سؤالي هو هل الأسماء المشوهة التي تحصل عليها من مترجم C++ حتمية؟إنه:هل سيتم تحويل الاسم دائمًا إلى نفس الاسم المشوه، إذا لم يتغير التوقيع الأصلي؟

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

المحلول

لم يتم تحديده بواسطة المعيار، وقد تغير بالتأكيد بين إصدارات نفس المترجم في تجربتي، على الرغم من أنه يجب أن يكون حتميًا على مجموعة معينة من الظروف، لأنه بخلاف ذلك لن تكون هناك طريقة لربط وحدتين مجمعتين بشكل منفصل.

إذا كنت تستخدم GetProcAddress, ، سيكون من الأنظف بكثير تصدير الوظائف بتنسيق extern "C" حتى لا يتم تشويه أسمائهم.

نصائح أخرى

مترجم محدد، كما قال آخرون.ومع ذلك، يمكنك العثور على تفاصيل في مستند بواسطة Agner Fog ...

p> http://www.agner.org/optimize/#manuals

شاهد البند 5 في تلك الصفحة.

أيضا، في هذه الأيام، هناك مكتبات يمكنها التعامل مع المشاهدات والعطلات للمجمعون المشتركين لك.بالنسبة إلى Visual C ++، ستكون نقطة البداية مكتبات DBGHELP و IMICEHLP.

http://msdn.microsoft.com / en-us / library / MS679292٪ 28V= vs.85٪ 29.aspx

http://msdn.microsoft.com / en-us / library / MS680321٪ 28V= vs.85٪ 29.aspx

يتم التعامل مع

اسم المنغيلينغ بشكل مختلف من خلال كل مترجم (ربما أو لا - لا يوجد أي معيار).إذا كنت تستخدم وظائف C النقية في كود C ++ الخاص بك، فيمكنك استخدام "C" الخارجية "C" لاسم المقابض السكبري من أجل وظائف C بحيث يكون التحويل البرمجي قادرا على العثور عليه.

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