Почему GDB печатает память в обратном порядке при группировании по словам?
Меня интересовало, как выглядит память, и я создал базовую структуру C:
typedef struct example_struct {
char foo[17];
} example_struct;
int main() {
struct example_struct *address_ptr;
char char_string[] = "AZZZBZZZCZZZDZZZ";
address_ptr = (example_struct *) malloc(sizeof(example_struct));
strcpy(address_ptr->foo, char_string);
return 1;
}
Я создал точку остановав операторе возврата и использовал x/20xb address_ptr
в GDB, чтобы показать мне 20 байт необработанной памяти.Выглядело это точно так, как и ожидалось:
(lldb) x/20xb address_ptr
0x7fbf40500190: 0x41 0x5a 0x5a 0x5a 0x42 0x5a 0x5a 0x5a
0x7fbf40500198: 0x43 0x5a 0x5a 0x5a 0x44 0x5a 0x5a 0x5a
0x7fbf405001a0: 0x00 0x00 0xd7 0xa1
Однако при использовании x/5xw
(который группирует память по словам, 4 байта в блоке, 5 раз по 4 байта равно также 20 байтов), я столкнулся с чем-то странным:
(lldb) x/5xw address_ptr
0x7fbf40500190: 0x5a5a5a41 0x5a5a5a42 0x5a5a5a43 0x5a5a5a44
0x7fbf405001a0: 0xa1d70000
Каждый блок должен читаться справа налево.Почему это так?
Правильно ли это и когда: почему направление чтения, когда 4 байта сгруппированы вместе, перевернуто?Поскольку память в наиболее распространенных архитектурах является адресно-байтовой (как и моя), я думаю, что обратное представление - это не то, как оно хранится в памяти, не так ли?
Просто было интересно, может, кто-то может просветитьмне, почему GDB делает это и почему только при печати шестнадцатеричных по четыре байта на блок и почему порядок не меняется при печати в шестнадцатеричном формате несгруппированной памяти.
Заранее спасибо:)