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

Qt Internals & Reversing

بدأه GamingMasteR في 28 نوفمبر 2008 · 13 رد · 3,738 مشاهدة · في قسم Cross Platform GUI Libraries العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

موضوع شيق لـ Daniel Pistelli يأخذك فيه الى اعماق Qt .

اقتباس

Introduction

Half of the text of this article comes from my larger paper "Dynamic C++ Proposal". I decided that it was useful to take the part about Qt internals, put it into another article and extend it by adding a reversing part. Because of its nature, this is not the usual kind of article I write. In fact, I wrote the reversing part in less than a day. So, this is a very easy one. However, I think it is useful for people who need to reverse a Qt application and certainly wouldn't consider reading my other paper about Dynamic C++, which doesn't sound like a paper about Qt and, in fact, isn't a paper about Qt: the paragraph about Qt is only one among many others. Moreover, I haven't seen serious articles about this subject.

The first thing which needs to be considered when reversing Qt applications is what Qt brought to the C++ language. Events (inside the Qt framework) are just virtual functions, so nothing new there. This is not a C++ reversing guide. What is new in Qt are signals and slots, which rely on the dynamism of the Qt framework.

So, first thing I'm going to show how this dynamism works. The second part focus on reversing and, at that point, I will show how to obtain all the metadata one needs when disassembling a "Q_OBJECT" class.

أقرأ المزيد ...

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#2

حتى هنا موجودة الهندسة العكسية :rolleyes:

جاري الاطلاع على الرابط ،،

و مشكور يا GM على الموضوع

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#3

هنا وفي كل مكان :D

الهندسة العكسية للكائنات شيقة .. خاصة اذا كنت تقوم بعمل Reversing على كائنات انت الذي كتبتها او لديك السورس لها .. يجعلك تفهم عمل المترجمات بشكل أعمق .

هناك كتاب جيد يتكلم عن هذا الموضوع اسمه : Reverse Engineering of Object Oriented Code .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#4
اقتباس
الهندسة العكسية للكائنات شيقة

اجمل شيء مع الهندسة العكسية ،، برامج الدوت نت فهي سهلة و واضحة .. طبعا اذا لم تكن مشوشة :lol:

اقتباس
هناك كتاب جيد يتكلم عن هذا الموضوع اسمه : Reverse Engineering of Object Oriented Code .

هل الكتاب مفيد؟؟

عموما جاري تحميل الكتاب الان.

تعديل:

رغم اني لا اعلم متى سأقرءة فالوقت مزدحم

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 28 نوفمبر 2008 في 15:41

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#5

ما يهمنى الان هو امشى مع الطريق فى Qt و ليس العكس :D ،، لكن جزء المقالة التى كتبتها اخى GM شيقة جداً

جارى القراءة

تم تعديل هذه المشاركة بواسطة Omar Eladel في 28 نوفمبر 2008 في 17:06

#6

قرأت الجزء الأول فقط من المقالة أعتقد اني بحاجة لخلفية بسيطة للهندسة العكسية و asm وشكرا لك .

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#7

مرسى على المقاله مستر GM

forum-signature-01.gif
#8

شكرا لكم .

الموضوع الذي ذكره في بداية المقالة سيتم طرحه خلال اسبوع او اثنين, أعتقد انه سيكون مقال فريد من نوعه عن خبايا الـOOP وبالأخص الـ++C .

سأقوم بالمتابعة لوضعه هنا حين يخرج الى النور, في حين أني نسيت فتفقدّوه على ntcore.com ;)

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#9

المقال جاد جداّ :

Dynamic_C++ Proposal

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#10
GamingMasteR كتب:
المقال جاد جداّ :

Dynamic C++ Proposal

مشكور GM ،

قمت بطباعة المقال .. صراحة لم افهم شيء ،، لكن كانت القراءة مستعجلة و ليست بتركيز تام

ربما في المرة العاشرة سأعرف عن ماذا تتحدث المقالة :lol:

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#11

هكذا هي مقالاته من أدسم المقالات التي يمكن ان تراها .

اذا كنت مهتم بالـDotNET فراجع مقالاته ايضا عنها فمحتواها ذو جودة عالية .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#12

السلام عليكم و رحمة الله و بركاته,

شكراً للأخ GamingMasteR على الإشارة إلى هذا المقال الرائع :)

