-
Notifications
You must be signed in to change notification settings - Fork 0
/
gorg64_spkoff.fasm
85 lines (79 loc) · 1.78 KB
/
gorg64_spkoff.fasm
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
; Program for turn off PC-Speaker output.
; For GNU/Linux 64 bit version. Root priveleges or kernel patch needed.
; Version: 4.
; Written on FreePascal (https://freepascal.org/).
; Copyright (C) 2021-2023 Artyomov Alexander
; http://self-made-free.ru/ (Ex http://aralni.narod.ru/)
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU Affero General Public License as
; published by the Free Software Foundation, either version 3 of the
; License, or (at your option) any later version.
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU Affero General Public License for more details.
; You should have received a copy of the GNU Affero General Public License
; along with this program. If not, see <https://www.gnu.org/licenses/>.
format ELF64 dynamic 3 at 0
entry _start
segment executable
_start:
call startspk
call gspkoff
exit:
mov rax, 60 ; load the EXIT syscall number into rax
syscall ; execute the system call
ioperm:
mov rax, 173
mov rdi, $42
mov rsi, 2
mov rdx, 1
syscall
mov r10, rax
mov rax, 173
mov rdi, $61
mov rsi, 1
mov rdx, 1
syscall
mov r11, rax
ret
spkoff:
in al, 61h
or al, 03h
xor al, 03h
out 61h, al
ret
kspkoff:
mov rax, 1001
syscall
ret
kspkpatchexists:
xor r12,r12
mov rax, 1003
syscall
cmp qword rax, 123
jne kspkpatchexistsexit
mov r12, 1
kspkpatchexistsexit:
ret
gspkoff:
cmp qword r12, 1
je gspkoffex
call spkoff
ret
gspkoffex:
call kspkoff
ret
startspk:
call ioperm
cmp r10,0
jne patch_ex
cmp r11,0
jne patch_ex
ret
patch_ex:
call kspkpatchexists
cmp r12, 1
jne exit
ret