对不起,如果这些是幼稚的问题 - 我对 C 在低级别的真正工作方式知之甚少。
所以我正在生成机器代码以写入一些 mmap 内存以供执行。我对使用十六进制文字生成机器代码感到困惑。
考虑汇编指令(AT&T 语法):cmove %edx, %ecx
. 这有机器码表示0x0F44CA
。
所以,会做类似的事情:
char opcode[3] { 0x0F, 0x44, 0xCA };
在“幕后”时表示正确的二进制字符串?我怀疑它可能不会,因为显然 C 中的十六进制文字存储为整数。我担心的是,由于整数是 32 位的,因此存储的实际值是
0x0000000F 0x00000044 0x000000CA
这与我需要的完全不同。
我担心的另一个问题是,我赋予数组的类型会影响实际存储的值吗?也会
uint8_t opcode[3] { 0x0F, 0x44, 0xCA };
或者
int opcode[3] { 0x0F, 0x44, 0xCA };
有什么不同
char opcode[3] { 0x0F, 0x44, 0xCA };
在引擎盖下?