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

كيف اتعامل مع مكتبة DLL بواسطة الاسمبلى ؟

مغلق
بدأه hamada hassan ali في 10 نوفمبر 2005 · 15 رد · 1,568 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لوسمحتم واعضاء وخبراء منتدى الاسمبلى

انا لى سوال واحد بس

انا عاوز منكم خدمة صغيرة

فى مقاطعة اسمها INT 41h

وهذا النص مقتبس ياريت لو حد يفهمنى

ما المقصود بكلمة DLL Load بالنسبة الى لغة الاسمبلى

وياريت تفهمونى الكلام ده كمان ازى من الاسمبلى استدعى دالة من النظام

اقتباس
Int 41/AX=0000h - MS Windows debugging kernel - OUTPUT CHARACTER FOR USER
Int 41/AX=0001h - MS Windows debugging kernel - INPUT CHARACTER
Int 41/AX=000Dh - MS Windows debugging kernel - TASK GOING OUT
Int 41/AX=000Eh - MS Windows debugging kernel - TASK COMING IN
Int 41/AX=0012h - MS Windows debugging kernel - OutputDebugString
Int 41/AX=004Fh - MS Windows debugging kernel - DEBUGGER INSTALLATION CHECK
Int 41/AX=0050h - MS Windows debugging kernel - DefineDebugSegment
Int 41/AX=0051h - MS Windows debugging kernel - MOVE SEGMENT
Int 41/AX=0052h - MS Windows debugging kernel - FREE SEGMENT
Int 41/AX=0059h - MS Windows debugging kernel - LOAD TASK
Int 41/AX=005Ch - MS Windows debugging kernel - FREE INITIAL SEGMENT
Int 41/AX=0060h - MS Windows debugging kernel - END OF SEGMENT LOAD
Int 41/AX=0061h - MS Windows debugging kernel - END OF SEGMENT DISCARD
Int 41/AX=0062h - MS Windows debugging kernel - APPLICATION TERMINATING
Int 41/AX=0063h - MS Windows debugging kernel - ASYNCHRONOUS STOP (Ctrl-Alt-SysReq)
Int 41/AX=0064h - MS Windows debugging kernel - DLL LOADED
Int 41/AX=0065h - MS Windows debugging kernel - MODULE REMOVED
Int 41/AX=0066h - MS Windows debugging kernel - ERROR
Int 41/AX=0067h - MS Windows debugging kernel - PARAMETER ERROR

وده الرابط

http://www.ctyme.com/intr/int-41.htm

بس ياريت تدلونى كيف اتحكم فى مكتبة DLL بكل تفصيلها باستخدام الاسمبلى

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

وياريت لو احد يعرف كل المقاطعات الخاصة بالدوس من ناحية عملية فتح وانشاء الملفات والبحث فيها لا يبخل عليا بها

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

وجزاكم الله كل خير

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

تم تعديل هذه المشاركة بواسطة hamada hassan ali في 10 نوفمبر 2005 في 21:26

_____________________________

C Language && Windwos_API

_____________________________

#2
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

.data
LibName db "skeleton.dll",0
FunctionName db "TestHello",0
DllNotFound db "Cannot load library",0
AppName db "Load Library",0
FunctionNotFound db "TestHello function not found",0

.data?
hLib dd ?
TestHelloAddr dd ?

.code
start:
        invoke LoadLibrary,addr LibName
        .if eax==NULL
                invoke MessageBox,NULL,addr DllNotFound,addr AppName,MB_OK
        .else
                mov hLib,eax
                invoke GetProcAddress,hLib,addr FunctionName
                .if eax==NULL
                        invoke MessageBox,NULL,addr FunctionNotFound,addr AppName,MB_OK
                .else
                        mov TestHelloAddr,eax
                        call [TestHelloAddr]
                .endif
                invoke FreeLibrary,hLib
        .endif
        invoke ExitProcess,NULL
end start

طريقة المقاطعات لا تعم لانها أستبدلت بدوال و مكتبات الـAPI

جرب هذا الكود :) فقط غير كلمة skeleton.dll الى المكتبة و TestHello الى أسم الدالة و أذا كان هناك Paramater أستدخم Push لتتعامل معها

المصدر : ICZ TUTS

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#3

كل ما تم هنا أننا طلبنا من النظام تحميل مكتبة معين و بعد تحميل هذه المكتبة طلبنا من النظام أن يحمل لنا نسخة من دالة معينة

بذلك يكون لدينا كود تنفيذى فى الذاكرة و لكنه لن يعمل طبعا

لماذا؟

لاننا لم نظع المؤشر التعليمات عليه بكل بسطاة نقوم بعمل Call لعنوان الذاكرة الموجود به الدالة

