PDA

View Full Version : حرفه ای: دسترسی به ثبات های پردازنده در C Sharp



JaVa
سه شنبه 13 تیر 1391, 20:51 عصر
با سلام و خسته نباشید...

در زبان برنامه نویسی C#‎‎ امکان دسترسی به ثبات های پردازنده(32 بیتی = EAX,EBX,...) و(16 بیتی = AX,BX,... ) وجود داره یه خیر ؟

با تشکر از شما.../:متفکر:

the king
سه شنبه 13 تیر 1391, 22:00 عصر
کلا کد تان در یک ماشین مجازی اجرا میشه، اما می توانید یک فایل DLL رو فرضا با Microsoft Visual C++ 6.0 ایجاد کنید که
یک یا چند تابع Export کنه که داخلشان هر کاری که خواستید با کد های اسمبلی انجام دهید و مقدار مورد نیاز، فرضا مقدار EAX رو به عنوان خروجی
تابع برگردانید. سپس در کد Net. تان این توابع رو که در کتابخانه DLL قابل دسترسی اند بکار ببرید.

فقط نکته اینجا است که اگر فقط قصد تان خواندن مقادیر فعلی رجیستر ها است، به دلیل اینکه کد های Net. موقع اجرا یک ماشین مجازی مستقل دارند، مقدار
رجیستر هایی که بدست می آورید ارزش خواندن ندارند. یعنی شبیه قابلیت Inline Assembly ای که بعضی زبان ها دارند عمل نمی کنه.
وقتی موقع اجرای کد داخل DLL می رسه، یک پاکسازی اساسی روی مقادیر رجیستر ها انجام شده و ارتباطی با آنچه که داخل کد های #C داشتید
انجام می دادید نداره. این دیگه مثل پاسکال و توربو سی نیست که همونجا کد اسمبلی می نوشتید و مقادیر رجیستر ها به کد های قبلی ربط داشتند.
کلا در زبان هایی که بعد از کامپایل شدن تحت ماشین مجازی اجرا می شوند، مقادیر رجیستر های پردازنده ممکنه با نتیجه اجرای کد قبلی ارتباطی نداشته باشه.

JaVa
سه شنبه 13 تیر 1391, 22:16 عصر
اگه من با اسمبلی یه برنامه نوشتم و بخوام تغییراتی که هر لحظه در ثبات ها میفته رو ببینم یعنی یه چیزی مثل پنجره Watch ویژوال استودیو،، میشه یا نه؟؟؟؟
اگه منظورم رو خوب نرسوندم بگید تا بیشتر توضیح بدم.

و اگه بخوام روی پرچم های پردازنده مثل TF(که در صورت 1 بودنش برنامه رو قدم به قدم اجرا می کنه) تغییرات ایجاد کنم میشه یا نه؟؟

returnx
سه شنبه 13 تیر 1391, 22:28 عصر
فکر کنم برای دسترسی به ثبات ها از طریق C# بتونید به روشی که در لینک زیر اومده استفاده کنید :
http://barnamenevis.org/showthread.php?256514-ساخت-اسمبلر-با-وی-بی