• 0
allko

طلب شرح كود يقوم بتصدير الـexe كـdll

سؤال

مرحبا
ما وظيفة هذا الكود؟

#include <stdio.h>#include <windows.h>__declspec(dllexport) void Demo(){   #define PASSWORD_SIZE 100   #define PASSWORD      "myGOODpassword\n"   int count=0;   char buff [PASSWORD_SIZE]="";   for(;;)   {   printf("Enter password:");   fgets(&buff[0], PASSWORD_SIZE-1, stdin);   if (strcmp(&buff[0], PASSWORD))   printf("Wrong password\n");   else break;   if (++count>2) return -1;   }   printf("Password OK\n");}main(){HMODULE hmod;void (*zzz) ();if ((hmod=LoadLibrary("crack0~1.exe"))&& (zzz=(void (*) ())GetProcAddress (h, "Demo")))zzz();}

وحسبما قرات في الكتاب الذي وجدت هذا الكود فيه، فقد كتب التالي

What a way to call a function! This technique exports it directly from the executable file and loads the same file as a DLL. (Yes, the same file can be both the executable application and the DLL.)

فهل يمكنكم ان تخبروني بمعني #define ومعنى هذا السطر
fgets(&buff[0], PASSWORD_SIZE-1, stdin);
ومالمقصود &buff[0], هل هي array ؟؟


وشكرا

تم تعديل بواسطه مصطفى 36a2
Add some tags
0

شارك هذا الرد


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

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

  • 0
#define

تستخدم لتعريف constant ... هذا من الأساسيات في لغة السي ...

fgets(&buff[0], PASSWORD_SIZE-1, stdin);

fgets من الإسم :File Get String ... وهنا file هو stdin ...

أنصحك بمراجعة أساسيات السي اولا ..

أما بالنسبة للكود فيستخدم LoadLibary وهي دالة API وضيفتها :

maps the specified executable module into the address space of the calling process.

حيث الـ executable module من الممكن أن يكون dll او exe .

راجع MSDN Help ستجد الشرح واضح ..

http://msdn.microsoft.com/library/default....loadlibrary.asp

0

شارك هذا الرد


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

حبيت أضيف شئ

يمكن إستدعاء دوال مصدرة من exe فقط من ذلك الـ exe او dll مستدعى فيه ... يعني العمل لا بد أن يكون في نفس الـ Process ...

للتوضيح

معانا A.exe , B.exe , Test.dll

A.exe فيه دالة مصدرة fun1 ..

1)يمكن استدعاء fun1 بالطريقة في الكود السابق من داخل A.exe ..

2)ان كان A.exe قام بعمل Load لـ test.dll فانه يمكن من داخل test.dll استدعاء fun1 ..

3) لا يمكن استدعاء fun1 من داخل B.exe ...

0

شارك هذا الرد


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

شكرا...

انا في الواقع اعرف اساسيات السي بلس بلس وليس السي لذلك استغربت قليلا...

شكرا جزيلا لك

0

شارك هذا الرد


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

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

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