0

私はそのような奇妙なことを見つけました:MasterBootRecord構造のために

//

typedef unsigned char Byte;
typedef unsigned short int Word;
typedef unsigned int Dword;

//
typedef struct
{
    Byte currentPartitionState;

    Byte startPartitionHead;
    Word startCylinderSector;

    Byte partitionType;

    Byte endPartitionHead;
    Word endCylinderSector;

    Dword numSectorsBetweenMbrAndPartition;
    Dword numSectorsInPartition;
} PartitionEntry;

//
typedef struct
{
    Byte executableCode[446];

    PartitionEntry partitionEntry1;
    PartitionEntry partitionEntry2;
    PartitionEntry partitionEntry3;
    PartitionEntry partitionEntry4;

    Word bootRecordSignature;
} MasterBootRecord;

sizeof(MasterBootRecord) を取得しようとすると、正しいサイズは 446 + 4*16 + 2 = 512 ですが、516 バイトになります。

4

1 に答える 1

1

これは、メモリ内のデータの配置が原因です。

問題は、446 バイトを 4 バイトのチャンクに格納するには、448 バイト (予想より 2 バイト多い) を占める 112 個のチャンクが必要なことです。また、最後の Word を格納するには、2 バイトではなく 4 バイト (2 バイト以上) も必要です。したがって、余分な 4 バイトがあります。

「bootRecordSignature」にコメントを付けてみると、予想より 2 バイト多いはずです (予想は 510 ですが、512 になります)。

于 2013-03-25T21:53:21.803 に答える