【发布时间】:2021-02-27 18:46:47
【问题描述】:
我想创建程序来获取有关操作系统的信息。我尝试过使用系统调用,但认为从系统文件中读取会更快(直接)。所以,我编写了一个简单的程序来从目录“/proc/sys/kernel/”中读取数据,并想要读取文件:osrelease 主机名、ostype 和其他......所以,我确实认为只是但不是。当我读取文件“主机名”时,我得到了这个:
����
如果我以超级用户身份阅读,我会得到正常数据
oleg
这是我的程序代码:
global _start
section .data
file db "/proc/sys/kernel/hostname",0
section .bss
buf resb 1024
descriptor resb 4
len equ 1024
section .text
_start:
mov eax, 5
mov ebx, file
mov ecx, 2
int 80h
mov [descriptor], eax
read:
mov eax, 3 ;read text
mov ebx, [descriptor];
mov ecx, buf ;read to variable buf
mov edx, len ;size of bug
int 80h ;interrupt
print_text:
mov edx, eax
mov eax, 4
mov ebx, 1
mov ecx, buf
int 80h
close_file:
mov eax, 6
mov ebx, [descriptor]
int 80h
exit:
mov eax, 1
mov ebx, 0
int 80h
所以,我想改变文件名并可以获取其他系统信息,但这是错误的,因为我没有得到结果。所以,我更改文件路径,编译项目并以超级用户身份执行程序,但我没有得到结果。没有... 我可以读取除此目录(“proc/sys/kernel”)之外的所有文件。 我搜索了有关此问题的信息,但没有找到类似的问题。我认为这是操作系统的安全性,但我只阅读信息,不写...我知道使用系统调用更简单,但想要了解操作系统的结构。为什么我无法从此目录中读取信息?那么,您能否附上有关此问题的有用信息?
【问题讨论】:
-
提示:如果你在
strace下运行你的二进制文件,你可以看到出了什么问题。