۱۴-دى-۱۳۸۹, ۲۲:۳۶:۲۵
با سلام خدمت دوستان محترم:
به علت این که من چند تا ایمیل در زمینه کار با فایل ها دریافت کرده بودم، که می خواستند بدانند چه شکلی در اسمبلی می تواند به فایلی که درون یک درایو وجود دارد دسترسی داشته باشند تصمیم گرفتم توضیح در این زمینه بدهم.
البته بیشتر ایمیل هایی که من دریافت کرده بودم این مطلب را برای نوشتن ویروس می خواستند.
ولی به من چه هر کاری می خواهید انجام دهید.
1. ساختن فایل
2. نوشتن در فایل
3. حذف فایل
4. ساختن پوشه
5. حذف پوشه
6. تغییر نام فایل
7. تغییر نام پوشه
8. باز کردن یک فایل
9. و ...
حتما بعدش هم می خواهید بپرسید که چه شکلی می توانید یک پسوند بخصوص را درون یک درایو جستجو کنید که بعد هر چی پیدا کرد حذف کنید؟!
به علت این که من چند تا ایمیل در زمینه کار با فایل ها دریافت کرده بودم، که می خواستند بدانند چه شکلی در اسمبلی می تواند به فایلی که درون یک درایو وجود دارد دسترسی داشته باشند تصمیم گرفتم توضیح در این زمینه بدهم.
البته بیشتر ایمیل هایی که من دریافت کرده بودم این مطلب را برای نوشتن ویروس می خواستند.
ولی به من چه هر کاری می خواهید انجام دهید.
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