• 0
Nokia_2006

الملفات التنفيذية ؟

سؤال

السلام عليكم اصدقائى

انقطع اتصالى بالمنتدى لمدة قصيرة بسبب الامتحانات ولكن انتهت الان منذ يومين

لكن اصدقائى انا تعبت جدا من شىء اسمه بنية الملفات التنفيذية

ياريت لو احد منكم يتكرم ويشرح لى هذا الموضع بطريقة اوضح من الطرق الذى قدمتموها يعنى بذكر امثلة

ما الافكار الذى لابد ان اضعها فى الاعتبار عند بناء ملف تنفيذى

ارجوكم ساعدونى فى هذا الموضوع ولا تقولو لى انه مكرر لانى بجد مش عارف اوصل لحل

سوال منفصل :

وكيفية كتابة التعليمات بلغة الالة هل يتم كتابتها بدون فواصل ام كل تعليمة بلغة الالة داخل سطر

هكذا

01010111110000100010010011011110011010111101110111110011001001111

ام هكذا

0011 0110 1111 1101 111001 11100 11 1001 111 0 11 00 1 1 1 1 1

وهل بطريقة كل 4 بت منفصلة عن الاخرى

ام كل 8 بت منفصلة ام كلها وراء بعضها والمعالج يقسمها بطريقته

هاتين هما المشكلة الذى تواجهنى الان

تم تعديل بواسطه Nokia_2006
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

88 إجابة على هذا السؤال .

  • 0

اعتقد اننى قطعت 75 % من مشوار بناء مترجم حقيقى

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الا تريد ان تكمل الموضوع اخ محمد

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

لا تستخدم NotePAD، لا يمكنك كتابة بعض bytes به، ايضا هة يضيف 2 bytes لنهاية السطر والرجوع

لم أفهم هذه النقطة تماما يعني هل تقصد أخ محمد عبد العزيز بقولك"لا يمكنك كتابة بعض bytes به"الرموز في شفرة الآسكي

ما قبل الرقم الست عشري 20 وأرجو التوضيح بالنسبة ايضا إلى "هة يضيف 2 bytes لنهاية السطر والرجوع"

فيا ليت التوضيح من الأعضاء

آسف أخي Nokia_2006 على قطع سلسلة موضوعك بسؤالي هذا

وشكرا للجميع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يا حمادة الله يرضى عليك ابتعد عن 1000 1001 / 1100 0000

فقط ارفق ملفك و نكمل، حتى نصل لبناء ملف تنفيذي يدويا

و في الأخير ستفهم كل شيئ

و كما قلت لك اكثر من مرة لا تكثر الاسئلة حتى لا يختلط الأمر و يتحول لأشياء اخرى

الهدف: كتابة ملف exe خطوة خطوة

ارفق ملفك و ستفهم OpCode

اعد قرائة ما مكتوب ياحمادة

أخي AND

هناك bytes لا تظهر لو كتبت في NotePad

جرب فتح ملف تنفيذس EXE بNotePAD غير فيح حرف واحد او حرفين فقط

اعد حفظه باسم جديد ولا حظ الفرق بين الملفين

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

شكرا جزيلا أخي محمدعبد العزيز على سرعة الرد

جرب فتح ملف تنفيذس EXE بNotePAD غير فيح حرف واحد او حرفين فقط

اعد حفظه باسم جديد ولا حظ الفرق بين الملفين

جربت هذا الأمر من زمان حينما كنت أقوم بالعبث داخل ملفات exe عن طريق الNotepad وأتفاجأ بأن الملف لايعمل

بعد حفظ التعديلات عليه وكانت النتيجة أن الNotepad يقوم بتغيير الرقم الست عشري "00h" إلى الرقم الست عشري "20h"

حين تعديل أي ملف يحمل القيمة "00h" وبهذا فسرت سبب عطب الملف exe بعد تعديله بال Notepad.

كما أن الملف المعدل لا يتغير حجمه أبدا ولهذا تساءلت عن قولك "ايضا هة يضيف 2 bytes لنهاية السطر والرجوع"

ويا ريت تقول ما هي ال bytes التي لا تظهر لو كتبت في NotePad.

وشكرا لك مرة أخرى لتحملك أسئلتنا.

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يا حبيب قلبى ( اخ محمد عبد العزيز ) لوسمحت انا فهمت طبيعة الملف com. وexe. ذات توقيع MZ بايت بايت

الان

ارايد ان ابداء خطوة اخرى وهى بناء exe. باستخدام توقيع PE وSECTION teable

لانى مش عارف اترجم المصطلحات الاجنبية الموجودة بمقدمة الملف PE

انا اشكرك جدا للتفاعلك معى

--------------------

اخ AND

******* عزيزى الموضوع انه لايمكنك كتابة شفرة داخل النوت باد

قم بكتابة ملفاتك من خلال انشاء ملف عن طريق الاسمبلى int 21h او الموشر FILE * VAR_name فى لغة السى

