السلام عليكم..
كيف أستطيع استدعاء دالة function ( بكود سي++ قياسي ) معرّفة عند وقت التشغيل، كأن أقوم بتنفيذ binary code عند وقت التشغيل at run-time
السلام عليكم..
كيف أستطيع استدعاء دالة function ( بكود سي++ قياسي ) معرّفة عند وقت التشغيل، كأن أقوم بتنفيذ binary code عند وقت التشغيل at run-time
أمّا استخدام C++ "القياسية" للقيام بذلك، فهذا غير ممكن. يمكنك ذلك باستخدام الـC أو C++ ولكن بصورة غير قياسية.
الأصل في لغة مثل C++ أنها لا تحول مدخلات المستخدم input لكود تنفيذي، أحد أسباب ذلك هي قضايا الـsecurity.
أعتقد أن لـ GCC اضافة plug-in تخص هذا الأمر، لعل الأخوة لهم تجربة في الأمر.
تم تعديل هذه المشاركة بواسطة A.S Hack في 24 أغسطس 2012 في 17:30
" إن الله كتب الإحسان على كل شيء"
::
الإرادة ... تحقق السيادة.
استخدم Function Pointer يحمل عنوان الــ binary code المطلوب, ثم قم باستدعاء الدالة.
هكذا مثلا :
int Test() {
long (WINAPI * pMaFunc)(VOID);
long r;
*(FARPROC *)&pMaFunc = (FARPROC) 0xFFFF;
r = pMaFunc();
return r;
}إن لم تُفدك إجابتي فلا تقلق, يوجد في القسم من هو أعلم مني في هذه الأمور :)
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
في أنظمة التشغيل الحديثة، عليك أن تتعامل مع بت NX إذا أردت "تنفيذ" كود مثل الذي وضعه الأخ أحمد، بالمناسبة لماذا أنت مُصر على استخدام شفرة قياسية، استخدم بدون تعقيد كود مثل هذا
unsigned char BinaryCode= "\x8B\xFE\x2B\xF9\x8B"; void* Address=&BinaryCode[0];; __asm call Address
" إن الله كتب الإحسان على كل شيء"
::
الإرادة ... تحقق السيادة.
Adban كتب:السلام عليكم..
كيف أستطيع استدعاء دالة function ( بكود سي++ قياسي ) معرّفة عند وقت التشغيل، كأن أقوم بتنفيذ binary code عند وقت التشغيل at run-time
أخى انت لم توضح مشكلتك بالشكل الكافى ولم تتضمن مثال على الكود ....
لكن على كلا فأن مشكلتك بالحرف على موقع استاك اوفر فلو build function at runtime c++ from number of functions that built at compilation
تقبل مروري والله ولى التوفيق ...
كأن أقوم بتنفيذ binary code عند وقت التشغيل at run-time
استخدم Code Injection وبما انك ستتعامل مع binary code فيفضل استخدام Assembly
استخدام لغة التجميع سيسهل عليك الموضوع جدا
بالتوفيق
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
A.S Hack كتب:في أنظمة التشغيل الحديثة، عليك أن تتعامل مع بت NX إذا أردت "تنفيذ" كود مثل الذي وضعه الأخ أحمد، بالمناسبة لماذا أنت مُصر على استخدام شفرة قياسية، استخدم بدون تعقيد كود مثل هذا
unsigned char BinaryCode= "\x8B\xFE\x2B\xF9\x8B"; void* Address=&BinaryCode[0];; __asm call Address
هكذا أصوب![]()
char* BinaryCode= "\x8B\xFE\x2B\xF9\x8B"; void* Address=&BinaryCode[0]; __asm call Address
" إن الله كتب الإحسان على كل شيء"
::
الإرادة ... تحقق السيادة.
شكرا لكم جميعا...
استفدت من مشاركاتكم
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…