تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 11

نام تاپيک: درخواست برنامه اي كه بدون استفاده از جريانها سورس خودش رو چاپ كنه

  1. #1
    داره خودمونی میشه
    تاريخ عضويت
    Jul 2006
    پست ها
    38

    پيش فرض درخواست برنامه اي كه بدون استفاده از جريانها سورس خودش رو چاپ كنه

    سلام دوستان
    مسئله اي رو چند وقت پيش ديدم كه هنوز نتونستم راه حلي پيدا كنم سوال اين بود
    - برنامه اي بنويسيد كه بدون استفاده از جريانها سورس خودش رو چاپ كنه!

  2. #2
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    سلام.
    يه مقدار در مورد سوال توضيح ميديد؟
    منظور از سورس خودش رو چاپ كنه چيه؟ آيا منظورتون يكdisassembler هست؟
    ميشه در يه فايل exe يه DataBox ايجاد و اطلاعاتي رو در اون قرار داد. يا اينكه اطلاعاتي رو به فايل exe مورد نظر Append كرد. مسلما در يه فايل exe , سورس خود برنامه وجود داره البته به كد ماشين كه در قسمت Code Segment يه فايل exe قرار داره.آيا منظورتون dump كردن اين قسمت هست؟ بيشتر توضيح بديد.
    اگه سوال مربوط به كتاب يا سايتي هست لطفا اون رو معرفي كنيد.
    ممنون.
    Last edited by someone; 11-09-2006 at 18:55.

  3. #3
    داره خودمونی میشه
    تاريخ عضويت
    Jul 2006
    پست ها
    38

    پيش فرض

    نه اصلا disassembler کردن منظور نیست! حتا برنامه باید include ها رو هم بنویسه! باید بشه از printf یه جوری استفاده بشه که حتی خودشم بنویسه! این سوال پارسال تکلیف بچه های سال اول شریف بوده و اونا حتی اسمبلی نخونده بودن!
    من سعی کردم از روی RAM که حتما کد برنامه اونجا هست بخونم ( چون بعد از برگشتن از محیط اجرا به محیط نگارش متن برنامه هنوز هستش) اما نتونستم علاوه بر این اگر این برنامه Exe شد و اجرا شد دلیلی برای وجود متن اون توی RAM نیست!

  4. #4
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    دوباره سلام.
    خب پس منظور dump كردن CS يه فايل exe نيست.چون كار ساده اي نيست.
    برنامه اي كه نوشتم فقط هنگامي برنامه رو از IDE اجرا كنيد source برنامه رو نشون ميده.كه البته منظور شما اين نبوده.چون اگه source برنامه كنار فايل exe نباشه كاري نميتونه انجام بده. اما همون طور كه قبلا گفتم ميشه اين كد رو به فايل exe مورد نظر Append كرد.(لبته به دور از چشم Antivirus چون اجازه اين كارو نميده.دليلش هم كه روشنه)
    بعد از اين كار هر وقت كه فايل exe اجرا بشه source خودش رو نشون ميده. كه بازهم احتمالا منظورتون اين نبوده.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    يا اينكه به شكل كه ساده تر هم ميشه نوشت.دليل نوشتن برنامه اول استفاده از HANDLE براي دسترسي به file بود
    كه يكي از دوستانم خواسته بود.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    كه فقط اين توضيح رو بدم كه دليل استفاده از tchar.h اينه كه در شكل جديد اصلاح توابع بضي از آرگومان ها از LPCSTR به LPCWSTR تبديل شده كه در صورت استفاده از VC6 ميشه tchar.h و ()T_ رو حذف كرد.
    اين برنامه ناقص هست چون Append رو انجام نميده.البته روش هاي زيادي براي دور زدن اين قضيه وجود داره.
    خوشحال ميشم بيشتر اين بحث ادامه داشته باشه.موضوع جالبي هست.
    ممنون.

  5. #5
    داره خودمونی میشه
    تاريخ عضويت
    Jul 2006
    پست ها
    38

    پيش فرض

    بله منظور اين نبوده برنامه اجرا شده ممكن است كه اصلا Save نشده باشد! همچنين از فايلها و جريانها نمي تونيم استفاده كنيم
    مثالي كه نوشته بود:
    int a; //Code
    a++; //Code
    printf("int a;\na++\n") //Codi ke khodesham badan bayad chap she vali chejuri va oonke gharare khodesho chap kone koja gharare chap beshe?!!!!

    سوالب دیگه من اینه چرا وقتی توی Ram دنبال متن برنامه گشتم پیداش نکردم؟!!! انگار تو Ram عادی ذخیره نمی شه!!!
    با char far *Var دنبالش گشتم!!

  6. #6
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    دوباره سلام.
    درسته گفته بوديد از 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 براي اين كار نوشت؟
    ممنون.
    Last edited by someone; 13-09-2006 at 01:04.

  7. #7
    داره خودمونی میشه
    تاريخ عضويت
    Jul 2006
    پست ها
    38

    پيش فرض

    سلام مجدد شرمنده مدتي بود نتونستم بنويسم چون توي راه بودم!
    همانطور كه گفتم بايد عين متن چاپ بشه كه Decode كردن اين كار رو نمي كنه و فقط دستوراتي رو كه به زبان ماشين ترجمه ميشن رو مي نويسه تازه بعد هم بايد از اسمبلي به C ترجمه شن! اما برنامه ما بايد حتي Remark ها رو هم چاپ كنه و اگر Space يا Enter اضافه بين دو خط يا كلمه باشه رو دقيقا بنويسه! كلا بايد يه راه C داشته باشه چون همونطور كه گفتم اصلا اين سوال براي كساني بوده كه اسمبلي و زبان ماشين پاس نكردن!!

  8. #8
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    دوباره سلام.
    خيلي جالب شد.ارزش كار كردن رو داره.

  9. #9
    در آغاز فعالیت
    تاريخ عضويت
    Aug 2006
    پست ها
    3

    پيش فرض

    be 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]);}

  10. #10
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    سلام.
    واقعا عالي بود "mil1243"
    از زيباترين مسائلي هست كه تاحالا ديدم.
    همون طور كه "mil1243" گفت ميشه در بارش search كرد.حتما به link زير يه نگاه بكنيد.
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    Last edited by someone; 20-09-2006 at 00:57.

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •