;================================================================================= ; sys_sysctl demonstration. ; ; Changes system's hostname. ; ; The LSCR Project. ;================================================================================= format ELF include '../macros.inc' include '../../include/symbols.inc' include '../../include/structs.inc' extrn error_chk section '.text' executable public _start _start: mov [my__sysctl_args.name], name ; write the new value mov [my__sysctl_args.nlen], 8 mov [my__sysctl_args.oldval], oldval mov [my__sysctl_args.oldlenp], oldval_sz mov [my__sysctl_args.newval], newhostname mov [my__sysctl_args.newlen], 3 mov eax, SYS_SYSCTL mov ebx, my__sysctl_args int 0x80 ccall error_chk, <"SYS_SYSCTL has failed: ">, exit mov eax, SYS_WRITE mov ebx, STDOUT mov ecx, str_s mov edx, str_s_sz int 0x80 mov eax, SYS_WRITE mov ebx, STDOUT mov ecx, oldval mov edx, [oldval_sz] int 0x80 mov eax, SYS_WRITE mov ebx, STDOUT mov ecx, nl mov edx, 1 int 0x80 mov [my__sysctl_args.name], name ; retreive the newly written value mov [my__sysctl_args.nlen], 8 mov [my__sysctl_args.oldval], oldval mov [oldval_sz], 128 mov [my__sysctl_args.oldlenp], oldval_sz mov [my__sysctl_args.newval], 0 mov eax, SYS_SYSCTL mov ebx, my__sysctl_args int 0x80 ccall error_chk, <"SYS_SYSCTL has failed: ">, exit mov eax, SYS_WRITE mov ebx, STDOUT mov ecx, str1_s mov edx, str1_s_sz int 0x80 mov eax, SYS_WRITE mov ebx, STDOUT mov ecx, oldval mov edx, [oldval_sz] int 0x80 mov eax, SYS_WRITE mov ebx, STDOUT mov ecx, nl mov edx, 1 int 0x80 exit: mov eax, SYS_EXIT xor ebx, ebx int 0x80 section '.data' writeable str_s db "Old hostname: " str_s_sz = $-str_s str1_s db "New hostname: " str1_s_sz = $-str1_s nl db 0xa newhostname db "b0x" name dd CTL_KERN dd KERN_NODENAME oldval_sz dd 128 oldval rb 128 my__sysctl_args __sysctl_args