الحقيقة المقال دسم قليلاً, لأنه ما يقترحه الكاتب ليس برنامجاً أو أداة, بل إنه تطوير "للغة" ++C بإضافة الـ Dynamism, و لكن الكاتب (يعجبني رأيه في هذا الموضوع) اشترط أن التطوير الحاصل لا يجب أن ينتج لغة جديدة, و لكن يجب أن يكون تحت تصرف المبرمج كما تفعل Qt هذا الأمر :)

الـ Dynamism ؟؟؟

قبل أن أقول لك ما هو دعني أسألك سؤالاً ؟

كم عدد المكتبات المبرمجة بلغة C التي مرت عليك في حياتك البرمجية ؟

بالنسبة لي, رأيت عدداً لا يحصى, و ربما أكثر من عدد شعر رأسي :)

لغة C هي اللغة الأساسية في عالم الحاسوب لإنتاج المكتبات البرمجية. لأنها توفر model بسيط جداً للـ Compiled Code, مثال على ذلك لو ترجمنا أي دالة بأي مترجم C, فسنرى أن هيكلية الدالة التي ترجمت إلى لغة Assembly بسيطة جداً, لذلك تستطيع معظم لغات الـ scritpting استدعاء هذه المكتبات. لا تنسى أن Windows و Linux و Unix ووووووووووووووووووووووووووووووووووووووووووووووووووووووو كلهم تتم برمجتهم (حتى الآن) بلغة C. و لا يوجد فرع من فروع البرمجة إلا و تجد أكثر من مكتبة للغة C حاضرة فيه.

هيكلية كود الأسمبلي الناتج أو لنقل بشكل أصح هيكيلية البرنامج بعد الترجمة و وقت تشغيله في الذاكرة واضحة و بسيطة و يطلق على الهيكلية هذه Application Binary Interface ABI ,,

++C لا تختلف عن C في هذه المجال و حسب و لكن هذا يعتبر أحد عوامل القصور في هذه اللغة, فالأصناف على سبيل المثال class يختلف الكود الناتج عن ترجمتها من مترجم لآخر و حتى بين الإصدارات المختلفة للمترجم نفسه :)

في الحقيقة لا تستطيع القول بأنه قصور فلغة مثل ++C صممت لتتجاوز حالات القصور عن طريق تطبيق مفهوم الـ Tradeoffs أو المقايضات.

لغة ++C هي لغة شديدة الكبر في قلبها على عكس C و لكنها مع C في أنها لا توفر إلا أدوات لطرق البرمجة, فـ C توفر البرمجة الإجرائية, و ++C توفر ذلك أيضاً, و لكنها تقدم Models أخرى و هي الـ OOP و الـ Generic Programming,

و يمكنك كمبرمج استخدام احداها في برمجتك أو مزج الطرق الثلاثة سوياُ, و ++C تسمح لك بمزج برمجة الـ Low level و الـ High Level داخل هذه الـ Models أيضاُ, لذلك يتم تقديم التطويرات المقترحة في ++C على شكل library و ليس كـ Language Extenstion,

الكاتب بكل بساطة يقوم بإضافة واجهة موحدة للـ Objects, لغة Java مثلاً جميع الكائنات فيها ترث الكائن الأم Object.

في ++C يتجاوز المبرمجون مساوئ الأداء في لغة ++C عن طريق الـ Generic Programming و هذا ما تقوم به Qt, و استخدم الكاتب واجهة الكائن في Qt أصلاً.

لا أدري ماذا بعد :lol:

عموماً حتى الـ GC Garbage Collector صممت للغة ++C بنفس المفهوم و لكن مبرمجي ++C المحترفين لا يعتمدون عليها كثيراً لأن هناك الـ Profilers التي ستحل المشكلة بطريقة أفضل برأي معظمهم.

تحياتي ,,

#13
GamingMasteR كتب:
هكذا هي مقالاته من أدسم المقالات التي يمكن ان تراها .

اذا كنت مهتم بالـDotNET فراجع مقالاته ايضا عنها فمحتواها ذو جودة عالية .

شكرا اخي على التنويه ،، فعلا اطلعت على مقالاته ، من العناوين يبدو انها شيقة.

قمت بالاحتفاظ بها على الحاسب لقراءتها في اقرب فرصة ان شاء الله

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#14

جزاكم الله خيرا على الموضوع

شكرا لك اخى Khaled.Alshaya على مشاركتك القيمة جدا وجزاك الله كل خير

amdvsintel22.jpg

--i use AMD--

لا اله الا الله محمد رسول الله

أستعن بالله و لا تعجز

تابعنى على تويتر

***

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