-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path_main.asm
More file actions
105 lines (90 loc) · 2.39 KB
/
_main.asm
File metadata and controls
105 lines (90 loc) · 2.39 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
94
95
96
97
98
99
100
101
102
103
104
section .text
global _start
section .text
global _start
; ==============================
; Function: Open3
Open3:
push ebp; 保存调用者的栈帧基址
mov ebp, esp; 设置当前栈帧基址
push EBX; 保存EBX
sub esp, 8; 分配栈空间(8字节)
; ---- 函数开始 ----
mov EAX, 5; return值存入EAX
; ---- 退出函数 ----
add esp, 8; 清理局部变量栈空间(8字节)
pop EBX; 恢复EBX
leave
ret
; ======函数完毕=======
; ==============================
; Function: Close1
Close1:
push ebp; 保存调用者的栈帧基址
mov ebp, esp; 设置当前栈帧基址
push EBX; 保存EBX
sub esp, 8; 分配栈空间(8字节)
; ---- 函数开始 ----
mov EAX, 6; return值存入EAX
; ---- 退出函数 ----
add esp, 8; 清理局部变量栈空间(8字节)
pop EBX; 恢复EBX
leave
ret
; ======函数完毕=======
; ==============================
; Function: Write3
Write3:
push ebp; 保存调用者的栈帧基址
mov ebp, esp; 设置当前栈帧基址
push EBX; 保存EBX
sub esp, 8; 分配栈空间(8字节)
; ---- 函数开始 ----
mov EAX, 4; return值存入EAX
; ---- 退出函数 ----
add esp, 8; 清理局部变量栈空间(8字节)
pop EBX; 恢复EBX
leave
ret
; ======函数完毕=======
; ==============================
; Function: main
main:
push ebp; 保存调用者的栈帧基址
mov ebp, esp; 设置当前栈帧基址
push EBX; 保存EBX
sub esp, 8; 分配栈空间(8字节)
; ---- 函数开始 ----
push 420; 参数2
push 1; 参数1
push 0; 参数0
call Open3
add esp, 20; 清理参数栈(cdecl)
mov DWORD[ebp-8], EAX; 设置变量fd
push 5; 参数2
push 0; 参数1
mov EAX, DWORD[ebp-8]
push EAX; 参数0
call Write3
add esp, 20; 清理参数栈(cdecl)
mov EAX, DWORD[ebp-8]
push EAX; 参数0
call Close1
add esp, 4; 清理参数栈(cdecl)
mov EAX, 0; return值存入EAX
; ---- 退出函数 ----
add esp, 8; 清理局部变量栈空间(8字节)
pop EBX; 恢复EBX
leave
ret
; ======函数完毕=======
; ==============================
; 程序入口点 (ELF入口)
_start:
; 调用main函数
call main
; 使用系统调用退出程序 (sys_exit = 1)
; 返回值在EAX中
mov ebx, eax; 返回码
mov eax, 1; sys_exit
int 0x80; 调用内核