在 c/c++ 中打开 PhysicalDrive 的句柄并写入 MBR 的 linux 等效是什么?
What is the linux equivalent of openning a handle to PhysicalDrive and writing to MBR in c/c++?
在Windows中,您可以轻松地打开PhysicalDrive的句柄(甚至\\.\c:(,并从用户模式使用WriteFile写入磁盘的第一个扇区,想知道执行此Linux的等效c/c ++代码是什么,它需要尽可能低的权限? 是否可以在 Linux 中执行此操作而无需使用 sudo 运行代码?
基本上,我想编译一个ELF程序来做到这一点,但是在Linux中,我该怎么做呢?因为在Windows中,您可以从用户模式执行此操作。
SCSI PASSTROUGH直接消息在Linux中也可以用于读取和写入磁盘扇区吗?如果是这样,那么如何在Linux中将SCSI直通IRP消息发送到磁盘驱动程序以写入文件,在Windows中我们可以使用DeviceIOcontrol发送消息(对不起,新手问题,我不太熟悉Linux编程(
在 Linux 中,每个设备都是一个文件。所以你的第一个物理硬盘可能是/dev/sda .如果您有足够的权限,则可以直接与硬盘驱动器进行通信(打开,读取和写入(。毕竟。。它只是一个文件。
至于特权:任何用户都可以这样做,只要他/她具有使用特定设备执行任何您想要的操作所需的权限。这可以通过文件权限工作。例如,您可以将用户添加到某个组并将此组分配给您的设备,通过 chmod 为该组提供所需的权限。
您还可以为程序设置 suid 位,该程序对您的物理驱动器执行操作。含义:如果用户(他仍然需要此程序的执行权限(启动它,则程序将使用另一个用户 ID 运行。这可能是根。含义:此过程单独使用提升的权限运行,为用户执行他/她无法执行的操作。
在 Linux 上,磁盘通常是一些块设备文件,例如/dev/sda
。参见 sd(4( 和 hd(4(。
伪文件/proc/partitions
提供磁盘分区。参见 proc(5( 并尝试在 shell 或终端仿真器中cat /proc/partitions
。
您可以有一个 setuid 程序访问磁盘。你需要 ioctl(2(。当心:setuid或setgid机制很棘手。花几个小时来理解它(否则你会打开一个漏洞(。
有关更多信息,请阅读高级 Linux 编程,然后阅读系统调用(2(
在配置良好的 Linux 系统上,并非所有用户都可以访问/dev/sda
。在 Debian 上,它有:
% ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 Jun 25 18:53 /dev/sda
所以你可以编写一个disk
的setgid ELF可执行文件。参见凭证 (7( 和能力 (7( 和 execve(2( 和 elf(5(
还可以查看KernelNewbies,研究内核源代码,阅读initrd和systemd。
然后研究改进GNU的源代码,因为它是自由软件。
- 在C++/Linux中设置单调时钟的一些技巧
- Linux的Cpp上的计时器
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux中哪里可以找到互斥、未来等的源代码
- 如何在linux终端中同时编译和运行c++代码
- 在Linux for Windows上编译C++代码时出错
- 如何找到锁定Linux futex的C++行
- 在linux上调试巨大的C++项目
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- c++方法参数只能在linux的发布模式下自行更改
- 在Linux和C++中的Windows上,散列字符串值会产生不同的输出
- 这里在 Linux 中具有"CreatePipe"和"CreateProcessW"功能吗?
- 函数在Windows或Linux上运行时表现不同
- 在Linux下捕获SIGKILL的C++程序
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- mysql C++ connector [mysql-connector-c++-8.0.19-linux-glibc2
- 这些是什么样的错误?即使我不在 Linux 上工作,我也遇到了 Linux 错误
- 在 c/c++ 中打开 PhysicalDrive 的句柄并写入 MBR 的 linux 等效是什么?