GDB проверяет формат отображения данных от 8 байт подряд до 4 байт

#assembly #x86 #gdb

#gdb

Вопрос:

Это отображение моего gdb

 (gdb) x/20bx 0xbffff2c0
0xbffff2c0: 0xd4    0xf2    0xff    0xbf    0x16    0x8f    0x04    0x08
0xbffff2c8: 0x05    0x00    0x00    0x00    0x00    0x00    0x0c    0x42
0xbffff2d0: 0x6b    0x00    0x00    0x00
  

Возможно ли изменить его на 4 байта подряд?

Ответ №1:

gdb (по крайней мере, в источниках 7.1 и 7.6, которые я просмотрел) жестко определяет максимальное количество элементов в строке, которые x будут печататься, в зависимости от формата.

 maxelts = 8;
if (size == 'w')
  maxelts = 4;
if (size == 'g')
  maxelts = 2;
if (format == 's' || format == 'i')
  maxelts = 1;
  

Обходной путь для получения желаемого — ввести x/4bx 0xbffff2c0 для печати 4 элементов, а затем ввести только enter для печати каждого последующего набора из 4 элементов.

Ответ №2:

Используйте x/20wx

 (gdb) x/20bx amp;result
0x7fff5fbff5f4: 0xff    0x7f    0x00    0x00    0x5e    0x10    0xc0    0x5f
0x7fff5fbff5fc: 0xff    0x7f    0x00    0x00    0x10    0xf6    0xbf    0x5f
0x7fff5fbff604: 0xff    0x7f    0x00    0x00

(gdb) x/20wx amp;result
0x7fff5fbff5f4: 0x00007fff  0x5fc0105e  0x00007fff  0x5fbff610
0x7fff5fbff604: 0x00007fff  0x8994d5fd  0x00007fff  0x00000000
0x7fff5fbff614: 0x00000000  0x00000001  0x00000000  0x5fbff7e8
0x7fff5fbff624: 0x00007fff  0x00000000  0x00000000  0x5fbff804
0x7fff5fbff634: 0x00007fff  0x5fbff830  0x00007fff  0x5fbff847
  

Комментарии:

1. Ох. Я имею в виду строку 1, начинающуюся с 0xbffff2c0' row 2 start from 0xbffff2c4`.. Извините, что не прояснил ситуацию