**************

اولا بالنسبة للنوت باد

**************

[ الNotepad يقوم بتغيير الرقم الست عشري "00h" إلى الرقم الست عشري "20h"]

هو يقوم بقراءة كل حرف على انه بايت

اما رمز الهكس 3dh مثلا فيقرءه بهذه الطريقة 3 يعتبرها بايت وحرف d يعتبره بايت اخر وحرف H يعتبر بايت اخر

اذا قراءت 3d فهو يمثل بايت كامل لان كل حرف منه يمثل 4 بت وليس بايت ان ان الرمزين معا يمثلان بايت واحد

لكن النوت باد ياخذ القيم ويغيرها الى ما يقابلها بالقيمة ASCII

وضحت الفكرة

اما بالنسبة للاضافة 2 بايت لنهاية السطر فهذا الامر يضيفه النوت باد تلقائيا عندما تقوم بالضغط على الزر enter فينتقل لسطر جديد فيقوم بكتابة 2 بايت كدليل لوجود سطر جديد بعد جملة او عبارة حرفية معينة مكتوبة بداخله

وليس من خلال النوت باد لانه سيقوم بحفظ الحروف والرموز على اساس شفرة الاسكى وليس hex number توضيح بسيط اتمنى تكون فهمت ما اقصد

تم تعديل بواسطه Nokia_2006
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخى محمد عبد العزيز

الا تريد ان نكمل الموضوع ام لا

انتظر ردك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
اخى محمد عبد العزيز

الا تريد ان نكمل الموضوع ام لا

انتظر ردك

يا حمادة الله يرضى عليك ابتعد عن 1000 1001 / 1100 0000

فقط ارفق ملفك و نكمل، حتى نصل لبناء ملف تنفيذي يدويا

و في الأخير ستفهم كل شيئ

و كما قلت لك اكثر من مرة لا تكثر الاسئلة حتى لا يختلط الأمر و يتحول لأشياء اخرى

الهدف: كتابة ملف exe خطوة خطوة

ارفق ملفك و ستفهم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حمادة .. اسمع كلام محمد عبد العزيز .. الرجل جزاه الله خير يمشي معاك خطوة خطوة ..

انت الان تريد ان تتعلم, و هو تبرع لكي يعلمك, اذا, اعتبر نفسك تلميذه و هو استاذك, و تعامل على هذا الأساس.

اسمع كلام الاستاذ .. اذا كنت تريد التعلم.

اسمع الكلام و لا تعاند و لا تكابر.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخ محمد الله يباركلك..بجد نعم المثال للمعلم...ربنا يزيدك.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

:angry: يا شباب ماذا حدث لبقية الموضوع

إذا كان حمادة لا يريد المتابعة كلنا نريد المتابعة

(أم أنت يا أخي محمد لا تريدها ؟؟؟؟؟؟ا)

يا أخي تابع هذا الموضوع ففيه الفائدة بإذن الله :rolleyes:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
:angry: يا شباب ماذا حدث لبقية الموضوع

إذا كان حمادة لا يريد المتابعة كلنا نريد المتابعة

(أم أنت يا أخي محمد لا تريدها ؟؟؟؟؟؟ا)

يا أخي تابع هذا الموضوع ففيه الفائدة بإذن الله :rolleyes:

السلام عليكم

الاخ حمادة اعلن نيته في عدم متابعة الموضوع

ولا اريد المتابعة لوحدي كانني اتحدث مع نفسي

او كنت تريد المتابعة اخبرني ايت توقفت ثم نتابع...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وعليكم السلام

بصراحة لي الشرف أن أتابع معك :D

ولكن أريد المتابعة بلغة c++

مع أنني مبتدئ فيها و لكن أحسن من c (مارأيك)

ولدي بعض الأسئله :

التعليمة التالية تطبع في الملف d :

fprintf(p,"d");

التعليمة التالية تطبع في الملف 64 :

fprintf(p,"%x",'d');

وأنت قلت لحمادة أن يطبع d وحسب فهل قصدت الأولى

ثم قلت أن يطبع

و داخل الملف بدلا من كتابة الحرف d اكتب C3 بالهكس في لغة C

فهل قصدت التعليمة

fprintf(p,"%x",'c3');

(ملاحظة أنا مبيدئ في c ++ وأتمنى أن تتحملني :lol: )

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

بالنسبة لسؤال الطباعة فكان فقك للأكد من معرفة التعامل مع الملفات

المهم بما انك اخترت fprintf

كان المطلوب هو طباعة حرف d في ملف نصي...

fprintf(p,"%c","d");

ثم تغييره ليكتب c3 بالهكس في لغة c/c++ نكتب 0xc3 يصبح الامر

fprintf(p,"%c",0xc3);

طبعا لاحقة الملف المنشئ .com

في حالتنا ملف تنفيذي به امر واد هو Ret اي c3

