PDA

View Full Version : مبتدی: دسترسی به داده های RAM



acilios
سه شنبه 23 شهریور 1389, 12:46 عصر
با سلام خدمت دوستان.
میخواستم بدونم آیا می شه به اطلاعات موجود در رم سیستم دسترسی داشت ؟ یعنی بتوان داده هایی که در حال حاضر در رم سیستم هستند رو بدست آورد ؟ اصلا" سیستم عامل اجازه چنین کاری رو میده ؟
با تشکر.

tdkhakpur
سه شنبه 23 شهریور 1389, 17:51 عصر
اصلا" سیستم عامل اجازه چنین کاری رو میده ؟
اگر در حالت حقیقی یعنی همان حالتی که برای داس وجود دارد هستید میتوانید با اشاره به آدرس به هر جای ram دسترسی داشته باشید ولی اگر در حالت حفاظت شده یعنی حالتی که ویندوز شما در حال اجراست نمیتوانید این کار را انجام بدید و مانع این کار هم پردازنده هست نه سیستم عامل.

مصطفی ساتکی
سه شنبه 23 شهریور 1389, 22:49 عصر
اصلا" سیستم عامل اجازه چنین کاری رو میده ؟
تو مد User نه ولی kernel می تونی.البته application تو مد kernel هم تو دلفی می تونی بنویسی که با ابزارهایی که با C++ Bulider تهیه شده می تونی exe رو بسازی.

acilios
چهارشنبه 24 شهریور 1389, 00:38 صبح
با تشکر از پاسخ دوستان.

مانع این کار هم پردازنده هست نه سیستم عامل.چرا سی پی یو ؟؟؟


منظورم از این کار اینه که ، میخوام بدونم میشه برنامه ای که در حال اجراست رو به هارد انتقال داد و بعدا (پس از خاموش کردن) دوباره اونو به رم فرستاد ؟؟! یه چیزی شبیه Hibernet که سیستم عامل انجام میده.
ممنون.

esmit61
چهارشنبه 24 شهریور 1389, 11:55 صبح
منظورم از این کار اینه که ، میخوام بدونم میشه برنامه ای که در حال اجراست رو به هارد انتقال داد و بعدا (پس از خاموش کردن) دوباره اونو به رم فرستاد ؟؟! یه چیزی شبیه Hibernet که سیستم عامل انجام میده.
بنظرم این کار رو نمی تونید انجام بدید. این کاری که شما میخواهید انجام بدید لازمه اش اینه که کنترل سیستم عامل رو در اختیار خودتون قرار بگیرید،اونم قبل از لودشدن درایورها و اطلاعات دیگه.حتی اگر از Device هم استفاده کنید، چون از قبل معلوم نیست که کجای ram لود می شوند،نمیشه این کار رو انجام داد

acilios
چهارشنبه 24 شهریور 1389, 12:54 عصر
از قبل معلوم نیست که کجای ram لود می شوند منظوره من بعد از اجراست چون سیستم عامل برای هر برنامه ای که اجرا بشه یک محدوده از رم رو تخصیص میده ، پس میشه فهمید که کجای رم قرار داره؛ بعد از اون هم اطلاعات نوشته شده توی اون بخش رو یه جای دیگه(هارد)قرار داد.
میشه ؟

esmit61
چهارشنبه 24 شهریور 1389, 14:06 عصر
منظورمو بد رسوندم
فرض کنید برنامه شما اجرا شده و در آدرس 1000 تا 2000 حافظه ram قرار گرفته. حالا این قسمت از حافظه رو منتقل میکنید به هارد(به اصطلاح خودتون Hibernate) میکنید.از این به بعد سیستم عامل فضای آدرس 1000 تا 2000 رو آزاد تلقی میکنه و ممکنه یه برنامه دیگه رو توی این آدرس لود کنه.
حالا شما میخواهید اون تصویری از ram که توی هارد ذخیره شده بود رو دوباره به ram منتقل کنید. مسلماً توی فضای 1000 تا 2000 نمیتونید.چون ممکنه یه برنامه دیگه باشه. باید بگردید دنبال 1000 بایت خونه خالی و خود این نیازمند تنظیم رجیسترها و ... هست.
روش دیگه هم اینه که به سیستم عامل بفهمونید که این فضای 1000 تا 2000 ، فضای خالی نیست. و این هم تا زمانی امکان پذیر هست که سیستم ریست نشه. با یه بار ریست کردن نمیتونید بهش حالی کنید که این فضا خالی نیست

acilios
چهارشنبه 24 شهریور 1389, 19:06 عصر
سلام دوست عزیز؛
من نمیخوام اینجا بحث سیستم عامل رو داشته باشیم(در راستای عدم انحراف از موضوع) ، کلا میخواستم بدونم که میشه با برنامه نویسی این کار رو کرد یا نه ؛
یعنی همین که اطلاعات یه بخش رو بشه ذخیره کرد کافیه؛
در حقیقت میخوام یه برنامه ی در حال اجرا مثل اینترنت اکسپلورر رو توی هارد قرار بدم ؛
این کار شدنی ؟؟؟ اونم با برنامه نویسی ؟:متفکر:

esmit61
چهارشنبه 24 شهریور 1389, 22:50 عصر
خیر!!!!!!!!!!!!!!!

مصطفی ساتکی
پنج شنبه 25 شهریور 1389, 07:44 صبح
بنظرم این کار رو نمی تونید انجام بدید. این کاری که شما میخواهید انجام بدید لازمه اش اینه که کنترل سیستم عامل رو در اختیار خودتون قرار بگیرید،اونم قبل از لودشدن درایورها و اطلاعات دیگه.حتی اگر از Device هم استفاده کنید، چون از قبل معلوم نیست که کجای ram لود می شوند،نمیشه این کار رو انجام دادشما اين اطلاعات رو از كدوم منبعي ذكر مي كنيد تو kernel mode قادر به كليه عمليات خواهيد بود. در ضمن شما فضاهاي ازز حافظه رو كه ذخيره و بازيابي مي كنيد مشخصه .مثلاً فضاي مربوط به سخت افزار و device Driver ها ذخيره بشه كه چي سودي نصيب شما ميشه و فايدش چيه.

خیر!!!!!!!!!!!!!!! شما اين نظرات رو از روي چه حسي عنوان مي فرمايد مشخص نيست يعني سخت افزار در اختيار برنامه نويس سيستم و اونهم عاجز كاري كه مي خواد رو انجام بده.در ضمن در kernel mode هيچ چيز نشد نداري

vcldeveloper
پنج شنبه 25 شهریور 1389, 11:10 صبح
فرض کنید برنامه شما اجرا شده و در آدرس 1000 تا 2000 حافظه ram قرار گرفته. حالا این قسمت از حافظه رو منتقل میکنید به هارد(به اصطلاح خودتون Hibernate) میکنید.از این به بعد سیستم عامل فضای آدرس 1000 تا 2000 رو آزاد تلقی میکنه و ممکنه یه برنامه دیگه رو توی این آدرس لود کنه.
سیستم عامل تضمینی به یک پروسه User Mode نمیده که کل داده های مربوط به اون پروسه را در بخشی از حافظه به ترتیب ذخیره کنه؛ فضای آدرس یک پروسه ممکنه به Pageهای مختلف در نقاط مختلف حافظه Map بشه. همچنین سیستم عامل در شرایط عادی تضمینی نمیده که همه داده های مورد نیاز یک پروسه را در RAM نگهداری کنه؛ مناسب با شرایط، ممکنه سیستم عامل بخشی از داده های یک پروسه را به Page File منتقل کنه (مگر اینکه پروسه خودش به صراحت از سیستم عامل درخواست کنه که برای بخشی از داده هایشان این کار صورت نگیره).


در حقیقت میخوام یه برنامه ی در حال اجرا مثل اینترنت اکسپلورر رو توی هارد قرار بدم
نرم افزارهای مختلفی هستند که می تونند فضای آدرس یک پروسه را روی دیسک Dump کنند، حتی در ویندوز ویستا و ویندوز 7، شما می تونید از طریق Task Manager هم یک Memory Dump از پروسه مورد نظرتون بگیرید.


خیر!!!!!!!!!!!!!!!
چی میگید، عزیز جان؟!!!

acilios
پنج شنبه 25 شهریور 1389, 11:46 صبح
از پاسخ درست شما دوستان ممنونم؛


نرم افزارهای مختلفی هستند که می تونند فضای آدرس یک پروسه را روی دیسک Dump کنندمیشه چند نمونه معرفی کنید ؟


شما می تونید از طریق Task Manager هم یک Memory Dump از پروسه مورد نظرتون بگیرید.چطوری ؟!

Felony
پنج شنبه 25 شهریور 1389, 13:01 عصر
چطوری ؟!
تو Task Manager روی پروسه مورد نظر راست کلیک کنید و Create Dump File رو انتخاب کنید .

acilios
پنج شنبه 25 شهریور 1389, 19:25 عصر
تو Task Manager روی پروسه مورد نظر راست کلیک کنید و Create Dump File رو انتخاب کنید . اگه منظورتون ویندوز اکس پی هست ، من این گزینه رو ندارم!

Felony
پنج شنبه 25 شهریور 1389, 20:22 عصر
اگه منظورتون ویندوز اکس پی هست ، من این گزینه رو ندارم!
پست آقای کشاورز رو مروری بکنید :

نرم افزارهای مختلفی هستند که می تونند فضای آدرس یک پروسه را روی دیسک Dump کنند، حتی در ویندوز ویستا و ویندوز 7، شما می تونید از طریق Task Manager هم یک Memory Dump از پروسه مورد نظرتون بگیرید.

vcldeveloper
جمعه 26 شهریور 1389, 01:07 صبح
اگه منظورتون ویندوز اکس پی هست ، من این گزینه رو ندارم!
من گفتم در ویندوز ویستا و 7. برای XP خودِ ویندوز یک ابزار Command line برای این کار ارائه میکنه. غیر از اون، می تونید از ابزارهای سایر شرکت ها هم استفاده کنید، مثلا این برنامه رایگان هست:
http://www.nirsoft.net/utils/cprocess.html

acilios
جمعه 26 شهریور 1389, 09:16 صبح
از پاسخ شما دوستان سپاسگزارم.



من گفتم در ویندوز ویستا و 7ببخشید.:خجالت:

برنامه CurrProcess رو دانلود کردم ، این برنامه گزارشات کاملی از یه پروسس (مثل آدرس شروع و پایان و ماژول های اون)رو میده.
این برنامه فقط خروجی txt و html داره ، برای ذخیره خود پروسس یا همون برنامه از کجا باید شروع کنم ؟ یعنی باید کتاب یا موضوع خاصی رو مطالعه کنم تا بتونم چنین کاری رو انجام بدم؟
بازم ممنون.