Почему чтение с адреса int не возвращает мне правильное значение int (C & gdb) - PullRequest
0 голосов
/ 29 января 2019

У меня есть программа ac, которую я отлаживаю с помощью gdb.Это делается на Ubuntu x86, и программа c компилируется с помощью gcc.Я объявляю две переменные типа int одну за другой

int a = atoi (argv[1]);
int b = atoi (argv[2]);

Передаваемые им значения равны 2 и 4 соответственно.Теперь я ломаю после этих строк и отлаживаю.На основании приведенных ниже данных может показаться, что int b начинается с адреса 0xbffff048 и занимает 0xbffff048, 0xbffff049, 0xbffff04a, 0xbffff04b.И также имеет смысл, что int b начинается со следующего адреса 0xbffff04c.Но если я отображаю значения этих четырех адресов, то, что я получаю в шестнадцатеричном формате, не равно десятичному 4 (что является значением b, подтвержденным в приложении и напечатанным в отладке gdb).Что я здесь интерпретирую / делаю неправильно?

(gdb) display a
2: a = 2
(gdb) display b
3: b = 4
(gdb) display &a
4: &a = (int *) 0xbffff04c
(gdb) display &b
5: &b = (int *) 0xbffff048
(gdb) x  0xbffff048
0xbffff048:     0x00000004
(gdb) x  0xbffff049
0xbffff049:     0x02000000
(gdb) x  0xbffff04a
0xbffff04a:     0x00020000
(gdb) x  0xbffff04b
0xbffff04b:     0x00000200

1 Ответ

0 голосов
/ 29 января 2019

Значение 2, которое вы видите, находится после обозначенных 4 байтов для целого числа.У вас есть ввод 4 прямо на месте первого куска.

Думаю, комментарии объясняют это еще лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...