-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathread-file.Asm
91 lines (69 loc) · 2.45 KB
/
read-file.Asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
.386
.model flat,STDCALL
option casemap :none ;case sensitive
include read-file.inc
.code
Begin:
call main
invoke ExitProcess,NULL
; âëàñíà ïðîöåäóðà âèä³ëåííÿ ïàì'ÿò³
Mem_Alloc PROC Buf_Size:DWORD
add Buf_Size,4 ; âèä³ëÿºìî áóôåð íà 4 áàéòè á³ëüøèé
invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT, Buf_Size ; âèä³ëÿºìî îáëàñòü ó äèíàì³÷í³é ïàì'ÿò³
push eax ; çáåð³ãàºìî õåíäë îáëàñò³ âèä³ëåíîãî áóôåðà ó ñòåê
invoke GlobalLock,eax ;ô³êñóºìî ó ðåàëüí³é
pop [eax] ;Âèòÿãíåìî ç³ ñòåêó çíà÷åííÿ ³ çàïèøåìî ó ïåðø³ 4 áàéòà âèä³ëåíîãî ìàñèâó,
;öå çíà÷åííÿ º õåíä îáëàñò³ âèä³ëåíî¿ îáëàñò³
;íàñòóïí³ Buf_Size áàéò âèêîðèñòîâóºìî ÿê ìàñèâ
add eax,4 ;çñóâàºìî âêàç³âíèõ ïî÷àòêó ìàñèâó íà 4 áàéòè, îñê³ëüêè ïåðø³ 4 áàéòè
;çàíÿò³ çíà÷åííÿì õåíäëó áóôåðà
ret ; âèõîäèìî ç ïðîöåäóðè
Mem_Alloc endp
; âëàñíà ïðîöåäóðà çíèùåííÿ ïàì'ÿò³.
Mem_Free PROC DATA:DWORD
mov eax,DATA ;êîï³þºìî çíà÷åííÿ ïàðàìåòðà ïðîöåäóðè ó ðåã³ñòð eax, ïàðàìåòðîì º
;ïî÷àòêîâà (ðîáî÷à) àäðåñà áóôåðà ( ïî÷àòîê + 4 áàéòè)
sub eax,4 ;ïàì'ÿòàºìî, ùî ïåðøèõ 4 áàéòè ìàñèâó - öå õåíäë áóôåðà
push [eax] ;áåðåìî ÷îòèðüîõ áàéòíå çíà÷åííÿ ïî àäðåñ³, ùî ëåæèòü ó ðåã³ñòð³ eax, çàíîñèìî éîãî ó ñòåê
invoke GlobalUnlock,eax ;ðîçáëîêîâóºìî ïàì'ÿòü (âñþ ðîçì³ðîì Buf_Size+4)
call GlobalFree ;îñê³ëüêè ïàðàìåòð âæå ó ñòåö³, âèêëèêàºìî ïðîöåäóðó áåç ïàðàìåòð³â, çà äàïîìîãîþ ³íñòðóêö³¿
;call (çíèùóºìî õåíäåë áóôåðà)
ret ;âèõ³ä ç ïðîöåäóðè
Mem_Free endp
main proc
invoke Mem_Alloc, sizeof OPENFILENAME
mov edi, eax
assume edi: ptr OPENFILENAME
invoke GetCurrentDirectory, 260, addr initdir
mov [edi].lStructSize, sizeof OPENFILENAME
mov [edi].lpstrFile, offset filename
mov [edi].nMaxFile, 260
mov [edi].lpstrInitialDir, offset initdir
invoke GetOpenFileName, edi
cmp eax, 0
je exit
invoke Mem_Alloc, 4000h
mov pmem, eax
invoke CreateFile, addr filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
cmp eax, -1
je exit
mov hFile, eax
invoke ReadFile, hFile, pmem, 4000h, readed, 0
invoke MessageBox, 0, pmem, 0, MB_OK
invoke GetSaveFileName, edi
cmp eax, 0
je exit
invoke CreateFile, addr filename, GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
cmp eax, -1
je exit
mov hFile, eax
invoke lstrlen, pmem
invoke WriteFile, hFile, pmem, eax, addr readed, 0
exit:
invoke CloseHandle, hFile
invoke Mem_Free, edi
assume edi:DWORD
invoke Mem_Free, pmem
ret
main endp
end Begin