التشفير بالأختراق
وعن لغات البرمجة
أولآ: أخوآني قبل أن تتعلم التشفير هل سألت نفسك في ماذا يستخدم الهيـكس ؟ الهيــكس نظآم عشري
من المهم ان نفهم ماهو النظام العشري Decimal system و النظام الثنائي Binary system و حتى النظام الست عشري Hexadecimal system.
النظام العشري
نسخدم النظام هذا يوميا في حياتنا و في اغلب امورنا و هو بكل بساطة نظام الارقام على الاساس العشري و يحتوي على :
0 1 2 3 4 5 6 7 8 9
عدد مكونات النظام العشري هو عشرة ارقام , و هذا هو سبب تسميته بهذا الاسم حيث انه يكبر بعد كل عشرة ارقام, مثل بسيط هو التالي:
0
1
2
3
4
5
6
7
8
9
10
11
لاحظتم الاختلاف بين ال9 و ال10 , حيث انه عندما انتهينا من الارقام ( اخر رقم هو 9) رجعنا للرقم الاول و هو صفر و اضفنا واحد بجواره, و لو واصلنا العد لوصلنا الى ال19 و ثم نرجع الرقم 9 الى صفر و نضيف واحد الى الرقم 1 فيصبح الرقم 20 و هكذا دواليك.
النظام الثنائي
كما قلنا ان النظام العشري يعتمد على اساس عشرة ارقام , فارقم الثنائي يعتمد على رقمين فقط و هما صفر وواحد
1 0
و بنفس الطريقة , عند الانتهاء من الارقام نضيف الرقم صفر و نزيد واحد , كما هو الحال
0
1
10
11
100
101
110
111
نلاحظ ان النظام يتكون من رقمين فقط , صفر وواحد نبدا بالصفر ثم واحد ثم نضيف واحد مكانالصفر و نضيف واحد بجوار الرقم عند انتهاء الارقام ( في حالتنا انتهاء الارقام هما صفر وواحد)
ملاحظة مهمة:
الرقم التالي 101100 في النظام الثنائي لا يلفظ ب مئة وعشرة الالاف و مئة! بل يلفظ كالتالي:
واحد صفر واحد واحد صفر صفر
و القاعدة هي : عندما نصل الى رقم صاحب الترتيب الذي يساوي اساس نظام العد ( في حالتنا هنا النظام الثنائي مثلا) نقوم بوضع الرقم صفر في الخانة الحالية و نضيف الرقم واحد في الجهة التالية له.
الآن بعد ان عرفنا ما هو النظام العشري و النظام الثنائي , سنقوم بالتحويل بينهم .
التحويل من النظام الثنائي الى العشري
اولا, لنتكلم عن النظام العشري, مثلا الرقم 134 يتكون من التالي :
= 10 ^0 ضرب 4 + 10^1 ضرب 3 + 10^2 ضرب 1
= 4 + 30 + 100
= 134
اليست الطريقة صحيحة؟
لاحظتم اننا استخدمنا اساس النظام العشري و هو الرقم عشرة و في المرحلة الاولى رفعناه للأس صفر ثم واحد ثم اثنان و هكذا ثم نضربه في الرقم التالي و نجمعهم في النهاية حتى نحصل على الناتج.
التحويل الى الرقم الثنائي شبيه جدا , و بما ان اساس النظان الثنائي هو 2 فنستبدل الرقم 10 ب 2 , لنأخذ رقما معيناً لنحوله, فليكن الرقم 111 مثلا
111
= 2^0 ضرب 1 + 2^1 ضرب 1 + 2^2 ضرب 1
= 1 + 2 + 4
= 7
جميل! الرقم 111 ( واحد واحد واحد) يساوي 7 في النظام العشري.
لنجرب رقماً اخر و ليكن 1010101
1010101
= 2^0 ضرب 1 + 2^1 ضرب 0 + 2^2 ضرب 1 + 2^3 ضرب صفر + 2^4 ضرب واحد + 2^5 ضرب صفر + 2^6 ضرب واحد
= 1 + 0 + 4 + 0 + 16 + 0 + 64
= 85
اعتقد ان المسألة اصبحت سهلة الآن ، بامكانكم التأكد من الناتج بواسطة الآلة الحاسبة الموجودة في الوندوز مثلا.
start>>programs>>accessories>>calculator
بعد تحويلها الى الالة الحاسبة العلمية طبعا.
يجب علينآ ان نفهم في ماذا تستخدم هذه البرامج اللتي نستخدمها في مجال الهاك ونحآول ان نستخدمها كما تستخدم وليس للهاك فحينهآ سوف نفيدنا كثيرا في الهاك ، التشفير مثآل : التشفير بالهندسة العكسية
هل سألت نفسك لماذا يجب ان أتعلم الهندسة العسكية فاذا سألت نفسك هذا السـؤال فيجب عليك ان ترجع الى اساس ماهي اللغة المستخدمة في الهندسة العكسية ؟؟
لغة ( Assembly) الاسمبلي هل بحثت عنها وعن اسآسيآتها لتكون على علم بهآ وبالأكواد المستخدمة وكيف عملها
أولآ يجب علينآ أن نفهم مآهي لغة الاسمبلي
يسميها العرب لغة التجميع ويتفق العالم بأسره على أن اسنعا لغة الاسمبلي وربما يعود السبب في هذا الاختلاق الى سرعة العرب في ترجمة المصطلحات
في لحظتا مولدها ثم ترك الموضوع بعد ذلك الى الأبد ..معظم برنامج الكمبيوتر تكتب هذي الأيام باللغات عالية المستوى
مثل بيسك وسي فوتران وباسكال وجافاو..... وكتابة البرنامج بهذه اللغات اسهل وأرخص من كتابتها بلغة الاسمبلي
حيث تقوم مترجمات اللغة أ مايطلقها Compiler بترجمة وتحويل البرنامج من احدى اللغات عالية المستوى الى
لغة الاسمبلي ومن ثم الى لغة الالة هل تعرف ماهي معنى لغة الآلة ؟؟ الحاسب لايعرف الحروف ولا الرموز لكن يعرف
قيميتني فقط وهو عندما يكون بالريسجتري طاقة ( كهرباء) فأنه يعطي القيمة 1 وعندما لايكون يعطي القيمة 0
ولكن هناك احوال كثيرة تستدعي حتما كتابة البرنامج مباشرة بلغة الاسمبلي كمثال للبرنامج اللي تستخدم في التحكم
في التفاعلات النووية نظرا للسرعة الهائلة التي تتم بها التفاعلات ولاتستطيع اي لغة مجارات هذه السرعة سوى لغة الاسمبلي
بالطبع مع قوة وسرعة الحاسبات وهنآ يأتي الحديث عن المعآلجآت... وحيث ان لغة الاسمبلي المتحولة من لغة اخرى
عالية المستوى ومنتجة بواسطة compilerتكون بطيئة وغير مختصرة
المعالجات وتنظيم الحاسب الشخصي
مقدمة:
تعتمد الأجهزة المتوافقة مع نظام IBM على المعالجات من عائلة المعالج Intel. في هذا الفصل سيتم عرض عام للمعالجات من عائلة المعالج 8086 في الجزء الأول حيث يتم التعرف على المعالج 8086 مع توضيح المسجلات المختلفة و استخدامات كل مسجل ثم يتم توضيح عملية تقسيم الذاكرة إلي قطاعات Segments.
عائلة المعالجات Intel 8086
تعتمد الحاسبات الشخصية المتوافقة مع IBM على المعالجات من النوع Intel وهي تشمل المعالجات 8086 و 8088 و 80286 و 80386 و 80486 و أخيراً المعالج Pentium حيث يتم استخدام المعالج لبناء نظام حاسوب بخصائص محددة كما في حالات استخدام المعالج 8088 لبناء الحاسوب من النوع IBM PC و استخدام المعالج 80286 لبناء الحاسوب المسمى XT ( eXtended Technology ) كما تم بناء النظام AT ( Advanced Technology ) مع ظهور المعالج 80386.
ثم بعد ذلك ونتيجة لأهمية وضع نظم ثابتة ومعرفة للجميع ظهرت أنظمة ISA (Industry Standard Arch.) و EISA ( Extended ISA ) وهي أنظمة تستعمل المعالجين 80386 و 80486.
مع ظهور المعالج الجديد والمسمي Pentium ظهرت الحاجة لأنظمة جديدة ذات سرعة عالية فظهرت أنظمة الناقل المحلي Local Bus Systems مثل نظام PCI ونظام VESA وذلك للاستفادة من الإمكانات الجديدة للمعالج.
مما يجدر ذكره أن المعالجات من عائلة Intel حافظت على التوافقية في تصميم المعالجات بحيث يتم استيعاب وتنفيذ البرامج التي تمت كتابتها لتعمل مع المعالجات القديمة في المعالجات الجديدة بدون مشاكل وهو ما يسمى بتوافقية البرامج Software Compatibility وهي ميزة كبيرة في التصميم حيث تم الاحتفاظ بالبرامج القديمة دون أي تعديل مع إمكانية تشغيل البرامج الجديدة ذات الإمكانات الجديدة والتي لم تكن موجودة في المعالجات القديمة. فيما يلي سنتناول المعالجات المختلفة بشيء من التفصيل وذلك بتوضيح الخصائص العامة للمعالج من حيث طول الكلمة Word Length وأقصي قيمة للذاكرة بالإضافة لبعض الخصائص العامة.
المعالج 8086 والمعالج 8088
قامت شركة Intel في عام 1978 بطرح المعالج 8086 وهو معالج يتعامل مع كلمة بطول 16-bits (يتم التعامل 16-bitفي المرة الواحدة ).بعد ذلك وفي سنة 1979 تم طرح المعالج 8088 وهو مشابه للمعالج 8086 من ناحية التركيب الداخلي ولكنه مختلف عنه في التعامل العام الخارجي حيث يتم فيه التعامل الخارجي بكلمه طولها 8-bits بينما يتعامل المعالج 8086 باستخدام نبضة سريعة وبالتالي فان أداءه افضل (زيادة سرعة النبضة تعنى زيادة التردد وبالتالي نقصان الزمن اللازم لتنفيذ أمر محدد ويتم تعريف سرعة المعالج بتحديد التردد الأقصى الذي يعمل به وتقاس وحدة التردد بالميجاهيرتز MHz).
قامت شركة IBM باختيار المعالج 8088 لبناء الحاسب الشخصي IBM PC وذلك لسهولة التعامل معه بالإضافة إلي رخص التكلفة حيث كان من المكلف في ذلك الوقت بناء الحاسب على المعالج 8086 ذات الـ16-bit وذلك بسبب ارتفاع تكلفة بناء نظام بوحدات مساعده تتعامل مع كلمة بطول 16-bit في ذلك الزمن.
يتعامل المعالجان 8086 و8088 بنفس التعليمات وهما يمثلان نقطة البداية التي بدأت منها المعالجات الجديدة والتي يتم استعمالها في أجهزة الحاسب الشخصية وبالتالي فان البرامج التي تعمل على المعالجين 8086 و 8088 مازالت صالحة للعمل في المعالجات الجديدة وهو ما أسميناه بالتوافقية في البرامج.
المعالجان 80186 و 80188
يعتبر المعالجان 80186 و 80188 تطويراً للمعالجين 8086 و 8088 وذلك عن طريق تنفيذ كل التعليمات التي كانت مستخدمة في المعالجات القديمة بالإضافة إلي بعض الأوامر المختصة بالتعامل مع بعض الوحدات المساعدة Support Chips.كذلك تمت إضافة بعض الأوامر الجديدة وهى ما تسمى بال Extended Instruction. وعموماً لـم يتم استعمال المعالجين في الأجهزة بصورة كبيرة وذلك نسبة لعدم وجود فارق كبير عن سابقيهما بالإضافة إلى ظهور المعالج الجديد 80286 في الأسواق.
المعالج 80286 :-
تم طرح المعالج 80286 في سنة 1982 م وهو معالج يتعامل مع كلمة بطول 16 Bits ولكنه أسرع بكثير من المعالج 8086 حيث تصل سرعته إلي 12.5 MHZ وذلك مقارنة مع 10 MHZ للمعالج 8086. كذلك تميز المعالج 80286 بالمزايا التالية :-
1 - نمطين للأداء Two Modes Of Operations
المعالج 80286 يمكنه العمل في نمطين وهما النمط الحقيقي Real Mode والنمط المحمى Protected Mode.
في النمط الحقيقي يعمل المعالج 80286 كمعالج من النوع 8086 وبالتالي فان البرامج التي تمت كتابتها للمعالج 8086 تعمل في هذا النمط بدون أي تعديل.
أما في النمط المحمى فانه يمكن أن يتم تشغيل أكثر من برنامج في وقت واحد Multi_Tasking وبالتالي يلزم حماية كل برنامج من التعديل بواسطة برنامج آخر يعمل في الذاكرة في نفس الوقت وذلك بتخصيص منطقة محددة من الذاكرة لكل برنامج على حدة ومنع البرنامج من التعامل مع مناطق الذاكرة التي تخص البرنامج الآخر.
2 - ذاكرة أكبر :-
يمكن للمعالج 80286 التخاطب مع ذاكرة تصل إلي 16 MByte وذلك في النمط المحمى (مقابل 1 MBYTE للمعالج 8086 ).
3 - التعامل مع الذاكرة الافتراضية :-
حيث يتم ذلك في النمط المحمى وذلك بإتاحة الفرصة للمعالج للتعامل مع وحدات التخزين الخارجية لتنفيذ برامج كبيرة تصل لـ 1 GBYTE (لاحظ أن أقصى قيمة للذاكرة هي 16 MBYTE فقط) وسيتم التحدث عن هذه الطريقة بالتفصيل في مادة نظم التشغيل.
المعالج 80386 :-
في عام1985 تم إنتاج أول معالج يتعامل مع كلمة بطول 32 BITS وهو المعالج 80386 وهو أسرع بكثير من المعالج 80286 وذلك لمضاعفة طول الكلمة (من 16_BIT إلى32_BIT) ونسبة للسرعة الكبيرة التي يتعامل بها المعالج والتي تصل إلي 40 MHZ فإنه يقوم بتنفيذ عدد كبير من الأوامر في عدد أقل من عدد النبضات التي يستغرقها المعالج 80286.
يستطيع المعالج 80386 التعامل مع النمط الحقيقي والنمط المحمى حيث يعمل في النمط الحقيقي كالمعالج 80386 وفي النمط المحمى كالمعالج 80286. ذلك بالإضافة إلي نمط جديد يسمى بالنمط الافتراضي للمعالج 8086 (VIRTUAL 8086 MODE ) وهو نمط مصمم لجعل أكثر من برنامج من برامج المعالج 8086 تعمل في الذاكرة في وقت واحد.
يستطيع المعالج 80386 التعامل مع ذاكرة يصل حجمها إلي 4 Gbytes وذاكرة افتراضية يصل حجمها إلى 64 T BYTES.
توجد كذلك نسخة رخيصة من المعالج تسمى 80386SX وهى تحتوى على نفس الشكل الداخلي للمعالج 80386 ولكنها خارجيا تتعامل مع 16 BITS .
المعالج80486 :-
في عام 1989 ظهر المعالج 80486 وهو عبارة عن نسخة سريعة من المعالج 80386 حيث يحتوى على كل مزايا المعالج 80386 بالإضافة للسرعة الكبيرة وتنفيذ الكثير من الأوامر المستخدمة بكثرة في نبضة واحدة فقط كذلك احتوائه على المعالج المساعد 80387 والمختص بالعمليات الحسابية التي تحتوى على أعداد حقيقية حيث كانت هذه العمليات تستغرق وقتاً طويلاً من المعالج 80386 مما تطلب وجود المعالج 80387 والذي يسمي بالمعالج المساعد الرياضي Math. Co_Processor وقد تم دمج هذا المعالج مع المعالج 80386 بالإضافة إلي ذاكرة صغيرة تسمي بالـ Cache Memory (وهي ذاكرة ذات زمن وصول صغير جداً ويتم استخدامها كوسيلة لتبادل البيانات بين الذاكرة العادية والمعالج الدقيق)وحجمها 8 Kbytes.
يعتبر المعالج 80486 أسرع من المعالج 80386 والذي يعمل على نفس التردد بحوالي ثلاث مرات. هذا بالإضافة إلي أن المعالج 80486 يعمل على ترددات (سرعات) عالية جداً تصل إلي 100 M Hz.
أما المعالج 80486SX فهو كالمعالج 80486 تماماً من حيث العمل الداخلي فيما عدا أنه لا يحتوي على معالج رياضي داخله. وقد ظهرت عدة إصدارات من المعالج 80486 ولكن لا توجد اختلافات جوهرية كبيرة بينها والمجال هنا لا يتسع لذكرها.
المعالج Pentium
المعالج Pentium هو آخر إصدارات شركة Intel وهو أول معالج يتعامل مع كلمة بطول 64 Bits بالإضافة إلي السرعة العالية جداً التي يعمل بها مقارنة بالمعالج 80486 هذا بالإضافة إلي زيادة حجم الذاكرة الداخلية Cache Memory.
وقد ظهرت إصدارات مختلفة للمعالج Pentium ازدادت فيها سرعة المعالج وتمت إضافة إمكانات إضافية إليه فيها مثل MMX والذي يمتاز بأن به أوامر للتعامل مع الوسائط المتعددة.
التركيب الداخلي للمعالج 8088 والمعالج 8086
في هذا الجزء سيتم التعرف على التركيب الداخلي للمعالج وذلك عن طريق التعرف على المسجلات المختلفة الموجودة داخل المعالج ووظيفة كل مسجل وسيتم في الأجزاء التالية مناقشة الأوامر المختلفة التي يتم استخدامها في التعامل مع المعالج. ونسبة لتوافقية البرامج التي تم الحفاظ علىها في المعالجات الجديدة سنجد أن هذه التعليمات يمكن استخدامها مع المعالجات الحديثة وحتى الـ Pentium.
المسجلات
يتم تخزين البيانات داخل المعالج في المسجلات، ويتم تقسيم المسجلات إلى:
مسجلات بيانات: ويتم فيها التعامل مع البيانات من حيث التخزين وإجراء العمليات الحسابية والمنطقية.
مسجلات عناوين: ويتم فيها تخزين العناوين المختلفة.
مسجل الحالات: وهو يحتوي على حالة المعالج بعد تنفيذ أمر محدد.
ويحتوي المعالج على عدد 14 مسجل وسنقوم في الجزء التالي بتوضيح أسماء ووظيفة كل مسجل.
مسجلات البيانات DX,CX,BX,AX
يتم استخدام هذه المسجلات الأربعة في التعامل مع البيانات داخل المعالج و يمكن للمبرمج التعامل مباشرة مع هذه المسجلات. وبالرغم من أن المعالج يستطيع أن يتعامل مع بيانات في الذاكرة إلا أن التعامل مع المسجلات يكون أسرع بكثير من التعامل مع الذاكرة (يلزمه عدد اقل من النبضات) وبالتالي نفضل دائماً التعامل مع المسجلات لسرعتها. وهذا سبب زيادة عدد المسجلات في المعالجات الحديثة.
يمكن التعامل مع كل من هذه المسجلات على أنه وحده واحدة بحجم 16-BITS أو على وحدتين كل واحدة بسعة 8-BITS إحداهما العليا HIGH و الثانية المنخفضة LOW مثلا يمكن التعامل مع المسجل AX على انه مسجل بحجم 16-BITS أو التعامل مع النصف العلوي (HIGH) AH على انه مسجل 8-BITS و المسجل المنخفض AL (LOW) على أنه مسجل .8-BITS وبالمثل مع المسجلات D,C,B و بالتالي يصبح لدينا 8 مسجلات من النوع 8-BITS أو أربعة مسجلات من النوع 16-BITS.
بالرغم أن المسجلات الأربعة ذات استخدامات عامه GENERAL PURPOSE REGISTERS بحيث يمكن استخدامها في أي استخدامات عامه إلا أن لكل مسجل استخداماً خاصاً نتناوله في الجزء التالي:
1-المسجل (Accumulator) AX
يعتبر المسجل AX هو المسجل المفضل للاستخدام في عمليات الحساب و المنطق و نقل البيانات و التعامل مع الذاكرة و موانئ الإدخال و الإخراج. و استخدامه يولد برامج اقصر ويزيد من كفاءة البرنامج. حيث يجب مثلا في عمليه ضرب رقمين وضع أحد الرقمين فيه مع وضع القيمة المطلوب إخراجها إلي ميناء خروج محدد فيه ثم تتم قراءه القيمة التي يتم إدخالها من ميناء خروج محدد فيه دائما. وعموما يتم التعامل مع المسجلAX على أنه أهم المسجلات الموجودة في المعالج.
2-المسجل (Base Register) BX
يستخدم المسجل BX في عنونه الذاكرة حيث تتطلب بعض العمليات التعامل مع الذاكرة بمؤشر محدد ويتم تغيير قيمه المؤشر لإجراء عمليه مسح لجزء محدد من الذاكرة كما سنرى فيما بعد.
3-المسجل (Count Register) CX
يتم استخدام المسجل CX كعداد للتحكم بعدد مرات تكرار مجموعه محدده من التعليمات.كذلك يتم استخدامه في تكرار عمليه دوران مسجل لعدد محدد من المرات.
4-المسجل (Data Register )DX
يتم استخدامه في عمليات الضرب والقسمة كذلك يتم استخدامه كمؤشر لموانئ الإدخال والإخراج عند استخدام عمليات الإدخال والإخراج.
مسجلات المقاطع CS, DS, SS, ES

