ورود

View Full Version : تفاوت دو سورس اسمبلی



rtvrtv
جمعه 01 آبان 1394, 17:10 عصر
سلام من دارم اسمبلی کار میکنم خیلی روش کار کردم احتمالن یه چیز عجیب کشف بشه از تو کشفیات من
سوال
دو سورس کد زیر چه تفاوتی دارند؟





name "hi-world"

; this example prints out "hello world!"
; by writing directly to video memory.
; in vga memory: first byte is ascii character, byte that follows is character attribute.
; if you change the second byte, you can change the color of
; the character even after it is printed.
; character attribute is 8 bit value,
; high 4 bits set background color and low 4 bits set foreground color.

; hex bin color
;
; 0 0000 black
; 1 0001 blue
; 2 0010 green
; 3 0011 cyan
; 4 0100 red
; 5 0101 magenta
; 6 0110 brown
; 7 0111 light gray
; 8 1000 dark gray
; 9 1001 light blue
; a 1010 light green
; b 1011 light cyan
; c 1100 light red
; d 1101 light magenta
; e 1110 yellow
; f 1111 white



org 100h

; set video mode
mov ax, 3 ; text mode 80x25, 16 colors, 8 pages (ah=0, al=3)
int 10h ; do it!

; cancel blinking and enable all 16 colors:
mov ax, 1003h
mov bx, 0
int 10h


; set segment register:
mov ax, 0b800h
mov ds, ax

; print "hello world"
; first byte is ascii code, second byte is color code.

mov [02h], 'H'

mov [04h], 'e'

mov [06h], 'l'

mov [08h], 'l'

mov [0ah], 'o'

mov [0ch], ','

mov [0eh], 'W'

mov [10h], 'o'

mov [12h], 'r'

mov [14h], 'l'

mov [16h], 'd'

mov [18h], '!'




; color all characters:
mov cx, 12 ; number of characters.
mov di, 03h ; start from byte after 'h'

c: mov [di], 11101100b ; light red(1100) on yellow(1110)
add di, 2 ; skip over next ascii code in vga memory.
loop c

; wait for any key press:
mov ah, 0
int 16h

ret
من برنامه بالا را با کامپایلر emu کامپایل کردم و خروجی گرفتم
بعد دوتا کتاب اسمبلی دیگه دارم یکیش از جعفرنژاده یکی اش از مقسمی
تو یکی از این کتابها این برنامه را نوشته

include io.h
;------------------------------
sseg segment stack
db 256 Dup(?)
sseg ends
;-------------------------
dseg segment
message db "hello" ,DH,AH,0
dseg ends
;---------------------
cseg segment
assume cs:cs:cseg,ds:dseg
start:mov ax,seg dseg
mov ds,ax
output message
mov ax,4ch
int 21h
cseg ends
end start

مگه اسمبلی هم ورژن داره اینا کدومش استانداره من اگه بخوام بصورت کاربردی از اسمبلی استقاده کنم کدومش باید یاد بگیرم اسم کدنویسی اول چیه؟ دومی چیه ؟ چرا مثل زبان سی استاندارد نداره؟
کتاب مرجع خوب چی هست که از پایه آموزش بده؟

pbm_soy
شنبه 02 آبان 1394, 00:20 صبح
اسمبلی ورزن ندارد در اصل کامپایلرهای متفاوتی دارد که کمی باهم فرق دارند
هر چند که برنامه نویسی اسمبلی سبکهای مختلف دارد مانند همین مثال خودت
مثال اول آخرش به یک فایل اجرایی با پسوند com ختم میشود که برنامه اجرایی مخصوص سیستم عاملهای قدیمی مایکروسافت مانند داس بود ولی دومی ساختار برنامه exe است
ساختار برنامه اسمبلی بسته به اینکه از چه کامپایلری استفاده میکنید و چه نوع فایلی میخواهید ایجاد کنید و همینطور تحت داس اجراشود ویا ویندوز.، کمی ساختار فرق میکند
وحتی منطبق با پردازنده 8088،8086 باشد ویا قرار است از امکانات پردازنده های جدیدتر استفاده شود مانند اعداد بزرگ، حافظه بیشتر و چند بیتی بودن برنامه!

rtvrtv
شنبه 02 آبان 1394, 07:49 صبح
مرسی خیلی عالی بود
خب من این اطلاعات جدید برداشت کردم
که خروجی فایل اسمبلی میتونه .com یا .exe باشه
خب یه سرچی زدم 5-6 ساعت هم با نرم افزارها کار کردم و نتایج زیر فهمیدم امیدوارم کسی استفاده نادرست نکنه
-----------------------------------------------------------------------------------
1-فایل com بر فایل exe ارجح تر است و ویروس نویسان از این ترفند استفاده میکردن و فالشون با نام فایلهایی اجرایی سیستم عامل مثل notepad مینوشتن! (با cmd تست کردم صحیح بود)
2-فایل com در ویندوز 8 پشتیبانی نمیشه تنها میتونین از emulator برا اجرای این فایلها در 8 استفاده کرد
3-فایلهای com تک سگمنتی هستند و تا ظرفیت 64کیلوبایت برخلاف exe که چند سگمنتی معمولا 3 تایی هستند و این محدودیت ندارن.

4-فایل exe از برنامه های مختلف میتونه تولید بشه (مثلا اتوران ساز-و ...)
5-محتوای هگز فایل exe را میشه با یک هگز ادیتور مشاهده کرذ .من محتوای یه فایل exe با نرم افزار Hex Workshop Hex Editor (64 bit) مشاهده کردم یکسری عدد بود که میشد تغییرشون داد!
6-برنامه هایی هستند که فایل exe میگیرن و میگن با چه نرم افزاری تولید شده است.
7-برنامه هایی هستند که فایل exe میگیرن و آیکون و .. فایل نشون میدن من با Resource hacker فایل exe باز کردم یکسری آیکون و مشخصات که میشه تغییرشون داد
8-با برنامه Ollydbg همون فایل exe باز کردم یکسری کد اسمبلی بود که قابلیت تغییر هم دارن!
---------------------------------------------------------------------------------------------------------

pbm_soy
شنبه 02 آبان 1394, 11:23 صبح
برای کاملتر کردن گفته شما در مورد فایهای com باید بگم که در این نوع برنامه نویسی فقط از یک سگمنت برای بخش داده و کد و stack برنامه استفاده میشد و حجمشون هم کمتر بود و همینطور ساختار ساده تری نسبت به exe داشتند
در ضمن ویروس نویسها بخاطر ساختار ساده com معمولا آنها را بیشتر هدف قرار میدادند و بستر آلوده سازی قرار میدادند