Я пытаюсь исследовать структуру памяти типов данных, используя GDB- Python Type API (gdb.types). В частности, я хотел бы найти способ получить абсолютные смещения всех членов вложенной структуры, которая определена внутри родительской структуры.
В C я определил:
typedef struct
{
int a;
short bf1:2;
char b:4;
struct //nested struct
{
long x;
long y;
};
} a_struct;
Используя команду ptype в gdb, я получаю:
(gdb) ptype /o a_struct
/* offset | size */ type = struct a_struct {
/* 0 | 4 */ int a;
/* 4:14 | 2 */ short bf1 : 2;
/* 4: 2 | 1 */ char b : 4;
/* XXX 2-bit hole */
/* XXX 3-byte hole */
/* 8 | 16 */ struct {
/* 8 | 8 */ long x;
/* 16 | 8 */ long y;
/* total size (bytes): 16 */
};
/* total size (bytes): 24 */
}
Приведенный выше вывод показывает смещения полей вложенной анонимной структуры в виде абсолютных значений от начала родительской структуры, то есть x в байте 8 и y в байте 16.
Я пытаюсь получить те же результаты, используя API типа GDB Python, но безуспешно. В частности, я использую метод gdb.types.deep_items (lookup_type), который возвращает относительные смещения полей вложенной структуры, то есть 0 для первого поля (x) и 8 для второго поля (y).
Есть ли способ получить 8 для x и 16 для y (как показывает вывод ptype), используя GDB Python API?
Спасибо