Browse Source

Add sigaction registering

Yann Weber 5 years ago
parent
commit
868ddc81f1
1 changed files with 55 additions and 3 deletions
  1. 55
    3
      wtfstopw.asm

+ 55
- 3
wtfstopw.asm View File

37
 		%define %1.tv_nsec %1+TIMESPEC_STRUC.tv_nsec
37
 		%define %1.tv_nsec %1+TIMESPEC_STRUC.tv_nsec
38
 	%endmacro
38
 	%endmacro
39
 
39
 
40
+	STRUC SIGACTION_STRUC
41
+		.sa_handler:      resq      1
42
+		.sa_flags:        resq      1
43
+		.sa_restorer:     resq      1
44
+		.sa_mask:         resb      128
45
+	ENDSTRUC
46
+
47
+
48
+	sigaction: ISTRUC SIGACTION_STRUC
49
+		at  SIGACTION_STRUC.sa_handler, dq 0
50
+		at  SIGACTION_STRUC.sa_flags, dq 0
51
+		at  SIGACTION_STRUC.sa_restorer, dq 0
52
+		at  SIGACTION_STRUC.sa_mask, times 128 db 0
53
+	IEND
54
+	%define sigaction.sa_handler sigaction+SIGACTION_STRUC.sa_handler
55
+	%define sigaction.sa_flags sigaction+SIGACTION_STRUC.sa_flags
56
+	%define sigaction.sa_restorer sigaction+SIGACTION_STRUC.sa_restorer
57
+	%define sigaction.sa_mask sigaction+SIGACTION_STRUC.sa_mask
58
+
40
 	TIMESPEC ts_start
59
 	TIMESPEC ts_start
41
 	TIMESPEC ts_cur
60
 	TIMESPEC ts_cur
42
 
61
 
44
 		tv_sleep_s dd 0,0
63
 		tv_sleep_s dd 0,0
45
 		tv_sleep_us dd 10000000,0 
64
 		tv_sleep_us dd 10000000,0 
46
 
65
 
47
-
48
 	;; 1/2s sleep
66
 	;; 1/2s sleep
49
 	;ts_sleep:
67
 	;ts_sleep:
50
 	;	tv_sleep_s dq 0
68
 	;	tv_sleep_s dq 0
64
 	nl: db 0x0A
82
 	nl: db 0x0A
65
 	buf: db 0
83
 	buf: db 0
66
 
84
 
67
-
85
+	dbgmsg: db "SigINT", 0xa
68
 
86
 
69
 section .text
87
 section .text
70
 global _start
88
 global _start
71
-
72
 _start:
89
 _start:
73
 
90
 
74
 ; set stdin non blocking
91
 ; set stdin non blocking
86
 cmp rax, 0
103
 cmp rax, 0
87
 jne fault
104
 jne fault
88
 
105
 
106
+; preparing SIGINT catch
107
+mov rax, lap_handler
108
+mov qword [sigaction.sa_handler], rax
109
+mov eax, 0x10000000 ; SA_RESTART
110
+or eax, 0x04000000 ; SA_RESTORER
111
+mov dword [sigaction.sa_flags], eax
112
+mov rax, sig_restorer
113
+mov qword [sigaction.sa_restorer], rax
114
+
115
+mov rax, 13 ; sys_rt_sigaction
116
+mov rdi, 2 ; SIGINT
117
+mov rsi, sigaction
118
+mov rdx, 0 ; NULL
119
+mov r10, 8 ; sig_size
120
+syscall
121
+cmp rax, 0
122
+jne fault
123
+
89
 mov rax, 228 ; clock_gettime
124
 mov rax, 228 ; clock_gettime
90
 mov rdi, 0 ; CLOCK_REALTIME
125
 mov rdi, 0 ; CLOCK_REALTIME
91
 mov rsi, ts_start
126
 mov rsi, ts_start
257
 	syscall
292
 	syscall
258
 	jmp exit
293
 	jmp exit
259
 
294
 
295
+lap_handler:
296
+	pop r8
297
+	
298
+	mov rax, 1
299
+	mov rdi, 1
300
+	mov rsi, dbgmsg
301
+	mov rdx, 7
302
+	syscall
303
+
304
+	push r8 ; push back ret addr
305
+	ret
306
+
307
+sig_restorer:
308
+	mov rax, 15 ; sys_rt_sigreturn
309
+	xor rdi, rdi
310
+	syscall
311
+
260
 .end:
312
 .end:

Loading…
Cancel
Save