• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

zirek99i

اعضاء
  • عدد المشاركات

    57
  • تاريخ الانضمام

  • تاريخ اخر زياره

السمعه بالموقع

16 عادي

عن zirek99i

  • الرتبة
    عضو

معلومات الملف الشخصي

  • الجنس ذكر

أحدث الزائرين لملفلك الشخصي

1,871 زياره للملف الشخصي
  1. شاركنا ماهو المحرر الذي تستخدمه .؟

    إستخدم PTVS إضافة لـ Visual Studio، وتمتع بأغلب خصائص الـ Visual Studio، هذا فيديو توضيحي   أنا كنت أستخدم من قبل LiClipse، تستخدم إضافة PyDev، لكنها All In One، يعني حمل وإبدأ بكتابة برامجك، يوفر أغلب المزايا المعروفة، كالإكمال التلقائي إلخ عندما إستخدمت PTVS، قمت بإزالة كل البرامج التي كنت أستخدمها من قبل، فهي توفر الـ Remote Debugging والإكمال التلقائي إضافة الى Inteructive Interpreter، روعة، فقط شاهد الفيديو  ;)  
  2. عمل swap لمتغيرين بدون متغير وسيط

    @C++er   أعذرني أخي، فلم أنتبه جيداً  :huh:
  3.   r\    يال غبائي  :wacko:   naked   نعم يمكن، لكن هذا الخيار متوفر فقط في أنظمة x86
  4. عمل swap لمتغيرين بدون متغير وسيط

        يعني عرض لمختلف الخيارات، مهما كانت سيئة، أما لو كان الموضوع حول السرعة، فجوابي سيكون ببساطة إستخدام fastcall__ مع الـ Inline assembly، يالنسبة للمتغيرات العادية، أما بالنسبة للـ Strings فلا أرى ما السبب الذي يدفعك الى تغيير محتويات الذاكرة، إن كنت تستخدم call table أو hash table أو شيئاً آخر فيكفي تغيير الـ pointers، أما إن كنت حقا ترغب في تغيير محتويات الذاكرة، فأفضل ماسأقوم به، سيكون أولا التأكد من الحجم، إعادة حجز الذاكرة في حال كان الحجم مختلفاً، وإن كان حجم النص كبيرا، فسأستخدم thread وأقوم بتحديد الـ affinity، في حال كانت البيئة multiprocessing حتى لايشعر المستخدم بأي تأخير، أو هسة .. هناك العديد من الخيارات الأخرى تجول ببالي الآن لكن أظن فكرتي وصلت  ;)
  5. السلام عليكم ورحمة الله تعالى وبركاته   الهدف: إزاحة شبح الأعداد العشرية فهم المعنى الحقيقي everything is just a sequence of bits القدرة على التعامل مبائرة مع الذاكرة   الموضوع: سيكون التحدي مقسما الى جزئين، جزء أول بسيط سأضعه الآن، وجزء صعب، سأضعه عند إنتهاء مدة الجزء الأول.   المتطلبات: 1 كتابة برنامج يطلب من المستخدم إدخال رقم عشري، أو فقط إستخدم hardcoded number لامشكلة  ;) 2 تقسيم الرقم العشري على شكل حقول بنية، ثم طباعة كل جزء على شكل بتات، مع وضع تعليق بسيط وفي الصميم، لكل حقل في الـ output طبعاً 3 أثبت أنك تعي جيدا ما تقوم به، وذلك عن طريق تعديل الذاكرة مبائرة بتا بتاً، بإضافة 2.013- الى العدد الذي إخترته :D ،    الغش غير مقبول نهائياً  :angry:   حسناً، لكي أشرح بالضبط موضوع التحدي قمت بإعداد مثال خاطئ تماماً يشرح المتطلبات، /* This is a fake solution, just to tel what the idea is author: zirek99i*/#include <blabla.h>// pure c#define read(msg, var) do somthing ... or use the usual#pragma pack ?typedef struct _FLOAT_MEMORY{ unsigned int field_1:7 unsigned int field_2:77 unsigned int field_2:777 unsigned int ... }FLOAT_MEMORY, *PFLOAT_MEMORY;#pragma pack ?int __cdecl main (void){ //******************************************************/ // 1. get the number from the user float __float; FLOAT_MEMORY floatMemory; read("Enter a floating number", __float); //******************************************************/ // 2. show me how the number is presented in memory floatMemory = () ....; // think of something m_ConvertToBinary(some_pointer); // the output should be something like output " field_1 = 01010010101010 -> this is the ...." output " field_2 = 010100 -> this is the ...." output " field_1 = 101001010 -> this is the ...." ... // mathematique operation // tel me how they do it output " field_1 + field_2" //******************************************************/ // 3. this is on you think of something .. :=) // if you get this far then you are ready for the next challenge (FPU(st*) registers ;)) // by sincere // zirek99i return 0;}المدة: أسبوع واحد   إن كان هناك تفاعل :)  سأضع الحل، وأضع الجزء الثاني  :D إن لم يكن هناك أي تفاعل   :wacko: فسأختفي  -_-      
  6. عمل swap لمتغيرين بدون متغير وسيط

    هناك طريقة أخرى، سأبرمجها لاحقاً لمن أراد التحدي، سأضع الطريقة هنا  B)   يمكن أن تستخدم shl أو shr لسحب القيمة من الذاكرة بتا بتا، عن طريق الـ carry flag، إن قمت بالتأكد من أن القيم ستوضع جنباً الى جنب بالذاكرة عن طريق إستخدام pragma pack(1) ففي هذه الحالة التخدي سيكون سهلا، لكن المشكلة ستقع إذا كانت قيم المتغيرات متباعدة بالذاكرة، وهنا تكمن الصعوبة، سيكون من الممتع حل هذا المشكل  :D   لايهم هنا أبداً نوع المتغير، مهما كان قم فقط بعمل typecast لمؤشر ثم إستمتع بوجبتك  :P   حظاً موفقاً.
  7. الحصول على قيمة Eip

    تمام مصطفي  :D   وهذا حلي #include <cstdio>unsigned int __stdcall my_GetEip (int magic){ return (*((unsigned int *) &magic - 1)) + 0x3;}int main (void){ { unsigned int eip; eip = my_GetEip (18); } printf("am the target address!"); getchar (); return 0;}بالتوفيق
  8. :D   ClearScreen ()، هي مجرد دالة قمت ببرمجتها لمسح الـ Console، عند تشغيل البرنامج تظهر الساعة تابثة في مكانها في آنثظار تحديثك للبرنامج  ;)   http://msdn.microsoft.com/en-us/library/windows/desktop/ms682022(v=vs.85).aspx
  9.   كلامك صحيح، لكن هناك بعض الإكراهات التي يجب أن تتعايش معها،إضافة الى أنك ستجعل كل من يرغب في أن يصبح مبرمج يفكر ألف ألف مرة، ألق نظرة على الكود التالي، ولاتنسى تعطيل حماية الـ Stack   تحويل كلامك الى مثال عملي  //////////////////////////////////////////// NO LOOPs \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//// Author : Zirek99i// purpose : This is a very simple trick implementation//#include <Windows.h>#include <stdio.h>int ClearScreen(void);void __cdecl clock (int h, int m, int s){ unsigned int val; __asm { mov val, edx } if (val != 0x98728472) { __asm { sub ebp, 4 } } else { __asm { mov edx, 0xAB17203F } } void *ptr = (void **) &h - 1; *(int *) ptr = (int)clock; /* if (*(char *)(*(int *)ptr) == '\xE9') { short offset = *(short *)((char *)(*(int *)ptr) + 1) + 5; *(short *) ptr = (short)clock + offset; } */ s++; if (s == 10) m++, s=1; if (m == 10) h++, m = 0; if (h == 5) s = 1, m = 0, h = 0; ClearScreen(); printf("%02d :%02d :%02d", h, m, s); Sleep(998);}int main (void){ __asm { mov edx, 0x98728472 } clock(0, 0, 0); getchar (); return 0;}كما ترى في الكود بالأعلى، فإنه يمكنك تصميم أي حلقة كيفما كانت، بدون آستخدام أي طريقة من الـ Standard أو حتى Recursion أو تعليمات القفز،    لكي يعمل معك الكود يجب أن تعطل جميع خصائص حماية الـ Stack، لأنني قمت بتغيير قيمة EBP
  10. الحصول على قيمة Eip

      بالتأكيد ينفع لكن في هذه الحالة فقط  :P   لقد آقتربت من الحل، ماينقصك هو بعض التعديل فقط، لكي يصبح عام، على العموم تذكر بأن قيمة EIP يتم تخزينها، في حالة خاصة، مما يعرضها لخطر السرقة  :D   سأضع الحل في المساء إن لم يجب أحد ..
  11. كيف حالكم أصحاب،  أتمنى تكونوآ في ألف خير   جلبت لكم اليوم تحدي سهل بسيط وممتع في نفس الوقت.   الهدف من التحدي هو الحصول على قيمة Eip للتعليمة التي سيتم تنفيذها حالياً.   الشروط عدم إستخدام أي دالة من دوال الـ API كـ GetThreadContext أو RtlCaptureContext يجب أن يكون البرنامج Cross platform الـ inline assembly كود غير متاح، يمكنك أن تستخدمه لكن الحل لن يقبل كحل نهائي.   مدة التحدي 24 ساعة الجواب سأضعه غداً إن شاء الله.   أتمنى أن تستمتعوآ دمتم في رعاية الله وحفظه.
  12. آسف على اللغة الإنجليزية فلا أعلم كيف أكتبها بالعربي   wait for an event to occur wait for an object to complete its task, implemented internaly with a loop take a message from a message queue only whene a certain condition is happen, like raiseexception, or new module loaded, this action should be performed an unlimited number of time clock, can you make it run without loop, and get it back automatically to its initial state, whene it reach the limit   وبالطبع، the old schol program، هل يمكنك أن تدخل بيانات عدد من المستخدمين يقوم الـ User بتحديدهم.   حظاً موفقاً
  13. هدفي من التحدي ليس عرض المكتبات، لكني أردت فقط أن يستفيد الأعضاء من الإستخدامات المتقدمة لـ static، extern، والـ Preprocessors وماالفرق بين إستخدامهم داخل نفس الملف ومن ملف آخر، وبما أن الأمر أكبر من أن يتم إحتوائه داخل موضوع عادي، قررت أن أضعه على شكل تحدي. ولم يخطر ببالي أفضل من الـ Oriented object كأساس  ;).
  14. لتوليد الأفكار #include <stdio.h>#include <string.h>void info (int age, char *name){ printf("age : %d\nname: %s\n", age, name); return;}typedef struct _Person{ int age; char name [32]; void (*pInfo)(int, char *);}Person;int main (void){ Person person; person.age = 24; strcpy(person.name, "zirek99i"); person.pInfo = info; person.pInfo(person.age, person.name); getchar (); return 0;}
  15. إستيقظت هذا الصباح على فكرة، لاأعلم مدى جنونها، لكنني أظن أنه بالإمكان إستخدام البرمجة كائنية التوجه في لغة السي.   التحدي يشرح نفسه بنفسه، لذا دعونا نختبر بعض قدرات لغة السي، ونرى الى أي مدى يمكننا أن نصل :D .