Я отладки аварии в Linux, и я собираюсь через узел функции cxa_finalizeНедоступен код в сборке
Катастрофа происходит на исходной строки, которая появляется недостижим:
cmp %edx,%esi // f >= &funcs->fns[0]
jae 0xb6e17b88 // enter for loop
jmp 0xb6e17c08 // exit for loop
lea 0x0(%esi,%eiz,1),%esi // crashes here - how do we even get here since there is a
// jmp above us, and nothing jumps to here
cmp %edi,0xc(%esi) // d == f->func.cxa.dso_handle (jumped to from below)
позже в этом методе есть еще одна инструкция lea 0x0(%esi,%eiz,1),%esi
, которая появляется после jmp
и nop
, которая также представляется недоступной. В этом случае jmp
также выходит из цикла for.
Есть ли какая-то парадигма, которая содержит недостижимые инструкции?
Редакция: Оказалось, что это не сбой в команде lea
, но по команде cmp
после нее, при обращении к памяти на esi
.
Это может быть просто мусор, который ваш отладчик разбирает с удобочитаемыми инструкциями. Это может произойти по разным причинам. –
Это поможет узнать адреса этого кода. Знаете ли вы, например, что команда jae 0xb6e17b88' - это не просто переход на инструкцию 'jmp' к инструкции' lea'? – davidbak
Это может быть и цель другого прыжка. «Lea» - это просто дополнение для выравнивания, между прочим, так что этого действительно не может быть достигнуто. – Jester