سوف يقوم المؤشر بتفيذ الكود التنفيذي الموجود فى الذاكرة.

ماذا تعمل لو فيه تمرير متغيرات ؟؟؟

هذه قطعا مشكلة لكن أذا فكرنا لثلاثة ثوانى فقط :) سوف نجد أنها بالتأكيد لن تخرج عن نطاق المألوف وهو أن نقوم بدفعها فى الرصة Push it to the stack

سوف تطع المتغيرات فى الـStack قبل نقل مؤشر التنفيذ على الذاكرة

طبعا مع مراعة ترتيب المتغيرات و الا سوف يحدث خطأ Illegal Operation.

شكرا لكم

أرجوا أن أكون قد وفقت فى توصيل المعلومة

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#4

توضيح أكثر

خلاصة الكود فى هذه السطور

LibName db "skeleton.dll",0
FunctionName db "TestHello",0
hLib dd ?

invoke LoadLibrary,addr LibName
mov hLib,eax
invoke GetProcAddress,hLib,addr FunctionName
call [eax]

كل الكود الأخر هو كود Validation لمنع حدوث مشاكل أثناء التحميل أو لتحديد مشكلة معينة

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#5

السلام عليكم ياشباب

عاوز اتعلم لغة الالة نفسها حتى اصل الى الاحتراف ولكن طموحى الى بناء مترجم جديد هو الذى يدفعنى لذالك

انا اصبحت الان فاهم العملية ماشية ازى

كل ما احتاجه :

1- هو اى كتاب بيشرح لغة الالة بكل تفاصيلها

2- تعليمة الالة المقابلة لكل تعليمة اسمبلى وتعليمة الالة المقابلة لكل مسجل من مسجلات الذاكرة والريجيستر الخاص بالذاكرة

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

ولكنى اريد بناء شىء جديد حتى لو كان ما له فائدة

ارجوكم لو احد يعرف اى شىء عن ما احتاجه ما يبخل عليا

وشكرا

تم تعديل هذه المشاركة بواسطة hamada hassan ali في 11 نوفمبر 2005 في 04:42

_____________________________

C Language && Windwos_API

_____________________________

#6

نصيحة الأمور ليست بهذه البسطة

كل ما تملكة الأن هى الأدرة ( لغة السي و السيمبلي ) سوف تلاحظ أن الكتب التى تشرح النظرية أكبر بكثير جدا من الكتب التى تشرح الأداة

جرب قرأة أى كتاب فى بناء المترجمات

سوف يساعدك كثيرا

وضع فى الأعتبار جزاء أنت نسية خالص و هو الـLinker

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#7

ممكن لو سمحتم اى شىء اتعلم منه لغة الالة وخصوصا التعامل مع مكتبة DLL

ببساطة الموضوع انى عاوز اصمم مترجم بلغة السى يتم ترجمته الى لغة الاسمبلى او لغة الالة بس يكون موجه لبناء برامج ويندوز

لكن بدون خلط مكتبات

الفكرة ان تكون اكواد المترجم يتم تحويلها الى دوال API قابل للتنفيذ

ولا نحتاج لربط مكتبة من النواع كذا وكذا

فقط عليك التعامل مع كود اللغة فقط وهو لوحده حيصمم البرنامج

هذه الفكرة

بس محدش يأخذها ويصممها قبلى :rolleyes:

هل من افكار واراء اخرى

اتمنى مساعدتكم

سواء بأفكار

او كيف اتعامل مع مكتبات النظام باستخدام لغة الالة او الاسمبلى

تم تعديل هذه المشاركة بواسطة hamada hassan ali في 11 نوفمبر 2005 في 04:47

_____________________________

C Language && Windwos_API

_____________________________

#8

منتظر باقى اراء وردود الاعضاء الكرام

_____________________________

C Language && Windwos_API

_____________________________

#9

قرأت السؤال مرتين و لم افهم شي .. الافكار مشتتة جدا, حاول تصيغهة في جملة مفهومة.

فيما يتعلق باكواد أوامر الأسمبلي, او كيفية تحويل اوامر الاسمبلي الى لغة الآلة, راجع الـ manuals الخاصة بـ pentium

http://developer.intel.com/design/pentium/manuals/

شوف volume 2

http://download.intel.com/design/Pentium4/...ls/25366717.pdf

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 11 نوفمبر 2005 في 07:46

#10

