نمایش نتایج 1 تا 21 از 21

نام تاپیک: خوندن محتویات ram

  1. #1

    خوندن محتویات ram

    با سلام !

    من یه برنامه برای خواندن محتویات ram نوشتم که یه کم مشکل دارم .

    [code]
    using System;
    using System.IO;


    class Readingramcontent
    {

    unsafe public static void ramcontent()
    {
    int *ptr;
    int x;
    int i;
    x=0x0000;
    try
    {
    for(i=0;i<50;i++)
    {
    x++;
    ptr=(int *)x;
    Console.WriteLine("Address Of Pointer content is:%d/n",*ptr);

    }
    }
    catch(Exception ex)
    {
    Console.WriteLine(ex.ToString());
    }
    Console.ReadLine();

    }
    public static void Main()
    {
    ramcontent();
    }
    }

    [/cdoe]


    ما میدانیم که تمام خونه های رم قابل دسترسی نیستند و آنها توسط سیستم عامل
    protect Mode شده اند !
    خوب در این وسط برای برنامه ما یه مشکل به وجود می آید:
    این مشکل اینه که ما نمی دونیم کدوم خونه ها حفاظت شده هستند و
    و وقتی که اشاره گر برنامه ما بر روی این خونه ها میرسه برنامه
    crash میکنه !
    مشکل من در اینه که چطور این خونه رو رد کنم و به خونه بعدی برسم و اونو بررسی کنم !
    من برای حل این مشکل از excpetion ها استفاده کردم !
    ولی نمی تونم اون خونه رو رد کنم و فقط می تونم یه error بدم !
    اگه یه راه حلی ارایه کنید ممنون میشم .



    با تشکر
    آخرین ویرایش به وسیله Asad.Safari : جمعه 08 اردیبهشت 1385 در 10:43 صبح

  2. #2
    با سلام

    و تشکر به خاطر جوابتون !

    می خاستم بپرسم که آیا میشه تو بلاک catch یه goto یا یه همچین چیزی گذاشت!


    با تشکر

  3. #3
    فکر نکنم این سوال برای مهندسان این بخش خیلی سخت باشه؟؟!!!
    اگه یه راهنمایی بکنید ممنون میشم


    با تشکر

  4. #4
    بنظر میرسه مقدار x آدرس رم رو کنترل میکنه و جلو میره.
    یه تابع از کدهات درست کن که مقدار x رو بگیره و با 0x0000 اجراش کن
     RamReader(int x= 0x0000)

    اگه موقعی که به خطا رسیدی x++ کنی و تابع رو دوباره با مقدار x صدا بزنی فکر کنم حل بشه!!
    من که نفهمیدم
    آخرین ویرایش به وسیله once4ever : چهارشنبه 13 اردیبهشت 1385 در 18:34 عصر

  5. #5
    من تو این برنامم از آفست استفاده کردم و
    آدرس 0x0000 تو یه x گذاشته میشه !

    بعدش x رو به صورت اشاره گر درش میاریم و داخل اشاره گرمون میذاریم:
    ptr=(int *)x

    بعدش مقدارش چاپ میشه !


    این را حلی رو که شما گفتین , جواب نداد !

    اگه میشه یه راه حل بهتر بگید

    با تشکر

  6. #6
    این برنامه خیلی ضروریه !!

    آیا این برنامه به این حد مشکله که همه توش موندن ؟؟؟

    و یه سوال دیگه

    چطور میشه تو C#‎ به ثبات های cpu دسترسی پیدا کرد !!


    با تشکر

  7. #7
    کاربر دائمی آواتار Behrooz_CS
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    سن
    41
    پست
    168

    Thumbs up

    دوست عزیز جواب شما اینجاست

    using System;
    using System.IO;
    using System.Collections.Generic;
    using System.Text;

    namespace ConsoleApplication1
    {
    class Program
    {
    unsafe static void ReadMemory()
    {
    TextWriter fs = new StreamWriter("MemoryDump.txt");
    int* ptr;
    for (int i = 0; i < 100000; i++)
    {
    ptr = (int*)i;
    try
    {
    Console.Write(*ptr);
    fs.Write(*ptr);
    fs.Write(" ");
    Console.Write(" ");
    }
    catch
    {
    fs.Write(" * ");
    Console.Write(" * ");
    }
    }
    fs.WriteLine("** FINISH **");

    }
    static void Main(string[] args)
    {
    ReadMemory();
    Console.WriteLine("** FINISH **");
    Console.ReadLine();
    }
    }
    }

  8. #8
    کاربر جدید آواتار freebird
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    کهکشان راه شیری - پلاک 23
    پست
    28
    سلام
    راه حل Behroz_Cs که تائید میشه. اما چون قبل از اینکه جواب دوست بالایی رو ببینم اینو تایپش کرده بودم و از طرفی هم گفته بودی افست و اینا، اینجا می گذارمش هر کدوم رو خواستی استفاده کنی ، البته شایدم برای من درست نباشه
    به هر حال......
    ببین، من نمی فهمم اصلا از x چرا استفاده کردی؟ تو یه ادرس شروع داری 0x0000؛ حالا مثلا به شمارنده حلقه ات ( I ) می تونی بگی افست.به نظرم تابعت رو طوری تغییر بده که ورودیش افستت باشه ( چون گفتی می خوای با افست کار کنی، می گم)

    using System;
    using System.IO;


    class Readingramcontent
    {

    unsafe public static void ramcontent(int i)
    {
    int j;

    try
    {
    for(j=i;j<50;j++)
    {
    i++;
    Console.WriteLine("Address Of Pointer content is:%d/n",*(ptr+i));

    }
    }
    catch(Exception ex)
    {
    i++;
    ramcontent(i)
    }
    public static void Main()
    {
    int * ptr;
    ptr=0x0000;
    i=0
    ramcontent(i);
    }




    به هر حال تو می تونستی داخل حلقه، همون ptr رو پلاس پلاس کنی. اگر هم می خوای که آدرس شروعت تغییر نکند و اونو داشته باشی، خوب داخل حلقه ات برای بدست آوردن خروجی محتویات ptr+I رو بخون( یعنی دیگه ptr رو پلاس پلاس نکنش) همونطور هم که once4ever گفت، وقتی با استثنا روبرو شدی ptr رو افزایش بده. دیگه چه نیازی به x ‌بود،من که متوجه نشدم.
    در مورد ثبات های cpu ، مطمئن نیستم، اما اگه بتونی تو کد سی شارپت دستورات اسمبلی بنویسی کارت راه می افته؟ منظورم مشکل dos mode و ایناست. راستی اینو هر کی می دونه بگه. سوال منم هست.
    اگرم اسمبلی بدرت نمی خوره: تا جایی که من می دونم register bank تمام cpu ها یه ادرس شروع داره، شاید با بدست آوردن آدرس شروع کارت راه بیفته.

  9. #9
    کاربر دائمی آواتار Behrooz_CS
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    سن
    41
    پست
    168
    دوست عزیز در سی شارپ اسمبلی نداریم چون من خودم قبلا کلی دنبالش گشتم
    مگر اینکه با زبان میانه دات نت
    MSIL
    بتونی یه کاری بکنی

    البته توی
    Visual C++‎ 6
    با دستور
    asm__
    می شه اسمبلی نوشت حالا یه امتحانی هم توی
    Visual C++‎.net 8
    بکن شاید بشه اما از اونجاییکه اون هم تحت دات نته چشمم آب نمی خوره که کار بده

    اما احتمال می دم با
    MSIL
    بشه

  10. #10
    با تشکر ار جوابهاتون !

    مشکل من در ضمینه چاپ محتویات رم حل شد جز دو مورد:
    -اول اینکه من میخام for رو طوری تغییر بدم که شرط خروج اون رسیدن به خونه آخر حافظه باشه
    مثلا به NULL برسه !

    دوم : اینکه من میخام آدرس حافظه رو به صورت آفست چاپ کنم
    مثلا : 0x0ff1

    با تشکر

  11. #11
    مشکل دوم حل شد !

    و اما سومی:
    ما از کجا بدونیم که این مقداری که از خونه های ram میگیرم
    چیه؟؟ و منظور سیستم از نوشتن اینا چی بوده ؟
    یعنی خواسته که اینو به قصد نوشتن عدد بنویسه یا کاراکتر یا یه سیمبول و...



    با تشکر

  12. #12

  13. #13
    کاربر دائمی آواتار Behrooz_CS
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    سن
    41
    پست
    168
    دوست عزیز
    SIR_asad

    تا نگی می خوای چی کار کنی نمی تونیم کمکت کنیم

    شاید این راهی که برای حل مشکلت داری می ری اشتباه باشه

    صورت مسئله را بنویس بلکه بتونیم کمکت کنیم

  14. #14
    من نمی خام کار خاصی انجام بدم !
    فقط خوندن محتویات رم و ریختن اون به یه فایل !

    و دونستن اینکه اینی که ما از رم به صورت یه عدد می گیریم چیه؟؟
    آیا باید به صورت کاراکتری چاپ کنیم یا به صورت عددی و....

    در کل منظور خاصی از نوشتن این برنامه ندارم


    با تشکر

  15. #15
    کاربر دائمی آواتار Behrooz_CS
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    سن
    41
    پست
    168
    معلومه که درس اسمبلی پاس نکردی

    اگه پاس کرده بودی می دونستی که توی حافظه کامپیوتر خر تو خریه (با عرض معذرت)

    هیچ کس در سطح من و تو نمی تونه بفهمه که این چند بایت توی حافظه چیه !!!

    بهتره از فکرش بیای بیرون

  16. #16

  17. #17

    Talking

    نقل قول نوشته شده توسط Behrooz_CS
    معلومه که درس اسمبلی پاس نکردی

    اگه پاس کرده بودی می دونستی که توی حافظه کامپیوتر خر تو خریه (با عرض معذرت)

    هیچ کس در سطح من و تو نمی تونه بفهمه که این چند بایت توی حافظه چیه !!!

    بهتره از فکرش بیای بیرون




    مرسی و دستت درد نکنه بابت راهنماییات!


    موفق باشید

  18. #18
    کاربر دائمی آواتار Behrooz_CS
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    سن
    41
    پست
    168
    من نمی دونم چرا توی این سایت با هر کی
    روراست حرف می زنی بهش بر می خوره
    تازه یه چیزی هم بده کار شدم

  19. #19
    آقای بهروز منظور من طعنه زدن نبود .
    و تشکر کردم امیدوارم که بپذیرید !




    موفق باشید

  20. #20
    با سلام چند باره
    من یه راه حل برای پیدا کردن آخرین خانه رم میخام !

    آیا میشه دو تا catch گذاشت
    یعنی اینکه یکی برای این باشه که اگه اشاره گر ما روی یه خونه protect رفت , کار کنه
    و یکی دیگه اگر اشاره گر به خونه آخر برسه break کنه !
    آیا یه همچین کاری میشه کرد؟؟

    با تشکر

  21. #21
    لطفا یه راه حل برای رسیدن به آخر رم ارایه بدید!


    با تشکر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •