PDA

View Full Version : خوندن محتویات ram



Asad.Safari
جمعه 08 اردیبهشت 1385, 10:24 صبح
با سلام !

من یه برنامه برای خواندن محتویات 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
دوشنبه 11 اردیبهشت 1385, 19:34 عصر
با سلام

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

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


با تشکر

Asad.Safari
چهارشنبه 13 اردیبهشت 1385, 16:31 عصر
فکر نکنم این سوال برای مهندسان این بخش خیلی سخت باشه؟؟!!!
اگه یه راهنمایی بکنید ممنون میشم


با تشکر

once4ever
چهارشنبه 13 اردیبهشت 1385, 18:31 عصر
بنظر میرسه مقدار x آدرس رم رو کنترل میکنه و جلو میره.
یه تابع از کدهات درست کن که مقدار x رو بگیره و با 0x0000 اجراش کن
RamReader(int x= 0x0000)
اگه موقعی که به خطا رسیدی x++ کنی و تابع رو دوباره با مقدار x صدا بزنی فکر کنم حل بشه!!
من که نفهمیدم :چشمک:

Asad.Safari
پنج شنبه 14 اردیبهشت 1385, 18:47 عصر
من تو این برنامم از آفست استفاده کردم و
آدرس 0x0000 تو یه x گذاشته میشه !

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

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


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

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

با تشکر

Asad.Safari
سه شنبه 26 اردیبهشت 1385, 09:36 صبح
این برنامه خیلی ضروریه !!

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

و یه سوال دیگه

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


با تشکر

Behrooz_CS
سه شنبه 26 اردیبهشت 1385, 11:09 صبح
دوست عزیز جواب شما اینجاست
:لبخند: :لبخند:

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();
}
}
}

freebird
سه شنبه 26 اردیبهشت 1385, 12:20 عصر
سلام
راه حل 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 ها یه ادرس شروع داره، شاید با بدست آوردن آدرس شروع کارت راه بیفته.

Behrooz_CS
سه شنبه 26 اردیبهشت 1385, 12:48 عصر
دوست عزیز در سی شارپ اسمبلی نداریم چون من خودم قبلا کلی دنبالش گشتم
مگر اینکه با زبان میانه دات نت
MSIL
بتونی یه کاری بکنی

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

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

Asad.Safari
چهارشنبه 27 اردیبهشت 1385, 19:17 عصر
با تشکر ار جوابهاتون !

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

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

با تشکر

Asad.Safari
شنبه 30 اردیبهشت 1385, 18:51 عصر
مشکل دوم حل شد !

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



با تشکر

Amir Oveisi
یک شنبه 31 اردیبهشت 1385, 08:56 صبح
دوستان اگه میشه کد ها رو بین tag بذارین تا بشه خوندشون!!!

Behrooz_CS
یک شنبه 31 اردیبهشت 1385, 12:00 عصر
دوست عزیز
SIR_asad

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

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

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

Asad.Safari
یک شنبه 31 اردیبهشت 1385, 21:26 عصر
من نمی خام کار خاصی انجام بدم !
فقط خوندن محتویات رم و ریختن اون به یه فایل !

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

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


با تشکر

Behrooz_CS
دوشنبه 01 خرداد 1385, 08:50 صبح
معلومه که درس اسمبلی پاس نکردی

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

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

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

Amir Oveisi
دوشنبه 01 خرداد 1385, 11:24 صبح
looooooool

Asad.Safari
سه شنبه 02 خرداد 1385, 08:26 صبح
معلومه که درس اسمبلی پاس نکردی

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

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

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





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


موفق باشید

Behrooz_CS
سه شنبه 02 خرداد 1385, 14:25 عصر
من نمی دونم چرا توی این سایت با هر کی
روراست حرف می زنی بهش بر می خوره
تازه یه چیزی هم بده کار شدم

Asad.Safari
پنج شنبه 04 خرداد 1385, 09:00 صبح
آقای بهروز منظور من طعنه زدن نبود .
و تشکر کردم امیدوارم که بپذیرید !




موفق باشید

Asad.Safari
جمعه 05 خرداد 1385, 09:15 صبح
با سلام چند باره
من یه راه حل برای پیدا کردن آخرین خانه رم میخام !

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

با تشکر

Asad.Safari
سه شنبه 09 خرداد 1385, 09:52 صبح
لطفا یه راه حل برای رسیدن به آخر رم ارایه بدید!


با تشکر