الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]كيف أستدعي دالة معرفة في وقت التشغيل!

بدأه Adban في 23 أغسطس 2012 · 7 رد · 848 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم..

كيف أستطيع استدعاء دالة function ( بكود سي++ قياسي ) معرّفة عند وقت التشغيل، كأن أقوم بتنفيذ binary code عند وقت التشغيل at run-time

#2

أمّا استخدام C++ "القياسية" للقيام بذلك، فهذا غير ممكن. يمكنك ذلك باستخدام الـC أو C++ ولكن بصورة غير قياسية.

الأصل في لغة مثل C++ أنها لا تحول مدخلات المستخدم input لكود تنفيذي، أحد أسباب ذلك هي قضايا الـsecurity.

أعتقد أن لـ GCC اضافة plug-in تخص هذا الأمر، لعل الأخوة لهم تجربة في الأمر.

تم تعديل هذه المشاركة بواسطة A.S Hack في 24 أغسطس 2012 في 17:30

1

" إن الله كتب الإحسان على كل شيء"

::

الإرادة ... تحقق السيادة.

#3

استخدم Function Pointer يحمل عنوان الــ binary code المطلوب, ثم قم باستدعاء الدالة.

هكذا مثلا :

int Test() {
    long (WINAPI * pMaFunc)(VOID);
    long r;
    *(FARPROC *)&pMaFunc = (FARPROC) 0xFFFF;
    r = pMaFunc();
    return r;
}

إن لم تُفدك إجابتي فلا تقلق, يوجد في القسم من هو أعلم مني في هذه الأمور :)

1
#4

في أنظمة التشغيل الحديثة، عليك أن تتعامل مع بت NX إذا أردت "تنفيذ" كود مثل الذي وضعه الأخ أحمد، بالمناسبة لماذا أنت مُصر على استخدام شفرة قياسية، استخدم بدون تعقيد كود مثل هذا

unsigned char BinaryCode= "\x8B\xFE\x2B\xF9\x8B";
void* Address=&BinaryCode[0];;
__asm call Address
2

" إن الله كتب الإحسان على كل شيء"

::

الإرادة ... تحقق السيادة.

#5
Adban كتب:

السلام عليكم..

كيف أستطيع استدعاء دالة function ( بكود سي++ قياسي ) معرّفة عند وقت التشغيل، كأن أقوم بتنفيذ binary code عند وقت التشغيل at run-time

أخى انت لم توضح مشكلتك بالشكل الكافى ولم تتضمن مثال على الكود ....

لكن على كلا فأن مشكلتك بالحرف على موقع استاك اوفر فلو build function at runtime c++ from number of functions that built at compilation

تقبل مروري والله ولى التوفيق ...

1

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#6
كأن أقوم بتنفيذ binary code عند وقت التشغيل at run-time

استخدم Code Injection وبما انك ستتعامل مع binary code فيفضل استخدام Assembly

استخدام لغة التجميع سيسهل عليك الموضوع جدا

بالتوفيق


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#7
A.S Hack كتب:

في أنظمة التشغيل الحديثة، عليك أن تتعامل مع بت NX إذا أردت "تنفيذ" كود مثل الذي وضعه الأخ أحمد، بالمناسبة لماذا أنت مُصر على استخدام شفرة قياسية، استخدم بدون تعقيد كود مثل هذا

unsigned char BinaryCode= "\x8B\xFE\x2B\xF9\x8B";
void* Address=&BinaryCode[0];;
__asm call Address

هكذا أصوبsleep.gif

char* BinaryCode= "\x8B\xFE\x2B\xF9\x8B";
void* Address=&BinaryCode[0];
__asm call Address

" إن الله كتب الإحسان على كل شيء"

::

الإرادة ... تحقق السيادة.

#8

شكرا لكم جميعا...

استفدت من مشاركاتكم

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…