【问题标题】:Read data from proc/sys/kernel/从 proc/sys/kernel/ 读取数据
【发布时间】: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下运行你的二进制文件,你可以看到出了什么问题。

标签: linux assembly x86 nasm


【解决方案1】:
mov ecx, 2

open()flags 值 2 是 O_RDWR。您正在尝试以读写方式打开文件,作为普通用户,您无法执行此操作,因为它只能由 root 写入(在我的系统上为 0644 模式)。 Unix 权限检查是在您打开文件时完成的,而不是在每个单独的读取和写入时完成,因此即使您不打算实际写入文件也会失败。

所以open 调用返回一个负错误代码(您不检查),您将其作为 fd 传递以读取,因此也会失败并显示负错误代码(您也不检查),因此您的缓冲区仍然包含一堆零。你将这个负错误代码作为长度传递给write(),它将它解释为一个巨大的正数,并且不仅写出buf中的零字节,还写出内存中跟随它的任何垃圾,直到它跑完为止您的地址空间。

这确实对我作为 root 有用。我不太明白你的最后一段,在这种情况下不知道它是否适合你。如果没有,您可能有安全级别或其他一些机制,即使以 root 身份也阻止写入文件。请注意,/proc/sys/kernel 中的一些其他文件即使 root 也无法写入,例如/proc/sys/kernel/version0444,因此对于这些文件,即使您是root,您的程序也会像上面一样失败。

但由于您不关心写入文件,只需使用值为 0 的标志 O_RDONLY。所以改为使用 xor ecx, ecx。通过此更改,该程序适用于我作为普通用户。

自始至终检查错误是个好主意。

【讨论】:

  • 谢谢。它真的很有效。我以为我只阅读,但在程序设置模式为读写,我无法阅读信息。所以,谢谢你:) 对不起我的语言。语言障碍...
猜你喜欢
  • 2013-06-27
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 2017-01-01
  • 2015-09-19
  • 2022-01-02
  • 2013-10-13
相关资源
最近更新 更多