ورود

View Full Version : برنامه نویسی اسمبلی با nasm



ofthesun
پنج شنبه 22 آبان 1393, 10:15 صبح
سلام به همه عزیزان
دوستان بنده تصمیم داشتم تا برنامه نویسی به زبان اسمبلی رو در محیط nasm داخل سیستم عامل لینوکس توزیع اوبونتو شروع کنم . ولی هیچ اطلاعاتی درباره نحوه کار با نرم افزار nsam ندارم . ممنون میشم کمکم کنید

xman_1365_x
پنج شنبه 22 آبان 1393, 10:54 صبح
nasm محیط نیست یک اسمبلر متن باز هست که برای پلتفرم های مختلف نوشته شده، فکر میکنم اصلا به سایت سازندش (http://www.nasm.us/) نرفتید
اگرنه جواب سوالاتتون رو با راهنما کاملش میگرفتید، به عنوان مثال:
http://www.nasm.us/doc/nasmdoc1.html
http://www.nasm.us/doc/nasmdoc2.html
http://www.nasm.us/doc/nasmdoc8.html
اینم لیست کاملش
http://www.nasm.us/xdoc/2.11.06/nasmdoc.pdf
یا
http://www.nasm.us/xdoc/2.11.06/html/nasmdoc0.html
دوست عزیز میتونستید با جستجو در گوگل سریع تر به جوابتون برسید
http://www.csee.umbc.edu/portal/help/nasm/sample.shtml
https://www.hackthissite.org/articles/read/1110/
http://cs.lmu.edu/~ray/notes/nasmexamples/
اگر مشکلی بود سوال کنید
موفق باشی

ofthesun
پنج شنبه 22 آبان 1393, 11:25 صبح
ممنون بابت جوابتون عزیز . بنده در یک فایل متنی کد اسمبلی رو زدم و با ترمینال به مسیر فایل رفتم , بعد باید با چه دستوری object درست کنم و بعد هم اجراش کنم ؟ چون بنا به نوشته متن کتاب زمانی که دستور nasm -f elf exam.asm رو میزنم ترمینال متن error : symbol 'adres' undefined میده . کجای کارم اشتباه هستش ؟!‌

xman_1365_x
پنج شنبه 22 آبان 1393, 12:21 عصر
ممنون بابت جوابتون عزیز . بنده در یک فایل متنی کد اسمبلی رو زدم و با ترمینال به مسیر فایل رفتم , بعد باید با چه دستوری object درست کنم و بعد هم اجراش کنم ؟ چون بنا به نوشته متن کتاب زمانی که دستور nasm -f elf exam.asm رو میزنم ترمینال متن error : symbol 'adres' undefined میده . کجای کارم اشتباه هستش ؟!‌
از متن خطا میشه اینو گفت که توی کدتون از 'adres' استفاده کردید، که اون رو به عنوان سمبل در دیتا سگمنت یا بی اس اس یا ... معرفی نکردید، اسمبلر به اون خط میریسه میگه این سمبل تعریف نشده هست.
اگر نتونستید درستش کنید سورستون رو بزارید بگم کجاش مشکل داره

ofthesun
پنج شنبه 22 آبان 1393, 19:17 عصر
ممنون . اون مشکل حل شد !‌ کد برنامه مشکل داشت !‌ اما حالا به ی ایراد تازه برخورد کردم ! دستورات زیر رو وارد کردم :

nasm -f elf -l hello.lst hello.asm
gcc -o hello hello.o همین قسمت رو که وارد می کنم ارور زیر رو میده :
/usr/bin/ld: i386 architecture of input file `a.o' is incompatible with i386:x86-64 output
collect2: error: ld returned 1 exit status
فک کنم بخاطر تفاوت بین نسخه نصب شده nasm و معماری cpu باشه !‌ درسته ؟!
کدوم نسخه رو باید نصب کنم ؟‌
چطوری این ایراد رو درست کنم ؟

xman_1365_x
جمعه 23 آبان 1393, 06:40 صبح
ممنون . اون مشکل حل شد !‌ کد برنامه مشکل داشت !‌ اما حالا به ی ایراد تازه برخورد کردم ! دستورات زیر رو وارد کردم :

nasm -f elf -l hello.lst hello.asm
gcc -o hello hello.o همین قسمت رو که وارد می کنم ارور زیر رو میده :
/usr/bin/ld: i386 architecture of input file `a.o' is incompatible with i386:x86-64 output
collect2: error: ld returned 1 exit status
فک کنم بخاطر تفاوت بین نسخه نصب شده nasm و معماری cpu باشه !‌ درسته ؟!
کدوم نسخه رو باید نصب کنم ؟‌
چطوری این ایراد رو درست کنم ؟
نسخه اوبنتو شما 64 بیتی هست لینکر یا کامپایلر به طور پیش فرض اون رو 64 تشخیص میده و به خطا میخوره باید بهش گفت ساختار elf 32 بیتی استفاده کنه
از دستور زیر استفاده کن، بجای yourEntry، نقطه شروع برنامه خودت رو بهش معرفی کن
ld -m elf_i386 -s -o hello hello.o -e yourEntry

برای استفاده از gcc میتونی از دستور زیر استفاده کنی اما قبلش یکبار این دستور رو بزن sudo apt-get install gcc-multilib تا فایل های کتابخونش نصب شه( EntryPoint پیش فرضش main هست)
gcc -m32 -s -o hello hello.o

ضمنا برای تشکر نیازی به گفتنش نیست یه button برای این کار طراحی شده،موفق باشی

ofthesun
یک شنبه 25 آبان 1393, 20:11 عصر
عزیز مشکل بر طرف شد . بر طبق کتابی که معرفی کرده بودید ‍عمل کردم . و دستورات زیر را وارد کردم .
nasm -f elf64 a.asm
gcc a.o -o a
./a
راستی ممنون که درباره دکمه تشکر بهم گفتید . از این به بعد ازش استفاده می کنم .