Я пытаюсь разобрать DWARF
info, а затем, используя эту информацию, получают локальные переменные из программы с помощью инструмента pin. Это вроде как использовать pin
как GDB
на стероидах. Однако у меня возникают проблемы с пониманием того, что они имеют в виду под регистрами, которые они имеют для локальных переменных и распределенных.
Например,
<2>< 1214> DW_TAG_variable
DW_AT_name mts
DW_AT_decl_line 69
DW_AT_type <90>
DW_AT_location DW_OP_breg4+44
Я понимаю, что для того, чтобы получить данные из переменной mts, мне нужно добавить 44 к некоторому регистру, моя проблема в том, что я не знаю точно, о каком регистре они говорят. Как я должен интерпретировать это? Я не мог ничего найти в Интернете.
Еще одним примером являются DW_OP_fbreg
, DW_OP_breg5
и так далее.
Кто-нибудь знает, о каких регистрах они говорят в x86
контекст? Они говорят об ebp или esp? Благодарю.
Это символическое имя регистра. Увидеть xxx_map_dwarf_register
методы в WineHQИсточник для:
Например, DW_OP_breg4
является ESP
на i386.
Также смотрите следующее, если вы еще этого не сделали.
Других решений пока нет …