وفيما يخص ان تستغني عن مكاتب الربط فهذا يعني ان تستغني عما تقول عنه API لانها موجودة ضمن تلك المكتبات.. او تقوم بعمل سلاسل تعريف لنوع التعليمات التي ستقوم باستخدامها لكن .. هل تستطيع تعريف سلاسل التعليمات كلها بحيث تدعم المعالجات المعروفة اليوم؟ ناهيك عن قياس الابعاد واختيار السلاسل المناسبة والمعاملات المناسبة التي تليها وان تقوم بصياغتها بشكل صحيح لتفادي الخطا.. ومالك الا حسان بيعرف كل هالامور :D

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#11
اقتباس
ومالك الا حسان بيعرف كل هالامور

ليه الافترة بس!!! :o

#12

اخى hasan_aljudy

مشكور جدا على الكتب دى مش عارف اقولك ايه رائعة

اقتباس
او تقوم بعمل سلاسل تعريف لنوع التعليمات التي ستقوم باستخدامها لكن .. هل تستطيع تعريف سلاسل التعليمات كلها بحيث تدعم المعالجات المعروفة اليوم؟ ناهيك عن قياس الابعاد واختيار السلاسل المناسبة والمعاملات المناسبة التي تليها وان تقوم بصياغتها بشكل صحيح لتفادي الخطا

اخى Xacker

لم افهم معنى كلمة " سلاسل التعليمات "

وانا لم اقصد ان اقول الاستغناء عن API انا بس كنت عاوز اعرف استخدام المقاطعات INT 41h فهى المسوالة عن التحكم فى دخول وخروج البيانات من مكاتب DLL

لذالك كنت عاوز اعرف استخدامها وازى استخدم مكتبة DLL مع الاسمبلى

تم تعديل هذه المشاركة بواسطة hamada hassan ali في 11 نوفمبر 2005 في 18:46

_____________________________

C Language && Windwos_API

_____________________________

#13

ممتاز السؤال راودنى كمان

توة ملف exe لابد من ملف dll

علشان يشتغل

خطاء برمجى+مبرمج php+معرفة كاملة بى my sql+كتابة استمار صحيح===؟؟؟؟؟؟؟؟ اكتشاف ثغرة جديدة ؟؟؟؟؟؟؟
#14

ما قصدته في تعريف سلاسل التعليمات.. مثلا, عندك تعليمة MOV يقابلها (حسب استخدامها) كقيمة ست عشرية B8 .. B8 في الباينري بتعني 10111000 بالتالي انت بحاجة الى ان تقوم بتعريف السلسلة 10111000 كاحدى اشكال تعليمة MOV وان تحدد الاستخدام reg, mem / mem, reg / mem, mem / etc والذي سيملك شكلا معينا لقيم المعاملات بالتمثيل الست عشري ومن ثم تقوم بتحويله الى باينري.. لكن افرض انه طبقنا هالشي, كيف ممكن نستفيد منه, انا لحد هلأ ما فهمت شو بدك تعمل, وبدي خبرك شي, ويا ريت يا اخي حمادة تستوعب علي منيح هالنقطة وما نكون متل غيرنا اللي ما بيصدق "لياكل كم" متل ما بقولوا بالسوري (الكم == هوا == يتبهدل).. انت عم تحاول تطبق شئ شبه خيالي ان لم يكن كذلك فعلا.. لو مثلا كان فيه شي بيشبه اللي بدك تساويه (حسب ما فهمته) ما كانوا خبراء Intel و AMD وغيرهم من صانعي المعالجات اللي انت كمستخدم عم تستغل التعليمات اللي هم وفروها لك.. ما كانوا عملوه قبلك للمحترفين اللي بدهم يعملوا تطبيقات بلغة غير عن كل اللغات؟ وانت حسب ما عم تقول بدك تكتب اسمبلر بالـ C ليحول تعليمات الاسمبلي لتعليمات الة؟ طيب شو عمل MASM و TASM وغيرهم كتير برايك؟ مو الية عملهم نفس الشي؟ او انهم عم يخترعوا تعليمات من عندهم ؟؟

اذن تلخيص كل ما سبق, هل تريد اعادة اختراع العجلة؟

اخي حمادة, نحنا متل اخوة هون وكاخ لك اريد مصلحتك وان ارشدك الى الطريق الصحيح لذا اسمع مني واترك مسالة المجمعات مبدئيا وتعال نتعلم سوا كيف نكتب برامج بلغة الاسمبلي حبة حبة وبالاخير لما بصير عندنا استيعاب لكل الامور بنفكر نكتب اسمبلر وتكرم عينك ما رح حد يلطش الفكرة منك :D

اما بالنسبة لملفات الـ DLL فانت كنت عم تسال عن كلمة "DLL LOADED" صح؟