يقوم نظام التشغيل بتحميل ملفنا للذاكرة ثم تنفيذه

ينفذ الامر Ret وهو الرجوع، في حالتنا الرجوع للنظام

حتى الأن هل الأمر مفهوم ؟

لكي نكمل ونظيف اوامر اخرى لملفنا التنفيذي .com ولتكن مثلا طباعة كلمة ArabTeam2006

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نعم الأمر مفهوم

يا أخي محمد التعليمة

fprintf(p,"%c",0xc3);

فأعطت المطلوب(تفحصتها على الdebug)

مارأيك :D

الملف المرفق

AHMAD_asm.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا للمشرفين عل تبديل الرابط الخاطئ و التعليمة

يا أخي محمد وضعت 90 90

ثم استبدلتها ب cd10

النائج برنامج يمسح الشاشة (cls)

صحيح

الملف المرفق(أرجو من المشرفين عدم حزف الروابط التالية إظن أنها ستشكل التسلسل التعليمي بإذن الله)

AHMAD_asm.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخ احمد حذفت الرابط بسبب الخطاء السابق، وقمت بتحرير المشاركتين

وقم بتسمية الملف باضافة رقم مثلا ahmed_asm2 ثم asmed_asm3 وهكذا...

حتى الأن جيد

وصح cls مسح الشاشة

نكمل

نريد ان ننشئ ملف يكتب نص او كلمة مثلا ArabTeam

هناك لطباعة نص على الشاشة و ذساستخدم نفس المثال الموجود في موضوع سابق

اظنك تتذكر الموضوع اخي احمد، المهم هذا هو بعد التعديل

.model tiny
.code
org 100h
start:
call aah
ahmad db 'ArabTeam2006',0
aah:
pop si
mov ah,0eh
mov bl,7
next:
mov al,[si]
int 16
inc si
cmp al,0
jne next

ret

نفس البرنامج عند عمل Compile يعطي التالي...

E80D00 Call 0110

'ArabTeam2006',00

5E POP SI

B40E MOV AH,0E

B307 MOV BL,07

8A04 MOV AL,[sI]

CD10 INT 10

46 INC SI

3C00 CMP AL,00

75F7 JNZ $-7

C3 RET

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

غير في الملف بحيث يكون محتوى الملف الناتج:

0xE8 0x0D 0x00
'ArabTeam2006',00
0x5E
0xB4 0x0E
0xB3 0x07
0x8A 0x04
0xCD 0x10
0x46
0x3C 0x00
0x75 0xF7
0xC3

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

:blink: :huh: :lol: : :D

هذه المراحل التي مررت بها

مع أني لم أفهم الكثير

هذا المرفق

AHMAD_asm3.rar

تم تعديل بواسطه Ahmadte1
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مــــــــــــاذا لم تفهم ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ما كنت أريد أن أفهمه هو

يمكن تقسيم التعليمة (مثلا)

mov ax,5040

كالتالي

mov=b

ax=8

والباقي و 4050 أي

mov ax,5040=b84050

هل هذا صحيح :huh:

(هل انتهينا من بنية الملف com :o )

(متى سنبدأ exe pe :P )

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نعم هناك تقسيم للأوامر

وهناك قواعد للتقسيم

تفحص الملف المرفق...

ولا تتعجل سننتقل لملفات PE بعدما نمر بDOS exe

-

نكمل

الأن، نريد التغيير في برنامجنا بحيث:

نغير في الكلمة المطبوعة كما نشاء

اي نطلب من المستخدم ادخال كلمة او جملة، ثم ننشئ ملف .com عند تنفيذه يطبع تلك الكلمة او الجملة

لا حظ في الكود، شيئ واحد فقط يتغير هو امر Call

بحيث المسافة تتفير

E8 0D 00

E8 يمثل امر Call

0D 00 اي 13 يمثل طول الكلمة ArabTeam2000 + 00 في النهاية

قم بالتعديل وارفق المثال

Intel_Code_Table.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

:D

لدي سؤال كيف يمكن أن أعطي متحول ما قيمة المتحول الأخر بالنظام الست عشري؟؟؟؟؟

الملف المرفق

AHMAD_asm4.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله فيك استاذ محمدعبد العزيز

نحن معك باذن الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
لدي سؤال كيف يمكن أن أعطي متحول ما قيمة المتحول الأخر بالنظام الست عشري؟؟؟؟؟

عادي، تكتب العدد بالنظام 16

في مثالنا CALL XXXX

حيث XXXX مكان ما في الذاكرة

Opcode الأمر هذا هو

E80D00

E8 تمثل CALL

0D00 تمثل XXXX

في الحقيقة لا تمثل XXXX تماما

لكن تمثل الفرق بين الموضع XXXX و المكان الموجود به الأمر CALL

في مثالنا الأمر CALL موجود في 100 مائة

0D00 بالنظام 10 تساوي13 مقلوبة مايسمى little-endian

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .