首页 > 其他分享 >学习笔记5 截图+代码

学习笔记5 截图+代码

时间:2023-10-15 18:36:16浏览次数:34  
标签:截图 代码 笔记 bitmap BLOCK data image block SIZE

一、苏格拉底挑战









二、遇见的困难



三、实践截图和代码



课堂笔记:

man 3 printf

man -k sort   //会找到含有sort功能的命令或函数
man -k sort | grep 3 //缩小查找范围到C语言命令

课本练习:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

#define BLOCK_SIZE 1024  

// 读取位图数据的函数
void read_bitmap(FILE *file, uint32_t block_number, uint8_t *bitmap_data) {
    fseek(file, block_number * BLOCK_SIZE, SEEK_SET);
    fread(bitmap_data, 1, BLOCK_SIZE, file);
}

int main() {
    FILE *ext2_image = fopen("your_ext2_image.img", "rb"); // 请替换为你的文件系统镜像文件

    if (ext2_image == NULL) {
        perror("Error opening the EXT2 image file");
        return 1;
    }

    // 读取超级块
    fseek(ext2_image, BLOCK_SIZE, SEEK_SET);
    uint8_t superblock_data[BLOCK_SIZE];
    fread(superblock_data, 1, BLOCK_SIZE, ext2_image);

    // 从超级块中获取块位图和索引节点位图的块号
    uint32_t block_bitmap_block = *(uint32_t*)(superblock_data + 0x20);
    uint32_t inode_bitmap_block = *(uint32_t*)(superblock_data + 0x24);

    // 读取块位图和索引节点位图数据
    uint8_t block_bitmap_data[BLOCK_SIZE];
    uint8_t inode_bitmap_data[BLOCK_SIZE];
    read_bitmap(ext2_image, block_bitmap_block, block_bitmap_data);
    read_bitmap(ext2_image, inode_bitmap_block, inode_bitmap_data);

    // 打印块位图数据
    printf("Block Bitmap:\n");
    for (int i = 0; i < BLOCK_SIZE; i++) {
        for (int j = 0; j < 8; j++) {
            uint8_t byte = block_bitmap_data[i];
            printf("%d", (byte >> j) & 1);
        }
        printf(" ");
    }

    // 打印索引节点位图数据
    printf("\n\nInode Bitmap:\n");
    for (int i = 0; i < BLOCK_SIZE; i++) {
        for (int j = 0; j < 8; j++) {
            uint8_t byte = inode_bitmap_data[i];
            printf("%d", (byte >> j) & 1);
        }
        printf(" ");
    }

    fclose(ext2_image);

    return 0;
}

标签:截图,代码,笔记,bitmap,BLOCK,data,image,block,SIZE
From: https://www.cnblogs.com/yuanyi23/p/17765947.html

相关文章

  • 《信息安全系统设计与实现》学习笔记5
    《信息安全系统设计与实现》学习笔记5第十一章EXT2文件系统EXT2文件系统数据结构创建虚拟硬盘mke2fs[-bblksize-Nninodes]devicenblocks虚拟磁盘布局Block#0:引导块超级块Block#1:B1是超级块,用于容纳整个文件系统的信息,是记录整个文件系统相关信息的......
  • 20211301 学习笔记5
    20211301学习笔记5教材知识点总结11.1EXT2文件系统EXT2:linux的默认文件系统EXT3:扩展,增加了日志文件EXT4:磁盘块的分配11.2EXT2文件系统数据结构创建虚拟磁盘:创建指定个块和索引节点的文件系统,可以在虚拟磁盘也可以在真实设备上虚拟磁盘布局:超级块:容纳......
  • 学习笔记5
    目录知识点归纳第11章EX2文件系统数据结构苏格拉底挑战问题与解决方案实践过程知识点归纳第11章EX2文件系统数据结构Linux一直将EXT2作为默认文件系统。EXT3是EXT2的扩展。EXT3中增加的主要内容是一个日志文件,他将文件系统的变更记录在日志中。日志可在文件系统崩溃时更快地......
  • Linux系统第四章文件权限读书笔记
    基本权限UGO:     1.UGO权限的含义:UGO是Linux文件权限管理中的基本概念,表示用户(User)、组(Group)、其他人(Others)。这三个范围定义了文件或目录的访问权限,控制着谁可以执行何种操作。User(用户):这是文件或目录的所有者。用户权限是最重要的,因为他们拥有最高级别的控制权......
  • 解决uboot ping不通的硬件问题--Apple的学习笔记
    一,前言之前uboot偶尔第一次上电会ping通一次,之后就ping不通,我以为电源问题,好像也不是,然后我又认为是交叉网线问题,我用的可能是直连网线,之前用的交叉网线头子坏了我就丢了。于是网上买了新的交叉网线,到货后依然ping不通,而且一次都不行了。难道代码有问题,于是用了我之前的uboot代码,结......
  • 学习笔记5
    EXT2文件系统EXT2(TheSecondExtendedFileSystem)是Linux的标准文件系统,一直以来被广泛使用。EXT3是EXT2的扩展版本,增加了一个日志系统。文件系统背景Linux标准文件系统:EXT2是Linux的标准文件系统,多年来一直被广泛使用。EXT3的扩展:EXT3是EXT2的扩展版本,主要增加了一个日......
  • 学习笔记5
    第十一章ext2文件系统11.1~11.2ext2文件系统、块ext2文件系统是linux最为常用的文件系统,ext2是(TheSecondExtendedFileSystem)的简称。ext2文件系统的布局如图所示。Block#0:引导块:B0是引导块,文件系统不是用它,它用来容纳一个引导程序,从磁盘引导操作系统的时候会用到它。B......
  • 20211105李宜时信息安全系统设计与实现第五周自学笔记
    20211105李宜时信息安全系统设计与实现第五周自学笔记:EXT2文件系统和三级文件系统EXT2文件系统EXT2(ExtendedFileSystem2)是一种广泛用于Linux操作系统的文件系统。它是EXT文件系统家族的第二个版本,设计用于提供高性能和可靠性的存储解决方案。以下是一些关于EXT2文件系统的关......
  • 信息安全系统设计与实现 学习笔记5
    EXT2文件系统通过mkfs创建虚拟硬盘mke2fs[-bblksize-Nninodes]devicenblock创建一个nblocks个块和ninodes个索引节点EXT2文件系统。虚拟磁盘布局超级块Block#1:超级块(在硬盘分区中字节偏移量为1024)s_first_data_block:0表示4KB块大小,1表示1KB块大小。s_log_block_siz......
  • 《信息安全系统设计与实现》第六周学习笔记
    EXT2文件系统数据结构通过mkfs创建虚拟磁盘命令mke2fs[-bblksize-Nninodes]devicenblocks下面的命令可在一个名为vdisk的虚拟磁盘文件上创建一个EXT2文件系统,有1440个大小为1kb的块ddif=/dev/zeroof=vdiskbs=1024count=1440mke2fsvdisk1440虚拟磁盘布......