انا حقولك ايه, الـ Int 41/AX=0064h بتفترض انه عندك ملف الـ DLL تم تحميله في الذاكرة وصار عندك المقبض الخاص فيه عشان تقدر توصله من برنامجك.. لكن انت عم تخطئ بامر معين وهو ان مقاطعة INT 41 خاصة بـ؟ MS Windows debugging kernel ايوه صح يا بطل وبالتالي مش هون لازم تدور عن استخدام ملفات DLL... وشغلة تانية, اذا بدك تكتب اسمبلر بالـ C لتعليمات الـ ASM وخلافه.. الاسمبلر الخاص فيك رح يكون خاص ببيئة 16بت بس؟ يعني ما رح تستخدم اي وظيفة من ملف DLL من المكاتب المعروفة؟

هلأ بتقلي "طيب وانا ليه عم اسال عن الـ DLL!!!! انت يا Xacker ما عم تفهم علي!" -- فانا برد عليك "طيب يا حمادة ليه تعذب نفسك, استخدم الـ API من المكاتب اللي انت بتحتاجها" -- برضه بتقلي "ما انا بدي حاول اتخلى عن الـ APIs اللي عم تتكلم عنها" -- "طيب يا حمادة انت ليه عايز الـ DLL فاذن من اصله!" -- " :o " -- " :D " -- "اوكيه خلاص انا بدي اتخلى عن الـ DLL واستخدم المقاطعات بس" -- "يا حمادة فاذن روح اقرا قائمة المقاطعات الخاصة بـ Ralf Brown وبس تخلص بنحكي" -- "طيب هيك انا ما بخلص بعشر سنين!!" -- "ما نحن شو قاعدين نحاول نفهمك من اسبوع! انت هيك خسرت من عمرك اسبوع بس.. الحق قبل ما تخسر 10 سنين!!!" -- "خلاص.. انا ناوي اتعلم asm32 واكتب برامج مفيدة للبشر مثل .... المفكرة! بس بشكل متطور.. رح اعملها متل wordpad وضيف عليها ميزات و و و .."

وسيبك بقا من مسالة المعالجات والمجمعات والـ C# والـ MCSD يا حمادة لانها ما بتطعميك عيش :D

وهلا دورك يا عاشق هكر.. اعملك فركة ادن ومحاضرة زي حمادة اوكلمتين على السريع؟ ملف الـ exe قادر انه يشتغل بدون اي ملف DLL خارجي (فيما عدا المكتبات اللي هو بالاصل استخدم تعليمات منها) وبالتالي يكن كتابة اي ملف تنفيذي بدون اي ملف DLL حيث تقوم بتضمين كافة الوظائف التي قمت انت بكتابتها ضمنه للاستخدام -- نخلص الى القول ان ملف الـ DLL يفيد في مسالة الـ portability اي انك تستطيع تضمين تلك الوظائف في ملف DLL لتسخدمها مع البرنامج 1 و 2 و 3 دون الحاجة الى اعادة كتابة كل الشفرات مرة اخرى ضمن هذه البرامج.. كويس كده :) وهلأ شوف الكود اللي كتبه (لطشه :P) عم احمد من Iczelion لانه بيوضح تماما كيف بتقدر تستدعي وظيفة من ملف DLL.

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

تم تعديل هذه المشاركة بواسطة Xacker في 12 نوفمبر 2005 في 07:58

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#15

قد قمت بتعديل المشاركة

جميل منك شعورك اخى

لا اعمل على مترجمات لانى منتظر اكسب من ورائها اموال

طموحى هو بناء مترجم باى طريقة كما قلت لك مستعد اتعامل مع اى حاجة بشرط يتحول الى اسمبلى 32 بت تدعم دوال API

لكن صدقنى انا بحب لغة الاسمبلى بس ما عاوز استخدمها

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

وياريت لو تعرف شىء بسيط

وياريت كتاب :

الاسمبلى بس يكون بيشرح ازى استدعى دوال ويندوز API من خلاالها

ويكون ايضا مترجم صالح لا استخدامه فى بناء المترجم بتاعى

تم تعديل هذه المشاركة بواسطة hamada hassan ali في 12 نوفمبر 2005 في 09:20

_____________________________

C Language && Windwos_API

_____________________________

#16

شكرا على الرد و الله كلامك زاد حمسنى فركة ادن ههههههههههههههههههههههههههههههه

ههههههههههههههههههه

\ولا يهمك (((((((((ظـــــــــــــــــــــل قــــــــــــــلــــــــــــــب قط))))))

تحياتى عاشق هكر

خطاء برمجى+مبرمج php+معرفة كاملة بى my sql+كتابة استمار صحيح===؟؟؟؟؟؟؟؟ اكتشاف ثغرة جديدة ؟؟؟؟؟؟؟

هذا الموضوع مغلق.

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