Created
October 17, 2012 02:20
-
-
Save theonewolf/3903360 to your computer and use it in GitHub Desktop.
ext4 datastructures
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #define SECTOR_SIZE 512 | |
| #define EXT4_SUPERBLOCK_OFFSET 1024 | |
| struct ext4_superblock | |
| { | |
| uint32_t s_inodes_count; | |
| uint32_t s_blocks_count_lo; | |
| uint32_t s_r_blocks_count_lo; | |
| uint32_t s_free_blocks_count_lo; | |
| uint32_t s_free_inodes_count; | |
| uint32_t s_first_data_block; | |
| uint32_t s_log_block_size; | |
| uint32_t s_log_cluster_size; | |
| uint32_t s_blocks_per_group; | |
| uint32_t s_clusters_per_group; | |
| uint32_t s_inodes_per_group; | |
| uint32_t s_mtime; | |
| uint32_t s_wtime; | |
| uint16_t s_mnt_count; | |
| uint16_t s_max_mnt_count; | |
| uint16_t s_magic; | |
| uint16_t s_state; | |
| uint16_t s_errors; | |
| uint16_t s_minor_rev_level; | |
| uint32_t s_lastcheck; | |
| uint32_t s_checkinterval; | |
| uint32_t s_creator_os; | |
| uint32_t s_rev_level; | |
| uint16_t s_def_resuid; | |
| uint16_t s_def_resgid; | |
| uint32_t s_first_ino; | |
| uint16_t s_inode_size; | |
| uint16_t s_block_group_nr; | |
| uint32_t s_feature_compat; | |
| uint32_t s_feature_incompat; | |
| uint32_t s_feature_ro_compat; | |
| uint8_t s_uuid[16]; | |
| uint8_t s_volume_name[16]; | |
| uint8_t s_last_mounted[64]; | |
| uint32_t s_algorithm_usage_bitmap; | |
| uint8_t s_prealloc_blocks; | |
| uint8_t s_prealloc_dir_blocks; | |
| uint16_t s_reserved_gdt_blocks; | |
| uint8_t s_journal_uuid[16]; | |
| uint32_t s_journal_inum; | |
| uint32_t s_journal_dev; | |
| uint32_t s_last_orphan; | |
| uint32_t s_hash_seed[4]; | |
| uint8_t s_def_hash_version; | |
| uint8_t s_jnl_backup_type; | |
| uint16_t s_desc_size; | |
| uint32_t s_default_mount_opts; | |
| uint32_t s_first_meta_bg; | |
| uint32_t s_mkfs_time; | |
| uint32_t s_jnl_blocks[17]; | |
| uint32_t s_blocks_count_hi; | |
| uint32_t s_r_blocks_count_hi; | |
| uint32_t s_free_blocks_count_hi; | |
| uint16_t s_min_extra_isize; | |
| uint16_t s_want_extra_isize; | |
| uint32_t s_flags; | |
| uint16_t s_raid_stride; | |
| uint16_t s_mmp_update_interval; | |
| uint64_t s_mmp_block; | |
| uint32_t s_raid_stripe_width; | |
| uint8_t s_log_groups_per_flex; | |
| uint8_t s_checksum_type; | |
| uint16_t s_reserved_pad; | |
| uint64_t s_kbytes_written; | |
| uint32_t s_snapshot_inum; | |
| uint32_t s_snapshot_id; | |
| uint64_t s_snapshot_r_blocks_count; | |
| uint32_t s_snapshot_list; | |
| uint32_t s_error_count; | |
| uint32_t s_first_error_time; | |
| uint32_t s_first_error_ino; | |
| uint64_t s_first_error_block; | |
| uint8_t s_first_error_func[32]; | |
| uint32_t s_first_error_line; | |
| uint32_t s_last_error_time; | |
| uint32_t s_last_error_ino; | |
| uint32_t s_last_error_line; | |
| uint64_t s_last_error_block; | |
| uint8_t s_last_error_func[32]; | |
| uint8_t s_mount_opts[64]; | |
| uint32_t s_usr_quota_inum; | |
| uint32_t s_grp_quota_inum; | |
| uint32_t s_overhead_clusters; | |
| uint32_t s_reserved[108]; | |
| uint32_t s_checksum; | |
| } __attribute__((packed)); | |
| struct ext4_block_group_descriptor | |
| { | |
| uint32_t bg_block_bitmap_lo; /* 00 */ | |
| uint32_t bg_inode_bitmap_lo; | |
| uint32_t bg_inode_table_lo; | |
| uint16_t bg_free_blocks_count_lo; | |
| uint16_t bg_free_inodes_count_lo; /* 10 */ | |
| uint16_t bg_used_dirs_count_lo; | |
| uint16_t bg_flags; | |
| uint32_t bg_exclude_bitmap_lo; | |
| uint16_t bg_block_bitmap_csum_lo; | |
| uint16_t bg_inode_bitmap_csum_lo; | |
| uint16_t bg_itable_unused_lo; | |
| uint16_t bg_checksum; /* 20 */ | |
| /* enabled only on 64bit option set */ | |
| /* uint32_t bg_block_bitmap_hi; | |
| uint32_t bg_inode_bitmap_hi; | |
| uint32_t bg_inode_table_hi; | |
| uint16_t bg_free_blocks_count_hi; | |
| uint16_t bg_free_inodes_count_hi; * 30 */ | |
| /* uint16_t bg_used_dirs_count_hi; | |
| uint16_t bg_itable_unused_hi; | |
| uint32_t bg_exclude_bitmap_hi; | |
| uint16_t bg_block_bitmap_csum_hi; | |
| uint16_t bg_inode_bitmap_csum_hi; | |
| uint32_t bg_reserved; * 3a */ | |
| } __attribute__((packed)); | |
| struct ext4_inode | |
| { | |
| uint16_t i_mode; | |
| uint16_t i_uid; | |
| uint32_t i_size_lo; | |
| uint32_t i_atime; | |
| uint32_t i_ctime; | |
| uint32_t i_mtime; | |
| uint32_t i_dtime; | |
| uint16_t i_gid; | |
| uint16_t i_links_count; | |
| uint32_t i_blocks_lo; | |
| uint32_t i_flags; | |
| uint8_t i_osd1[4]; | |
| uint32_t i_block[15]; | |
| uint32_t i_generation; | |
| uint32_t i_file_acl_lo; | |
| uint32_t i_size_high; | |
| uint32_t i_obso_faddr; | |
| uint8_t i_osd2[12]; | |
| uint16_t i_extra_isize; | |
| uint16_t i_checksum_hi; | |
| uint32_t i_ctime_extra; | |
| uint32_t i_mtime_extra; | |
| uint32_t i_atime_extra; | |
| uint32_t i_crtime; | |
| uint32_t i_crtime_extra; | |
| uint32_t i_version_hi; | |
| } __attribute__((packed)); | |
| struct ext4_dir_entry | |
| { | |
| uint32_t inode; /* 4 bytes */ | |
| uint16_t rec_len; /* 6 bytes */ | |
| uint8_t name_len; /* 7 bytes */ | |
| uint8_t file_type; /* 8 bytes */ | |
| uint8_t name[255]; /* 263 bytes */ | |
| } __attribute__((packed)); | |
| struct ext4_extent_header | |
| { | |
| uint16_t eh_magic; | |
| uint16_t eh_entries; | |
| uint16_t eh_max; | |
| uint16_t eh_depth; | |
| uint32_t eh_generation; | |
| } __attribute__((packed)); | |
| struct ext4_extent_idx | |
| { | |
| uint32_t ei_block; | |
| uint32_t ei_leaf_lo; | |
| uint16_t ei_leaf_hi; | |
| uint16_t ei_unused; | |
| }; | |
| struct ext4_extent | |
| { | |
| uint32_t ee_block; | |
| uint16_t ee_len; | |
| uint16_t ee_start_hi; | |
| uint32_t ee_start_lo; | |
| }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment