D
Size: a a a
E
d
uint32_t iNodeGroup = (Ext2_Bootloader_INode - 1) / superblock.inodes_per_group;
uint32_t inGrpINodeIdx = (Ext2_Bootloader_INode - 1) % superblock.inodes_per_group;
uint32_t blkWithINodeGrp = iNodeGroup >> (superblock.log_block_size + 5);
uint32_t locINodeGrpIdx = iNodeGroup - (blkWithINodeGrp << (superblock.log_block_size + 5));
readBlock(blkWithINodeGrp + superblock.first_data_block + 1);
uint32_t blkWithINode = inGrpINodeIdx >> (superblock.log_block_size + 10 - hsb(superblock.inode_size));
uint32_t inBlkINodeIdx = inGrpINodeIdx - (blkWithINode << (superblock.log_block_size + 10 - hsb(superblock.inode_size)));
readBlock(((Ext2_BlockGroupDescriptor*)buffer)[locINodeGrpIdx].inode_table + blkWithINode);
memcpy(&inode, buffer + (inBlkINodeIdx << hsb(superblock.inode_size)), sizeof(inode));
/*
[iNodeGroup, inGrpINodeIdx] = (Ext2_Bootloader_INode - 1) / superblock.inodes_per_group // 2
tempval_00 = superblock.log_block_size + 5 // 3
blkWithINodeGrp = iNodeGroup >> tempval_00 // 4
tempval_01 = blkWithINodeGrp << tempval_00 // 4, dead vars: tempval_00
locINodeGrpIdx = iNodeGroup - tempval_01 // 3, dead vars: iNodeGroup, tempval_01
tempval_02 = blkWithINodeGrp + superblock.first_data_block // 3, dead vars: blkWithINodeGrp
tempval_03 = tempval_02 + 1 // 3, dead vars: tempval_02
readBlock(tempval_03) // 2, dead vars: tempval_03
tempval_04 = superblock.log_block_size + 10 // 3
tempval_05 = hsb(superblock.inode_size) // 4
tempval_06 = tempval_04 - tempval_05 // 4, dead vars: tempval_04
blkWithINode = inGrpINodeIdx >> tempval_06 // 5
tempval_07 = blkWithINode << tempval_06 // 5, dead vars: tempval_06
inBlkINodeIdx = inGrpINodeIdx - tempval_07 // 4, dead vars: inGrpINodeIdx, tempval_07
tempval_08 = locINodeGrpIdx * sizeof(Ext2_BlockGroupDescriptor) // may be logarithmic. 4, dead vars: locINodeGrpIdx
tempval_09 = tempval_08 + offsetof(Ext2_BlockGroupDescriptor, inode_table) // 4, dead vars: tempval_08
tempval_10 = buffer + tempval_09 // 4, dead vars: tempval_09
tempval_11 = *(uint32_t)tempval_10 // 4, dead vars: tempval_10
tempval_12 = tempval_11 + blkWithINode // 3, dead vars: blkWithINode, tempval_11
readBlock(tempval_12) // 2, dead vars: tempval_12
tempval_13 = inBlkINodeIdx << tempval_05 // 1, dead vars: tempval_05, inBlkINodeIdx
tempval_14 = buffer + tempval_13 // 1, dead vars: tempval_13
memcpy(&inode, tempval_14, sizeof(inode)) // 0, dead vars: tempval_14
*/
теперь это можно написать на асме...E
d
d
E
d
E
d
d
d
d
d