アプリケーションを C の ARM プラットフォームに移植しています。アプリケーションは x86 プロセッサでも実行され、下位互換性が必要です。
現在、変数の配置に問題があります。__attribute__((aligned(4),packed))
構造体の開始が 4 バイトの境界に位置合わせされ、パックされたステートメントのために内部が変更されていないため、gcc のマニュアルを読みました
。
もともと私はこれを持っていましたが、4 バイト境界に合わせずに配置されることがあります。
typedef struct
{
unsigned int code;
unsigned int length;
unsigned int seq;
unsigned int request;
unsigned char nonce[16];
unsigned short crc;
} __attribute__((packed)) CHALLENGE;
なのでこれに変更。
typedef struct
{
unsigned int code;
unsigned int length;
unsigned int seq;
unsigned int request;
unsigned char nonce[16];
unsigned short crc;
} __attribute__((aligned(4),packed)) CHALLENGE;
構造体が 4 バイト境界に整列され、内部データが 4 バイト境界に整列されているため、前に述べた理解は正しくないようですが、エンディアンのために構造体のサイズが増加しました。サイズは 42 から 44 バイトです。42 バイトの構造体に依存する他のアプリケーションがあるため、このサイズは重要です。
必要な操作を実行する方法を説明してもらえますか。どんな助けでも大歓迎です。