Repository navigation
Expand file tree
/
Copy pathexample.asm
More file actions
93 lines (77 loc) · 1.72 KB
/
Copy pathexample.asm
File metadata and controls
93 lines (77 loc) · 1.72 KB
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
92
93
.386
.model flat,stdcall
.data
GetStdHandle PROTO, nStdHandle:DWORD
WriteConsoleA PROTO, handle:DWORD, lpBuffer:PTR BYTE, nNumberOfCharsToWrite:DWORD, lpNumberOfCharsWritten:PTR DWORD, lpReserved:PTR DWORD
ReadConsoleA PROTO, handle:DWORD, lpBuffer:PTR BYTE, nNumberOfCharsToRead:DWORD, lpNumberOfCharsRead:PTR DWORD, lpReserved:PTR DWORD
ConsoleInput DB 1000 DUP(0)
console_pointer DWORD 0
charsRead DWORD 0
returnAddress DWORD 0
bytesWritten DWORD 0
.code
main PROC
MOV returnAddress, ESP
PUSH EBP
MOV EBP, ESP
;;STRING DECLARATION
MOV EDX, 0
PUSH EDX
;;STRING ASSIGNMENT
MOV AL, 0
MOV AH, 0
PUSH AX
MOV AL, 111
MOV AH, 0
PUSH AX
MOV AL, 108
MOV AH, 108
PUSH AX
MOV AL, 72
MOV AH, 101
PUSH AX
MOV EDX, ESP
PUSH EDX
MOV DWORD PTR [EBP - 4], EDX
MOV EDX, [EBP - 4]
CALL StringLength
MOV ECX, EAX
INVOKE GetStdHandle, -11
INVOKE WriteConsoleA, EAX, EDX, ECX, bytesWritten, 0
MOV EAX, 0
MOV ESP, returnAddress
RET
main ENDP
StringLength PROC USES EDX EBX
MOV EAX, 0
StartL:
CMP Byte Ptr [EDX + EAX], 0
JE EndL
CMP Byte Ptr [EDX + EAX], BL
JE EndL
INC EAX
JMP StartL
EndL:
ret
StringLength ENDP
StrCpy PROC USES ESI EDX EBX EAX
MOV ECX, 0
L1:
CMP Byte Ptr [ESI], BL
JE _return
CMP Byte Ptr [ESI], 0
JE _return
CMP Byte Ptr [ESI], 0dh
JE _return
CMP Byte Ptr [ESI], 0ah
JE _return
MOV AL, Byte Ptr[ESI]
MOV Byte Ptr[EDX], AL
INC ESI
INC EDX
INC ECX
JMP L1
_return:
ret
StrCpy ENDP
end main