واضح آرشیو وب فارسی:سایت ریسک: sin66x11-09-2006, 07:57 AMسلام دوستان مسئله اي رو چند وقت پيش ديدم كه هنوز نتونستم راه حلي پيدا كنم سوال اين بود - برنامه اي بنويسيد كه بدون استفاده از جريانها سورس خودش رو چاپ كنه! someone11-09-2006, 02:42 PMسلام. يه مقدار در مورد سوال توضيح ميديد؟ منظور از سورس خودش رو چاپ كنه چيه؟ آيا منظورتون يكdisassembler هست؟ ميشه در يه فايل exe يه DataBox ايجاد و اطلاعاتي رو در اون قرار داد. يا اينكه اطلاعاتي رو به فايل exe مورد نظر Append كرد. مسلما در يه فايل exe , سورس خود برنامه وجود داره البته به كد ماشين كه در قسمت Code Segment يه فايل exe قرار داره.آيا منظورتون dump كردن اين قسمت هست؟ بيشتر توضيح بديد. اگه سوال مربوط به كتاب يا سايتي هست لطفا اون رو معرفي كنيد. ممنون. sin66x12-09-2006, 08:41 AMنه اصلا disassembler کردن منظور نیست! حتا برنامه باید include ها رو هم بنویسه! باید بشه از printf یه جوری استفاده بشه که حتی خودشم بنویسه! این سوال پارسال تکلیف بچه های سال اول شریف بوده و اونا حتی اسمبلی نخونده بودن! من سعی کردم از روی RAM که حتما کد برنامه اونجا هست بخونم ( چون بعد از برگشتن از محیط اجرا به محیط نگارش متن برنامه هنوز هستش) اما نتونستم علاوه بر این اگر این برنامه Exe شد و اجرا شد دلیلی برای وجود متن اون توی RAM نیست! someone12-09-2006, 05:21 PMدوباره سلام. خب پس منظور dump كردن CS يه فايل exe نيست.چون كار ساده اي نيست. برنامه اي كه نوشتم فقط هنگامي برنامه رو از IDE اجرا كنيد source برنامه رو نشون ميده.كه البته منظور شما اين نبوده.چون اگه source برنامه كنار فايل exe نباشه كاري نميتونه انجام بده. اما همون طور كه قبلا گفتم ميشه اين كد رو به فايل exe مورد نظر Append كرد.(لبته به دور از چشم Antivirus چون اجازه اين كارو نميده.دليلش هم كه روشنه) بعد از اين كار هر وقت كه فايل exe اجرا بشه source خودش رو نشون ميده. كه بازهم احتمالا منظورتون اين نبوده. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! يا اينكه به شكل كه ساده تر هم ميشه نوشت.دليل نوشتن برنامه اول استفاده از HANDLE براي دسترسي به file بود كه يكي از دوستانم خواسته بود. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! كه فقط اين توضيح رو بدم كه دليل استفاده از tchar.h اينه كه در شكل جديد اصلاح توابع بضي از آرگومان ها از LPCSTR به LPCWSTR تبديل شده كه در صورت استفاده از VC6 ميشه tchar.h و ()T_ رو حذف كرد. اين برنامه ناقص هست چون Append رو انجام نميده.البته روش هاي زيادي براي دور زدن اين قضيه وجود داره. خوشحال ميشم بيشتر اين بحث ادامه داشته باشه.موضوع جالبي هست. ممنون. sin66x12-09-2006, 06:48 PMبله منظور اين نبوده برنامه اجرا شده ممكن است كه اصلا Save نشده باشد! همچنين از فايلها و جريانها نمي تونيم استفاده كنيم مثالي كه نوشته بود: int a; //Code a++; //Code printf("int a; a++ ") //Codi ke khodesham badan bayad chap she vali chejuri va oonke gharare khodesho chap kone koja gharare chap beshe?!!!! سوالب دیگه من اینه چرا وقتی توی Ram دنبال متن برنامه گشتم پیداش نکردم؟!!! انگار تو Ram عادی ذخیره نمی شه!!! با char far *Var دنبالش گشتم!! someone13-09-2006, 12:48 AMدوباره سلام. درسته گفته بوديد از stream نبايد استفاده بشه.ولي در مورد يه فايل exe اين موارد وجود دارند. يه فايل exe از چند قسمت تشكيل ميشه. 1-data Segment 2-code segment 4-stack segment و فكر ميكنم اگه code Segment بيش از 64KB باشه ادامه اون در Segment ديگه اي قرار ميگيره به نام Extra Segment . وقتي يك فايل exe در حافظه قرار ميگيره اين الگو ها با آدرسي كه براشون تعريف شده,قابل دسترسي هستند اما به شكل Hex .اگه يه برنامه در حال اجرا رو DEBUG كنيد ميتونيد اين كد ها رو ببينيد. كه مثلا به شكل زير هستند. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! در حافظه شما به بيش از اين دسترسي نداريد. براي رسيدن به كد برنامه بايد آدرس هايي كه مربوط به Code Segment و Data Segment ميشه رو به اصطلاح dump كنيد. هم چنين ميشه يه pointer به main برنامه ايجاد كرد و با افزايش اين pointer اين كار رو انجام داد. كه باز هم decode كردن ميشه. اين كاري هست كه به نظر ميآد شما ميخوايد انجام بديد. در ضمن خيلي از virus ها همراه خودشون كد hex برنامه رو دارند كه قبلا بحثش رو كرديم ولي نظري نداديد.اينم يكي ديكه از روش ها براي اين كار هست.كه ميتونن با اون الگو خودشون رو تكثير كنن. با بحثهايي كه داشتيم دو باره اين سوال پيش ميـاد كه: آيا دنبال الگوريتمي بايد باشيم در كد برنامه كه كار مورد نظر رو انجام بده؟ يا اين كه يه decoder براي اين كار نوشت؟ ممنون. sin66x16-09-2006, 08:17 AMسلام مجدد شرمنده مدتي بود نتونستم بنويسم چون توي راه بودم! همانطور كه گفتم بايد عين متن چاپ بشه كه Decode كردن اين كار رو نمي كنه و فقط دستوراتي رو كه به زبان ماشين ترجمه ميشن رو مي نويسه تازه بعد هم بايد از اسمبلي به C ترجمه شن! اما برنامه ما بايد حتي Remark ها رو هم چاپ كنه و اگر Space يا Enter اضافه بين دو خط يا كلمه باشه رو دقيقا بنويسه! كلا بايد يه راه C داشته باشه چون همونطور كه گفتم اصلا اين سوال براي كساني بوده كه اسمبلي و زبان ماشين پاس نكردن!! someone20-09-2006, 12:13 AMدوباره سلام. خيلي جالب شد.ارزش كار كردن رو داره. mil124320-09-2006, 12:22 AMbe in barnameha QUINE migan ke tavanayi chap khodeshoon ro daran age ebarate QUINE C ro search koni mitooni be natayeje khoobi beresi man ham ye nemoonasho inja mizaram mozoo ine ke na bayad az rooye file khoonde beshe ya az rooye ram /*Yadollahi*/#include<stdio.h> char*a="int main(){printf(b,34,a,34,10,34,b,34,10,a,10);}"; char*b="/*Yadollahi*/#include<stdio.h>%cchar*a=%c%s%c;%cchar*b=%c%s%c;%c%s%c"; int main(){printf(b,10,34,a,34,10,34,b,34,10,a,10);} in ham yeki dige char *f="%c%s%c,"; /******BY: Milad Yadollahi******/ #include <stdio.h> char*x[]={ "char *f=%c%s%c; /******BY: Milad Yadollahi******/", "#include <stdio.h>", "charx[]={", "},z=0;main(){int n;", "printf(*x,34,f,34);puts(&z);", "puts(x[1]);puts(x[2]);", "for(n=0;n<8;n++)printf(f,34,x[n],34),puts(&z);", "for(n=3;n<8;n++)puts(x[n]);}", },z=0;main(){int n; printf(*x,34,f,34);puts(&z); puts(x[1]);puts(x[2]); for(n=0;n<8;n++)printf(f,34,x[n],34),puts(&z); for(n=3;n<8;n++)puts(x[n]);} someone20-09-2006, 12:37 AMسلام. واقعا عالي بود "mil1243" از زيباترين مسائلي هست كه تاحالا ديدم. همون طور كه "mil1243" گفت ميشه در بارش search كرد.حتما به link زير يه نگاه بكنيد. http://www.nyx.net/~gthompso/quine.htm mil124320-09-2006, 09:40 PMاينم ده ها quine براي c كه برنامه نويسها تو يه مسابقه نوشتن اگه خواستيد ميتونم بعضي هاش رو توضيح بدم http://itazad.persiangig.com/document/SELF_C.TXT سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 482]