عوده مره أخرى ……

يناير 20, 2008

 أهلا وسهلا ،،  مجرد تجربه للأمر ، واختبار المدونة … cout << “hello World ;cout” << This is test for the coding schema in Blog;

سي يو .

    


برنامج الـ Quine لطباعه الكود

سبتمبر 9, 2007

السلام عليكم ،


أكثر برامج يعشقها مبرمجي لغه السي ، هي تلك البرامج التي لا يفهمها أي أحد ، حتى هم أنفسهم ، وعاده تطلق عليها برامج “مشوشه” Obfuscated وهناك بعض المسابقات تقام ، لأكثر برنامج “مشوش” .

برامج الـ Quines (في بعض الأحيان تسمى Self-Reproducing prgraom ) تعتبر أحد أنواع البرامج المشوشه هذه ، ولها ثقلها في المسابقات الغريبه تلك ، الأسم quine أتي من أسم مخترعها الفيلسوف Willard Van Orman Quine

لنلق نظره أكثر ، قم بنسخ هذا الكود وقم بتشغيله ، ويفضل تشغيله في Visual C++ لأن هناك التنفيذ لا ينتهي وتبقى الشاشه السوداء موجوده ، أو قم بوضعه في البيئه المفضله لديك ، ولا تنسى وضع system(”pause”) أو أي جمله أدخال getchar في نهايه البرنامج ، وقم بوضع جمله الأدخال أيضا داخل المصفوفه الحرفيه التي يحتوي على كود البرنامج ، وستلاحظ أنه أطول متغير في البرنامج .

أو ريح نفسك وشغل البرنامج من نافذه الاوامر Command Prompt .

نعود الى برنامجنا ، لا تسألني عن مخرجاته

  للأسف هذه المدونه لا تتعامل مع الأكواد بشكل جيد ، سأرفق البرامج كمرفق ، أو أرى مدونه أخرى ، صراحه جن جنوني من كثر التنسيق !

لن أقوم بتشريح الكود ، فالمخرج واضح ، وعمليه شرح هذه الأكواد ، سوف يدخلنا في متاهات ، أفضل تجربه الكود بنفسك .

ينبغي معرفه أن مثل هذه البرامج تحتاج الى خطوتين فقط لعملها ، أول خطوه هي كتابه كود البرنامج كاملا بكل ما فيه تعليقات داخل مصفوفه من الحروف . الخطوه الثانيه هي كود لطباعه محتويات هذه المصفوفه الحرفيه (اي طباعه الكود الذي كتبناه في المصفوفه) ، وطباعتها على انها حروف أي كما هي (يأخذ هذه المصفوفه ويعالجها بطريقه ما ، سوف يطبعها) .

بشكل مبسط ننشيء مصفوفه s ونكتب فيها كود البرنامج كاملا ، من البدايه الى النهايه ،
لكن هناك نقطتان مهمتان ،

اولأ مثلا لدى جمله
printf(”hello”) ;

عندما أضعها داخل مصفوفه من الحروف ، يجب أن أضع علامه \ على كل من ” بداخل جمله الطباعه ، لأنني اذا لم أضعها سيعتبرها المترجم نهايه المصوفه .
نفس الكلام بالنسبه الى الاشاره \ عندما أريد أن اضعها ، أكتب \\ .

النطقه الثانيه ،عندما أبدأ في كتابه الكود داخل المصفوفه ، وأصل الى نفس المتغير ، أضع علامه ما مثلا حرفين ## .هذه العلامه ضروريه لاننا هي بمثابه الجزء الذي أريد طباعته بالاضافه الى الكود .

الان في سأطبع المصفوفه الحرفيه كما هي ، ولانها تحتوي على الكود ، سينطبع الكود .

وفي خلال طباعه الكود ، سأطبع المصفوفه الحرفيه على أنها حروف ، أي أقوم باستبدال مثلا \n ب \\n حتى تطبع كما هي وبدون تنفيذها . متى أعرف أننا وصلنا ألى المصفوفه الحرفيه ونحن نطبع حروف في الأصل ، هل تذكر العلامتان ## وهن يشيران الى بدايه المصفوفه .

ربما لن تفهم أي شيء الى الأن -وهذا محتمل- لكن هذه هي برامج الـObfuscated ، أفضل طريقه هي كتابه البرنامج من الصفر بنفسك ، وستلاحظ مدى بساطه الفكره وسهولتها ، وصعوبه شرحها .

برنامج أخر ، قم بتشريحه بنفسك (مع العلم 34 تشير الى ” ) :

كود PHP:

int main() { char *s = "int main() { char* s = %c%s%c; printf(s, 34, s, 34); }"; printf(s, 34, s, 34); }

Happy Quine :)


Hello world!

سبتمبر 3, 2007

السلام عليكم ورحمه الله وبركاته ،،مره أخرى أعود للتدوين بعد أنقطاع طويل من الكتابه ، لذلك عليَ تحريك الدماغ قليلا والكتابه في شيء مفيد :) ،

بإذن الله سوف أهتم بمواضيع التشفير ، سواء بـHistory أو بالطرق الكلاسيكيه Classical أو بالطرق الحديثه Modern Cryptography .

أيضا برامج صغيره بـ JAVA لا تضر :) ، و ASSEMPLY سوف يكون لها نصيب ولو بشكل قليل .

لن أطيل أكثر من ذلك ،

الى اللقاء في التدوينة القادمه :) .