PDA

View Full Version : کار با اسمبلی پیشرفته و دیباگ



saman2
پنج شنبه 12 بهمن 1391, 01:17 صبح
با سلام به همه اسمبلی کاران...
من با دو تا مشکل مواجه شدم که بسیار هم مهم هستن:
اولیش اینکه من با یکسری بخشها و دستورات پیشرفته (تر) حداقل در محیط MASM مشکل دارم. مثلا وقتی از ثباتهای توسعه یافته 32 بیتی استفاده میکنم اسمبلر ارور میده! همچنین مثلا از دستوراتی مثل movsx.
مشکل دوم در کار با برنامه دیباگه که سیستم اجراش نمیکنه و پیغام: Incorrect Dos version میده. یعنی برای کار با دیباگ حتما باید از محیط داس اقدام کرد؟!

xman_1365_x
پنج شنبه 12 بهمن 1391, 09:04 صبح
مشکل اول:
اول کدتون .386 بنویسید،اگر کد داس مینویسید باید ES رو مقدار دهی اولیه کنید
مشکل دوم:
در ویندوز های 64 بیت قابل اجرا نیست و در 32 بیتی ها به صورت پیش فرض موجود هست(میتونید از داس باکس استفاده کنید،یک نمونه دیباگر داس 32 هم قبلا قرار دادم جستجو کنید پیدا میکنید) ، برای دیباگ برنامه ویندوزی از دیباگر سطح کاربر مثل ollydbg استفاده کنید.
موفق باشی

saman2
یک شنبه 15 بهمن 1391, 00:29 صبح
مورد اول: راستش من این کد رو هم میذارم (من تو نت پد کد مینویسم) ولی باز هم تو MASM ارور میده. البته TASM اینطور نیست ولی خب من با MASM راحتترم و بهش عادت کردم!
مورد دوم: من ویندوزم ایکس پی سرویس پک 3 هست. من از Command Prompt استفاده کردم که جواب نداد.
و اینکه، منظورتون از برنامه ویندوزی رو ممکنه توضیح بدید؟ منظورتون محیطهای اسمبلی ویندوزیه؟
ممنون

xman_1365_x
یک شنبه 15 بهمن 1391, 09:40 صبح
راستش من این کد رو هم میذارم (من تو نت پد کد مینویسم) ولی باز هم تو MASM ارور میده. البته TASM اینطور نیست ولی خب من با MASM راحتترم و بهش عادت کردم!
MASM32 یک ادیتور داخلی به اسم QEDITOR داره که میتونید ازش استفاده کنید،کدتون رو بزارید تا بیشتر راهنمایی کنم

من ویندوزم ایکس پی سرویس پک 3 هست. من از Command Prompt استفاده کردم که جواب نداد.
مشکل محیط ساخت نیست،لینکر با توجه به محیط اجرایی شما فایل قابل اجرا تولید میکنه،اگر برنامه برای اجرا در داس یا ویندوز باشه که کار هایی که گفتم باید انجام بشه

منظورتون از برنامه ویندوزی رو ممکنه توضیح بدید؟ منظورتون محیطهای اسمبلی ویندوزیه؟
منظورم اینه که فایل خروجی یک PE ویندوز هست،این برنامه قابل اجرا در ویندوز هست با ساختار حافظه ویندوز flat و استفاده از API های سیستمی برای ارتباط با Device ها

موفق باشید

saman2
دوشنبه 16 بهمن 1391, 23:15 عصر
یعنی تو همون QEDITOR میشه کدها رو هم اسمبل و لینک و اجرا کرد؟
من سعی کردم اما اسمبل نشد یا من روششو نمی دونستم.
اگه در مورد این ادیتور راهنمایی کنید ممنون میشم. فکر نکنم کد پیچیده ای باشه فقط مشکل من الان با محیط هاست.
ممنون

xman_1365_x
سه شنبه 17 بهمن 1391, 09:22 صبح
یعنی تو همون QEDITOR میشه کدها رو هم اسمبل و لینک و اجرا کرد؟
بله تقریبا یک IDE هست،فقط برای اجرا باید از طریق کامند اسم فایل رو بدین تا اجرا بشه برای دیباگ هم میتونید از ollydbg استفاده کنید.
اینم یک نمونه کد:

.386
.MODEL flat, stdcall

includelib lib\kernel32.lib

STD_OUTPUT_HANDLE EQU -11

GetStdHandle PROTO, nStdHandle: DWORD
WriteConsoleA PROTO, handle: DWORD, lpBuffer:PTR BYTE, nNumberOfBytesToWrite:DWORD, lpNumberOfBytesWritten:PTR DWORD, lpReserved:DWORD
ExitProcess PROTO, dwExitCode: DWORD

.data
consoleOutHandle dd ?
bytesWritten dd ?
message db "Hello World",13,10
lmessage dd 13

.code
main PROC
INVOKE GetStdHandle, STD_OUTPUT_HANDLE
mov consoleOutHandle, eax
mov edx,offset message
pushad
mov eax, lmessage
INVOKE WriteConsoleA, consoleOutHandle, edx, eax, offset bytesWritten, 0
popad
INVOKE ExitProcess,0
main ENDP
END main

شما کد نمونه که استادتون گفته بزارید ببینم با چه ساختاری هست و چی میخواین تا بهتر راهنمایی کنم
در کل
برای ویندوز :
میتونید از masm32، winasm و یا radasm استفاده کنید.
برای داس:
masm32,fasm,nasm,tasm و... به عنوان کامند لاین اسمبلر،فایل رو اسمبل کنید و برای لینک هم از لینکر های 16 بیتی استفاده میشه
طریقه ساختن فایل اجرایی و کامند هاشم قبلا گفته شده جستجو کنید.
میتونید از شبیه ساز emu8086 هم استفاده کنید.

موفق باشی

bahar1370
پنج شنبه 08 فروردین 1392, 18:35 عصر
سلام
من winasm رو دانلود کردم و برنامه بالا یا برنامه های دیگه که تو سایت وقتی توش می ن.یسم جواب نمی ده ؟؟؟؟؟