2017-01-23 1 views
1

я определяю переменную удобство в БГДChange STRUCT поле в GDB с помощью gdb.value

>set $param = (T_packet*)malloc(sizeof(T_packet)) 

я могу получить его с помощью Python

>p = gdb_helper.parse_and_eval("$param") 
<gdb.Value at 0x7f30b42f9170> 

показать на полях структуры

>python print(p.dereference()) 

{ID_PACKET = 0 , L_PACKET = 0} 

Попробуйте изменить поле (C эквивалентное: p-> ID_PACKET = 1)

p.dereference()["ID_PACKET"] = 1 
>"Setting of struct elements is not currently supported" 

Есть ли способ обновить значение поля ID_Packet внутри p, используя API-интерфейс GDB Python?

ответ

1

В настоящее время нет способа установить значение с использованием API Value. Это всего лишь небольшая дыра в gdb (я смотрел, но не мог найти ошибку для этого, поэтому, возможно, подавать заявку было бы неплохо).

Между тем вы можете обойти его, с небольшим затруднением, используя gdb.parse_and_eval. Идея состоит в том, чтобы получить адрес рассматриваемого поля, затем сформировать выражение, подобное *(TYPE *) 0xADDR = VALUE. В качестве альтернативы вы можете писать непосредственно в память с помощью Inferior.write_memory.

Оба этих подхода не сработают в некоторых ситуациях, например, вы не можете писать в регистр таким образом, чтобы это не работало над структурой, которая была раздроблена из-за оптимизации SRA.

Смежные вопросы