يناير 20, 2008
أهلا وسهلا ،، مجرد تجربه للأمر ، واختبار المدونة … cout << “hello World” ;cout” << This is test for the coding schema in Blog ” ;
سي يو .
Leave a Comment » |
1 |
رابط دائم
نشرت بواسطة romansy
سبتمبر 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
Leave a Comment » |
برمجه |
رابط دائم
نشرت بواسطة romansy