Support des modules a tester
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
syscall.node
|
||||
ioctl.node
|
||||
mount.node
|
||||
mount.node
|
||||
file.node
|
||||
@@ -0,0 +1,15 @@
|
||||
//@ts-check
|
||||
/**
|
||||
* @type {{ open: (path: string, flags: number, mode?: number) => number, close: (fd: number) => void }}
|
||||
*/
|
||||
//@ts-expect-error
|
||||
const cfiles = require('./file.node')
|
||||
|
||||
const modes = {
|
||||
O_ACCMODE: 3,
|
||||
O_RDONLY: 0,
|
||||
O_WRONLY: 1,
|
||||
O_RDWR: 2
|
||||
}
|
||||
|
||||
module.exports = { ...cfiles, modes }
|
||||
@@ -0,0 +1,133 @@
|
||||
//@ts-check
|
||||
/** @type {{ [key: number]: string | undefined }} */
|
||||
module.exports = {
|
||||
1: "EPERM", //Operation not permitted
|
||||
2: "ENOENT", //No such file or directory
|
||||
3: "ESRCH", //No such process
|
||||
4: "EINTR", //Interrupted system call
|
||||
5: "EIO", //I/O error
|
||||
6: "ENXIO", //No such device or address
|
||||
7: "E2BIG", //Argument list too long
|
||||
8: "ENOEXEC", //Exec format error
|
||||
9: "EBADF", //Bad file number
|
||||
10: "ECHILD", //No child processes
|
||||
11: "EAGAIN", //Try again
|
||||
12: "ENOMEM", //Out of memory
|
||||
13: "EACCES", //Permission denied
|
||||
14: "EFAULT", //Bad address
|
||||
15: "ENOTBLK", //Block device required
|
||||
16: "EBUSY", //Device or resource busy
|
||||
17: "EEXIST", //File exists
|
||||
18: "EXDEV", //Cross-device link
|
||||
19: "ENODEV", //No such device
|
||||
20: "ENOTDIR", //Not a directory
|
||||
21: "EISDIR", //Is a directory
|
||||
22: "EINVAL", //Invalid argument
|
||||
23: "ENFILE", //File table overflow
|
||||
24: "EMFILE", //Too many open files
|
||||
25: "ENOTTY", //Not a typewriter
|
||||
26: "ETXTBSY", //Text file busy
|
||||
27: "EFBIG", //File too large
|
||||
28: "ENOSPC", //No space left on device
|
||||
29: "ESPIPE", //Illegal seek
|
||||
30: "EROFS", //Read-only file system
|
||||
31: "EMLINK", //Too many links
|
||||
32: "EPIPE", //Broken pipe
|
||||
33: "EDOM", //Math argument out of domain of func
|
||||
34: "ERANGE", //Math result not representable
|
||||
35: "EDEADLK", //Resource deadlock would occur
|
||||
36: "ENAMETOOLONG", //File name too long
|
||||
37: "ENOLCK", //No record locks available
|
||||
38: "ENOSYS", //Function not implemented
|
||||
39: "ENOTEMPTY", //Directory not empty
|
||||
40: "ELOOP", //Too many symbolic links encountered
|
||||
42: "ENOMSG", //No message of desired type
|
||||
43: "EIDRM", //Identifier removed
|
||||
44: "ECHRNG", //Channel number out of range
|
||||
45: "EL2NSYNC", //Level 2 not synchronized
|
||||
46: "EL3HLT", //Level 3 halted
|
||||
47: "EL3RST", //Level 3 reset
|
||||
48: "ELNRNG", //Link number out of range
|
||||
49: "EUNATCH", //Protocol driver not attached
|
||||
50: "ENOCSI", //No CSI structure available
|
||||
51: "EL2HLT", //Level 2 halted
|
||||
52: "EBADE", //Invalid exchange
|
||||
53: "EBADR", //Invalid request descriptor
|
||||
54: "EXFULL", //Exchange full
|
||||
55: "ENOANO", //No anode
|
||||
56: "EBADRQC", //Invalid request code
|
||||
57: "EBADSLT", //Invalid slot
|
||||
59: "EBFONT", //Bad font file format
|
||||
60: "ENOSTR", //Device not a stream
|
||||
61: "ENODATA", //No data available
|
||||
62: "ETIME", //Timer expired
|
||||
63: "ENOSR", //Out of streams resources
|
||||
64: "ENONET", //Machine is not on the network
|
||||
65: "ENOPKG", //Package not installed
|
||||
66: "EREMOTE", //Object is remote
|
||||
67: "ENOLINK", //Link has been severed
|
||||
68: "EADV", //Advertise error
|
||||
69: "ESRMNT", //Srmount error
|
||||
70: "ECOMM", //Communication error on send
|
||||
71: "EPROTO", //Protocol error
|
||||
72: "EMULTIHOP", //Multihop attempted
|
||||
73: "EDOTDOT", //RFS specific error
|
||||
74: "EBADMSG", //Not a data message
|
||||
75: "EOVERFLOW", //Value too large for defined data type
|
||||
76: "ENOTUNIQ", //Name not unique on network
|
||||
77: "EBADFD", //File descriptor in bad state
|
||||
78: "EREMCHG", //Remote address changed
|
||||
79: "ELIBACC", //Can not access a needed shared library
|
||||
80: "ELIBBAD", //Accessing a corrupted shared library
|
||||
81: "ELIBSCN", //lib section in a.out corrupted
|
||||
82: "ELIBMAX", //Attempting to link in too many shared libraries
|
||||
83: "ELIBEXEC", //Cannot exec a shared library directly
|
||||
84: "EILSEQ", //Illegal byte sequence
|
||||
85: "ERESTART", //Interrupted system call should be restarted
|
||||
86: "ESTRPIPE", //Streams pipe error
|
||||
87: "EUSERS", //Too many users
|
||||
88: "ENOTSOCK", //Socket operation on non-socket
|
||||
89: "EDESTADDRREQ", //Destination address required
|
||||
90: "EMSGSIZE", //Message too long
|
||||
91: "EPROTOTYPE", //Protocol wrong type for socket
|
||||
92: "ENOPROTOOPT", //Protocol not available
|
||||
93: "EPROTONOSUPPORT", //Protocol not supported
|
||||
94: "ESOCKTNOSUPPORT", //Socket type not supported
|
||||
95: "EOPNOTSUPP", //Operation not supported on transport endpoint
|
||||
96: "EPFNOSUPPORT", //Protocol family not supported
|
||||
97: "EAFNOSUPPORT", //Address family not supported by protocol
|
||||
98: "EADDRINUSE", //Address already in use
|
||||
99: "EADDRNOTAVAIL", //Cannot assign requested address
|
||||
100: "ENETDOWN", //Network is down
|
||||
101: "ENETUNREACH", //Network is unreachable
|
||||
102: "ENETRESET", //Network dropped connection because of reset
|
||||
103: "ECONNABORTED", //Software caused connection abort
|
||||
104: "ECONNRESET", //Connection reset by peer
|
||||
105: "ENOBUFS", //No buffer space available
|
||||
106: "EISCONN", //Transport endpoint is already connected
|
||||
107: "ENOTCONN", //Transport endpoint is not connected
|
||||
108: "ESHUTDOWN", //Cannot send after transport endpoint shutdown
|
||||
109: "ETOOMANYREFS", //Too many references: cannot splice
|
||||
110: "ETIMEDOUT", //Connection timed out
|
||||
111: "ECONNREFUSED", //Connection refused
|
||||
112: "EHOSTDOWN", //Host is down
|
||||
113: "EHOSTUNREACH", //No route to host
|
||||
114: "EALREADY", //Operation already in progress
|
||||
115: "EINPROGRESS", //Operation now in progress
|
||||
116: "ESTALE", //Stale NFS file handle
|
||||
117: "EUCLEAN", //Structure needs cleaning
|
||||
118: "ENOTNAM", //Not a XENIX named type file
|
||||
119: "ENAVAIL", //No XENIX semaphores available
|
||||
120: "EISNAM", //Is a named type file
|
||||
121: "EREMOTEIO", //Remote I/O error
|
||||
122: "EDQUOT", //Quota exceeded
|
||||
123: "ENOMEDIUM", //No medium found
|
||||
124: "EMEDIUMTYPE", //Wrong medium type
|
||||
125: "ECANCELED", //Operation Canceled
|
||||
126: "ENOKEY", //Required key not available
|
||||
127: "EKEYEXPIRED", //Key has expired
|
||||
128: "EKEYREVOKED", //Key has been revoked
|
||||
129: "EKEYREJECTED", //Key was rejected by service
|
||||
130: "EOWNERDEAD", //Owner died
|
||||
131: "ENOTRECOVERABLE",
|
||||
}
|
||||
@@ -38,7 +38,7 @@ async function main() {
|
||||
//chainload into sheebr
|
||||
await fHook("/usr/bin/sheebr.js")
|
||||
reboot.disableCtrlAltSupr()
|
||||
//reboot.powerOff()
|
||||
reboot.powerOff()
|
||||
|
||||
console.log("End of init reached")
|
||||
reboot.enableCtrlAltSupr()
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
//@ts-check
|
||||
//@ts-expect-error
|
||||
const { syscall } = require('./syscall.node')
|
||||
const { close, open, modes } = require('./cfiles.js')
|
||||
const errno = require('./errno')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
|
||||
|
||||
// TBD
|
||||
const SYSCALL_INIT_MODULE = 105
|
||||
const SYSCALL_FINIT_MODULE = 273
|
||||
|
||||
const doProcExists = () => fs.existsSync('/proc')
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {string} path
|
||||
* @param {string} params
|
||||
* @param {number} flags
|
||||
* @deprecated un tested dangerous
|
||||
*/
|
||||
function finit_module(path, params = "", flags = 0) {
|
||||
const fileDescriptor = open(path, modes.O_RDONLY)
|
||||
const result = syscall(SYSCALL_FINIT_MODULE, fileDescriptor, params, flags)
|
||||
if(result > 0) {
|
||||
//parse linux error
|
||||
console.log(errno[result])
|
||||
} else {
|
||||
if(result == -1) {
|
||||
console.log('non number or string argument recived')
|
||||
}else if(result == -2) {
|
||||
console.log('unsuported argument length (1-5)')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function uname() {
|
||||
if(!doProcExists) {
|
||||
throw "Proc don't exists exception"
|
||||
}
|
||||
const linuxVersionString = fs.readFileSync('/proc/version').toString()
|
||||
return linuxVersionString.split(' ')[2]
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} modulename
|
||||
*/
|
||||
function modprobe(modulename) {
|
||||
const name = uname()
|
||||
if(fs.existsSync(path.join('/lib/modules', name, 'kernel', modulename))) {
|
||||
finit_module(path.join('/lib/modules', name, 'kernel', modulename))
|
||||
} else {
|
||||
console.log("file not found " + path.join('/lib/modules', name, 'kernel', modulename))
|
||||
//throw "file not found"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function lsmod() {
|
||||
if(!doProcExists) {
|
||||
throw "Proc don't exists exception"
|
||||
}
|
||||
return fs.readFileSync('/proc/modules').toString('utf-8').split('\n')
|
||||
}
|
||||
|
||||
module.exports = { modprobe, uname, finit_module, doProcExists, lsmod }
|
||||
Reference in New Issue
Block a user