是否可以通过ac程序或终端(linux)中的地址获取文件?我知道这对我来说听起来很奇怪,但我只是在尝试.
例如,替换
FILE * f = fopen("myfile.txt","r")
Run Code Online (Sandbox Code Playgroud)
通过绝对令人惊叹的东西
int fd = open(&0x545f6f5,"r")
Run Code Online (Sandbox Code Playgroud)
或echo&0x545f6f5会抓取相关文件的一部分(需要一个长度,所以更像echo和0x545f6f5 20来读取地址旁边的20个字节)?
我知道mmap,但同样,我的问题更像是实验.
那么,整体情况是:可以使用地址(理想情况下是长度)访问linux文件系统上文件的任何部分吗?
说我的分区ID/dev/sda1,我想访问带有地址而不是名称的原始内存值(可读或不可读).如果我寻找地址&0x545f6f5并且恰好是偏移量为64的myfile.txt,我会读取该位置的字节.我希望它能让它更清晰:)
假设myfile.txt是在ext3安装的文件系统上/,文件系统在分区上/dev/sda1.如果你知道它在磁盘上的偏移量,你可以想象打开设备/dev/sda1(分区)或/dev/sda(整个驱动器)并访问文件的字节.
例如,如果您以某种方式确定文件的内容在0xDEADBEEF第一个硬盘驱动器的第一个分区上处于偏移量,则可以执行以下操作:
int fd = open("/dev/sda1", O_RDONLY);
lseek(fd, 0xDEADBEEF, SEEK_SET);
read(fd, buffer, 20);
Run Code Online (Sandbox Code Playgroud)
以这种方式访问原始设备会绕过文件系统.文件系统是存储文件元数据的位置,例如它们的名称,位置和大小.如果您在开始时探索过,/dev/sda1您可以想象自己读取原始文件系统数据,而不是依靠内核文件系统驱动程序来为您完成.