ايران ويج

نسخه‌ی کامل: کار با فايل ها در اسمبلي به وسيله وقفه ها
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام خدمت دوستان محترم:Rolleyes
به علت این که من چند تا ایمیل در زمینه کار با فایل ها دریافت کرده بودم، که می خواستند بدانند چه شکلی در اسمبلی می تواند به فایلی که درون یک درایو وجود دارد دسترسی داشته باشند تصمیم گرفتم توضیح در این زمینه بدهم.
البته بیشتر ایمیل هایی که من دریافت کرده بودم این مطلب را برای نوشتن ویروس می خواستند.Angry
ولی به من چه هر کاری می خواهید انجام دهید.
1. ساختن فایل
2. نوشتن در فایل
3. حذف فایل
4. ساختن پوشه
5. حذف پوشه
6. تغییر نام فایل
7. تغییر نام پوشه
8. باز کردن یک فایل
9. و ...

کد:
org  100h

jmp start

dir1 db "c:\test1", 0
dir2 db "test2", 0
dir3 db "newname", 0
file1 db "c:\test1\file1.txt", 0
file2 db "c:\test1\newfile.txt", 0
file3 db "t1.txt", 0
handle dw ?

text db "lazy dog jumps over red fox."
text_size = $ - offset text
text2 db "hi!"
text2_size = $ - offset text2

start:
mov ax, cs
mov dx, ax
mov es, ax


; create c:\emu8086\vdrive\C\test1
mov dx, offset dir1
mov ah, 39h
int 21h

; create  c:\emu8086\MyBuild\test2
mov dx, offset dir2
mov ah, 39h
int 21h

; rename directory: c:\emu8086\MyBuild\test2 to c:\emu8086\MyBuild\newname
mov ah, 56h
mov dx, offset dir2   ; existing.
mov di, offset dir3   ; new.
int 21h



; create and open file: c:\emu8086\vdrive\C\test1\file1.txt
mov ah, 3ch
mov cx, 0
mov dx, offset file1
int 21h
jc err
mov handle, ax
; write to file:
mov ah, 40h
mov bx, handle
mov dx, offset text
mov cx, text_size
int 21h
; close c:\emu8086\vdrive\C\test1\file1.txt
mov ah, 3eh
mov bx, handle
int 21h
err:
nop


; rename fileL c:\emu8086\vdrive\C\test1\file1.txt to c:\test1\newfile.txt
mov ah, 56h
mov dx, offset file1   ; existing.
mov di, offset file2   ; new.
int 21h


; delete file c:\emu8086\vdrive\C\test1\newfile.txt
mov ah, 41h
mov dx, offset file2
int 21h


; delete directory: c:\emu8086\vdrive\C\test1
mov ah, 3ah
mov dx, offset dir1
int 21h


; create and open file: c:\emu8086\MyBuild\t1.txt
mov ah, 3ch
mov cx, 0
mov dx, offset file3
int 21h
jc err2
mov handle, ax
; seek:
mov ah, 42h
mov bx, handle
mov al, 0
mov cx, 0
mov dx, 10
int 21h
; write to file:
mov ah, 40h
mov bx, handle
mov dx, offset text
mov cx, text_size
int 21h
; seek:
mov ah, 42h
mov bx, handle
mov al, 0
mov cx, 0
mov dx, 2
int 21h
; write to file:
mov ah, 40h
mov bx, handle
mov dx, offset text2
mov cx, text2_size
int 21h
; close c:\emu8086\MyBuild\t1.txt
mov ah, 3eh
mov bx, handle
int 21h
err2:
nop


; delete file  c:\emu8086\MyBuild\t1.txt
mov ah, 41h
mov dx, offset file3
int 21h


; delete directory: c:\emu8086\MyBuild\newname
mov ah, 3ah
mov dx, offset dir3
int 21h

ret
حتما بعدش هم می خواهید بپرسید که چه شکلی می توانید یک پسوند بخصوص را درون یک درایو جستجو کنید که بعد هر چی پیدا کرد حذف کنید؟!ExclamationAngryConfusedExclamationExclamation