اتوقع انه هذه مشابهة لأكواد الهندسة

فهذا هو الأسآس
يتم استخدام هذه المسجلات لتحديد عنوان محدد في الذاكرة. ولتوضيح وظيفة هذه المسجلات يجب في البداية توضيح طريقة تنظيم الذاكرة.
نعلم أن المعالج 8088 يتعامل مع 20 إشارة عناوين ( ناقل العناوين Address Bus يحتوي على 20 إشارة) وبالتالي يمكن مخاطبة ذاكرة تصل إلى 220 = 1,048,576 أي 1 Mbytes.
ونجد أن عناوين أول 5 خانات في الذاكرة هي :
00000 h = 0000 0000 0000 0000 0000
كما اخبرتكم سابقا بأن الحاسب لايعرف سوى 0 و1 >> 00001 h = 0000 0000 0000 0000 0001
00002 h = 0000 0000 0000 0000 0010
00003 h = 0000 0000 0000 0000 0011
00004 h = 0000 0000 0000 0000 0100
ولأن العناوين في الصورة الثنائية تكون طويلة جداً فمن الأسهل التعامل مع العناوين بكتابتها في الصورة السداسية عشر وبالتالي يكون عنوان أول خانة في الذاكرة هو 00000h وعنوان آخر خانة هو FFFFFh.
مما سبق يتضح أن العنوان يتكون من 20 خانة بينما كل المسجلات الموجودة داخل المعالج ذات طول مقداره 16 خانة فقط مما يجعل مخاطبة الذاكرة كلها مستحيلة باستخدام مسجل واحد فقط ( لاحظ أن المسجل الواحد باستطاعته مخاطبة ذاكرة تصل إلي 64 Kbytes فقط ) ونتيجة لظهور هذه المشكلة تم تقسيم الذاكرة إلي مجموعة من المقاطع Segments كل مقطع بسعة 64 K Bytes كما سنوضح في الجزء التالي.
مقاطع الذاكرة
مقطع الذاكرة هو جزء متصل بطول 216 = 64 Kbytes وكل مقطع في الذاكرة يتم تحديده برقم محدد يسمي رقم المقطع Segment Number وهو رقم يبدأ بالرقم 0000h وينتهي بالرقم FFFFh.
بداخل المقطع يتم تحديد العنوان بواسطة إزاحة محددة Offset وهذه الإزاحة عبارة عن بُعد الموقع المحدد من بداية المقطع وهو رقم بطول 16 Bytes أي تتراوح قيمته بين الرقمين 0000h و FFFFh.
وبالتالي لتحديد عنوان محدد في الذاكرة يجب توضيح قيمة كل من المقطع والإزاحة وبالتالي تتم كتابة العنوان على الصورة:
Segment : Offset
وهو ما يسمي بالعنوان المنطقي Logical Address فمثلاً العنوان AABB:5566 يعني الإزاحة 5566 داخل المقطع AABB.
للحصول على العنوان الفيزيائي يتم ضرب قيمة المقطع في الرقم 16 ( إزاحته لليسار بمقدار أربعة خانات ثنائية أو خانة واحدة سداسية عشر) ويتم بعد ذلك إضافة قيمة الإزاحة إليه وبالتالي فإن العنوان الفيزيائي المناظر للعنوان AABB:5566 هو:
1 1 1
0 B B A A
6 6 5 5 +
(العنوان الفيزيائي بطول 20 خانة) 6 1 1 0 B =
وبالتالي يصبح العنوان الفيزيائي = رقم المقطع × 16+ قيمة الإزاحة = B0116
مواضع المقاطع LOCATIONS OF SEGMENTS
يتضح مما سبق أن المقطع الأول في الذاكرة يبدأ بالعنوان 0000:0000 أي 00000 وآخر عنوان داخل المقطع هو العنوان 0000:FFFF أي العنوان 0FFFF بينما يبدأ المقطع الثاني في العنوان 0001:0000 أي العنوان 00010 وينتهي بالعنوان 0001:FFFF أي العنوان 1000F. وكما نرى فإن هناك كثيراً من التداخل في المقاطع داخل الذاكرة. الشكل(1) يوضح الذاكرة وعناوين المقاطع المختلفة بداخلها:
محتويات الذاكرة العنوان
45 1001F نهاية المقطع رقم 2
……..
45 1000F نهاية المقطع رقم 1
……..
35 0FFFF نهاية المقطع رقم 0
……..
29 00020 بداية المقطع رقم 2
76 00010 بداية المقطع رقم 1
54 00000 بداية المقطع رقم 0
الشكل ( 1 )
في الشكل(1) يتضح أن المقطع يبدأ بعد كل 16 خانة في الذاكرة. وعلى ذلك تسمى كل 16 خانة في الذاكرة بفقرة Paragraph. ويسمى أي من العناوين التي تقبل القسمة على العدد 10h بحدود الفقرات Paragraph Boundaries.
ولأن هنالك تداخلاً في القطاع فان تحديد العنوان الفيزيائي قد يتم بأكثر من طريقة أي عن طريق اكثر من تشكيلة في عنوان المقطع وعنوان الإزاحة. والأمثلة التالية توضح ذلك :
مثال :- قم بتحديد قيمة الإزاحة المطلوبة لتحديد العنوان 1256A وذلك في :
أ- القطاع 1256 ب- القطاع 1240
الحل :
يتم استعمال المعادلة : العنوان = المقطع *16 + الإزاحة
أ- افترض أن قيمة الإزاحة المطلوبة X بالتعويض في المعادلة نجد أن
X +10h*1256 = 1256A
X +12560 = 1256A
X = 000A
وبالتالي فان العنوان هو 1256:000A
ب – بإتباع نفس الطريقة التي اتبعناها في الجزء السابق
افترض أن قيمة الإزاحة المطلوبة X بالتعويض في المعادلة نجد أن
X +10h *1240 = 1256A
X +12400 = 1256A
X = 016A
وبالتالي فان العنوان هو 1240:016A
أي أن العنوانين يشيران إلي نفس العنوان في الذاكرة
1256A = 1256:000A = 1240:016A
من الممكن أيضاً معرفة رقم المقطع بمعرفة العنوان الفيزيائي وقيمة الإزاحة كما في المثال التالي :
مثال
ما هو عنوان المقطع لتحديد العنوان 80FD2h إذا كانت الإزاحة تساوي 8FD2h
باستعمال المعادلة : العنوان = المقطع *16 + الإزاحة، نجد أن
80FD2h = قيمة مسجل المقطع * 10h + BFD2h
قيمة مسجل المقطع = 7500h
بعد توضيح عملية تقسيم الذاكرة لمقاطع مختلفة يمكننا الآن شرح عمل مسجلات المقاطع المختلفة، حيث يتكون البرنامج من مجموعة من الأوامر بالإضافة إلي مجموعه من المتغيرات هذا بالإضافة إلي الحاجة لاستخدام مكدس البيانات Stack والذي سنوضح طريقة استخدامه وعمله لاحقاً.
يتم وضع البرنامج في مقطع البرنامج Code Segment ووضع البيانات في مقطع البيانات Data Segment وكذلك المكدس حيث له مقطع المكدس Stack Segment ولدينا مقطع إضافي يسمي بالـ Extra Segment.
مسجل مقطع البرنامج Code Segment Register (CS)
يحتوي هذا المسجل على عنوان مقطع البرنامج Code Segment Address حيث يتم تحديد مقطع محدد في الذاكرة يتم وضع البرنامج فيه، بعد ذلك يلزم تعريف ذلك العنوان للمعالج حيث سيتم تنفيذ البرنامج؛ لذلك يجب تحديد عنوان هذا المقطع ووضعه في مسجل خاص يسمي بمسجل مقطع البيانات Code Segment Register (CS) ويتم تحديد قيمة الإزاحة باستخدام مسجل مؤشر التعليمات Instruction Pointer والذي سيتم التحدث عنه لاحقاً.
مسجل مقطع البيانات Data segment Register (DS)
يحتوي هذا المسجل على عنوان مقطع البيانات Data Segment Address حيث يتم تعريف البيانات التي يتعامل معها البرنامج في منطقة محددة من الذاكرة ( وتسمي مقطع البيانات ) ويتم تحديد عنوان هذا المقطع ووضعه في المسجل DS. بعد ذلك يمكن مخاطبة الذاكرة والتعامل مع المتغيرات المختلفة باستخدام مسجلات أخري تحوي قيمة الإزاحة المطلوبة.
مسجل مقطع المكدس Stack Segment Register (SS)
يتم تحديد جزء من الذاكرة والتعامل معه كمكدس حيث يعمل المكدس بطريقة (Last In First Out ( LIFO )ويتم استعماله في مجموعة من العمليات أهمها عملية النداء لبرامج فرعية كما سنرى لاحقاً ويتم استعمال مجموعة المسجلات لتحوي قيمة الإزاحة ومن أهمها مؤشر المكدس Stack Pointer (SP).
مسجل المقطع الإضافي Extra Segment Register (ES)
ويتم استخدام هذا المسجل لتحديد ومخاطبة مقطع إضافي حيث تلزم في بعض الأحيان عملية مخاطبة أكثر من مقطع في وقت واحد ( مثل نقل كمية من البيانات في الذاكرة من مكان محدد لمكان آخر في مقطع بعيد وبالتالي لا يكفي مسجل البيانات فقط ولكن نحتاج لمسجل إضافي لتحديد المقطع الآخر فيتم استعمال المقطع الإضافي ( ES ).
مسجلات المؤشرات والفهرسة Index and Pointer Registers (SP, BP, SI, DI)
يتم استخدام هذه المسجلات مع مسجلات المقاطع التي تحدثنا عنها في الجزء السابق للتخاطب مع عناوين محددة في الذاكرة، وعكس مسجلات المقاطع يمكن إجراء عمليات الحساب والمنطق على هذه المسجلات.
مؤشر المكدس Stack Pointer (SP)
يتم استخدام هذا المسجل مع مقطع المكدس وسيتم التحدث بالتفصيل عن المكدس في الفصول القادمة.
مؤشر القاعدة Base Pointer (BP)
يتم استخدام هذا المسجل أساساً للتخاطب مع البيانات الموجودة في المكدس ولكنه عكس مؤشر المكدس حيث يمكن استخدامه لمخاطبة الذاكرة في مقاطع أخري غير مقطع المكدس.
مسجل فهرسة المصدر Source Index (SI)
يستخدم هذا المسجل في مخاطبة الذاكرة في مقطع البيانات حيث يقوم بالإشارة إلي بداية ( أو نهاية) منطقة محددة من الذاكرة مطلوب التعامل معها؛ وبتغيير قيمة هذا المسجل في كل مرة يتم التعامل مع كل هذه المنطقة من الذاكرة.
مسجل فهرسة المستودع Destination Index (DI)
هذا المسجل يستخدم مثل مسجل فهرسة المصدر SI حيث يشير هذا المسجل إلي عنوان الذاكرة الذي سيتم تخزين البيانات فيه ويتم ذلك عادة باستخدام المقطع الإضافي ES وهناك مجموعة من الأوامر التي تتعامل مع النصوص والتي تفترض أن عنوان المصدر وعنوان المستودع يتم تحديدهما في هذين المسجلين.
مؤشر التعليمات أو الأوامر Instruction Pointer (IP)
كل المسجلات التي تحدثنا عنها حتى الآن يتم استخدامها في مخاطبة البيانات المخزنة في الذاكرة. لمخاطبة البرنامج يلزم المعالج معرفة عنوان أول أمر في البرنامج المطلوب تنفيذه، بعد ذلك يقوم المعالج بتحديد عنوان الأمر التالي ويستمر في تنفيذ البرنامج.
يتم تخزين الإزاحة للأمر المطلوب تنفيذه في مؤشر التعليمات أو الأوامر Instruction Pointer (IP) حيث يتم ذلك في مقطع البرنامج Code Segment وبالتالي فإن عنوان الأمر المطلوب تنفيذه هو CS:IP. ولا يمكن مخاطبة مؤشر التعليمات مباشرة من داخل البرنامج وإنما يتم تغيير قيمته بطريقة غير مباشرة مثل حالات التفرع إلي عنوان محدد حيث يتم وضع قيمة ذلك العنوان في مؤشر التعليمات وذلك في حالة حدوث عملية التفرع.
مسجل البيارق Flags Register
يحتوي هذا المسجل على مجموعة من البيارق ( الأعلام) وهي نوعان: بيارق الحالة وبيارق التحكم. بالنسبة لبيارق الحالة فهي توضح حالة المعالج بعد تنفيذ كل عملية لتوضيح حالة النتيجة حيث يمكن عن طريق هذه البيارق معرفة النتيجة ( مثلاً إذا كان بيرق الصفر قد تم رفعه فمعنى ذلك أن نتيجة آخر عملية تساوي صفر ) وبالتالي يمكن اختبار البيارق المناسبة واتخاذ القرارات المناسبة. أما بيارق التحكم فيتم استعمالها لإخطار المعالج بالقيام بشيء محدد مثلاً يمكن استخدام بيرق المقاطعة Interrupt Flag ووضع القيمة صفر فيه وبالتالي فإننا نطلب من المعالج أن يتجاهل نداءات
المقاطعة الواردة إليه من لوحة المفاتيح مثلاً ( أي لا يتم استقبال مدخلات من لوحة المفاتيح ) وسيتم التحدث عن هذه البيارق بالتفصيل لاحقاً.
تنظيم الذاكرة في الحاسب الشخصي Memory Organization
يتعامل المعالج 8088 مع ذاكرة بطول 1Mbyte.ولا يمكن استخدام كل الذاكرة في البرامج التي يتم كتابتها ولكن هناك مناطق في الذاكرة محجوزة لأغراض محددة فمثلا لدينا الجزء الأول من الذاكرة بطول 1KByte محجوز لعناوين نداءات المقاطعة Interrupt Vector Table كذلك هناك أجزاء مخصصة لبرامج النظام الأساسي للإدخال والإخراج BIOS والذي يقوم بعمليات الإدخال و الإخراج في الجهاز؛ و يتم تخزينه داخل ذاكرة قراءة فقط ROM (READ ONLY MEMORY) وهو الذي يقوم ببدء تشغيل الجهاز في المرحلة الأولى.
كذلك توجد منطقة في الذاكرة مخصصة لوحدة العرض الشاشة (VIDEO DISPLAY MEMORY).
موانئ الإدخال والإخراجI/O PORTS
يتعامل المعالج 8088 مع 64KB من عناوين الإدخال والإخراج وذلك للتعامل مع الأجزاء الإضافية والخارجية. وعموما لا يفضل التخاطب مع موانئ الإدخال والإخراج مباشرة إلا في بعض الحالات الخاصة وذلك بسبب احتمال تغير العناوين في بعض الأجهزة ويفضل أن يتم التعامل مع الأجهزة عن طريق نداءات لنظام التشغيل ليقوم هو بهذه المهمة.
أعلم انه موضوع طويل جدآ ولكن سوف تستفيديون منه كثيرا وسوف أرفق لكم كتاب بسيط ومفيد للغة الاسمبلي

عقبال ماتطلعون مبرمجين اسمبلي تخترع لك كود برايفت يدعس كل الحمايات

وخلهـ لك

----------------------------------------------------------------------------------------------------------------------------
والان نأتي الى الى الغات الأخرى عندمآ تريد ان تتعلم لغة برمجية سواء اذا كان هدفك اكتشاف ثغرات وأخطاء
فيجب عليك انت تتعلم من الأسهل فالأصعب وان تكون ميقناِ تماما بأن لغات البرمجة مترابطة بعضها مثال
كود html
<html>
<head>
<title>Mr.ErHaP</title>
</head>
<body bgcolor="000000">
<p><center><b><h1><font color="#a00020">موقعي الشخصي -عمار<font color="#a00080">ErHaP</font></h1></b></center></p>
<p align = center><img src=<p align = left><img src=http://www.up-00.com/s1files/47I40588.jpg></p>
</body>
</html>
لغة html لغة تصميم ! وانت لاتريد ان تصمم تريد ان تكتشف ثغرات ولكن هل فكرت قليلا بأنك يمكن ان تحقق هدفك بنائا على أنها لغة برمجية ولابد من جودك أخطاء برمجية تمكنك من وضع رابط سيرفرك ! واعطاء الرابط للضحية ويتم اختراقة
وتكون الثغرة برايفت ! لك انت فقط ! وبعدها تعلم php
كودphp
<php
echo "3maar"
<?
الان سوف اربط لك بين لغة html ولغة php لغة html هي في الاساس لغة تصميم ولغة php لغة تحتوي على خواص الجمع والطرح وهكذا وايضا التصميم فلذلك يجب ان تكون ملما بلغة html بل متقنا لها لأنك سوف تواجه أكود مكتوبة بلغةhtml في رحلة تعلمك php ...
بالنسبة للذين يريدون تعلم لغة php ومن ثم اكتشاف ثغرات أمنية تمكنهم من رفع شل او جلب الباس واليوزر سوف أقوم بشرح طريقة مختصرة جدا عنها
أولا يجب عليك ان تتعلم لغة php
وثبت بجهازك السيرفر الشخصي الاصدار الخامس
وتثبت محرر php
والان يأتي دورنا كيف نكتشف ؟؟ هل تعلم أن جميع المنتديات محمية بواسطة سكربتات وان السكربت يمكن ان يكون مكتوب بلغة php او الجافا سكربت .. فيجب عليك أولا تثبيت السكربت بجهازك ( السيرفر الشخصي ) ومن ثم
فحص ملفاته وتوجد طريقة لتثبيت السكربتات وبرامج ولكن لن أقوم بشرحها لأن من شروط الاستضافة على حسب علمي عدم وضع قسم خاص باختراق المواقع وهذا يآأحبآبي قد انتهينآ وسوف ارفق لكمر روابط للتعلم php
وللتعلم لغة الاسمبلي [COLOR]
-------------------------------------------------------------------------------------------------------------------------------- توضيح بسيط ( حينما نتحدث عن الهكر الحقيقي ) أقصد بهآ هو أن الهكر الحقيقي من يتعلم لغات البرمجة ويقوم
باكتشاف الاخطاء واستغلالها وحمايتها لذلك تكلم بالموضوع عن كذا لغة من لغات البرمجة
أرجو التقيــم
khleel0909