これらが素朴な質問である場合は申し訳ありません-Cが実際に低レベルでどのように機能するかについて、私はほとんど理解していません。
だから私は実行のためにいくつかのmmapされたメモリに書き込むマシンコードを生成しています。マシン コードを生成するための 16 進数リテラルの使用について混乱しています。
アセンブリ命令 (AT&T 構文) を考えてみますcmove %edx, %ecx
。これはマシンコード表現を持っています0x0F44CA
。
したがって、次のようなことをします:
char opcode[3] { 0x0F, 0x44, 0xCA };
「ボンネットの下」で正しいバイナリ文字列を表しますか? C の明らかに 16 進数リテラルは整数として格納されるため、そうではないのではないかと思います。私の懸念は、整数は 32 ビットであるため、格納される実際の値は
0x0000000F 0x00000044 0x000000CA
これは、私が必要としているものとはまったく異なるものです。
私が持っているもう1つの懸念は、配列に与える型が実際に格納されている値に影響するかということです. そうでしょう
uint8_t opcode[3] { 0x0F, 0x44, 0xCA };
また
int opcode[3] { 0x0F, 0x44, 0xCA };
とは異なる
char opcode[3] { 0x0F, 0x44, 0xCA };
フードの下?