Могу ли я отслеживать поток управления в отладчике? - PullRequest
0 голосов
/ 21 декабря 2018


Используя инструкцию bt (backtrace) в gdb,
Мы можем приблизительно увидеть местоположение, через которое прошел поток управления.

Однако, это доступно только тогда, когда инструкция перехода - call.
(которая сохраняет адрес возврата в стеке).

Мне интересно, могу ли я отслеживать jmp аналогичным образом.
Как вы знаете, jmp не сохраняет адрес возврата ...


Моя ситуация:
Точнее, у меня проблема в ситуации ниже.

0x9230  push   %ebx                     // Where %ebx comes from?
0x9231  mov    0x8(%esp),%eax

Я хочу знать, откуда берется значение % ebx .
В где-то , поток управления переключен наздесь используя jmp.
Я хочу знать, где где-то .

Вопрос:
Можно ли как-нибудь отследить команду jmp?
(Или есть какое-нибудь возможное приложение, которое я могу использовать?)

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Если ваша проблема связана только с прямым семейством jmp (jmp, jz, jnz, ...), вы можете разобрать свой код и проверить, какая инструкция перехода туда приходит.

Лучший коммерческий дизассемблер - это IDA , который также имеет внутренний отладчик.Но получить это будет мне сложно.Но другие дизассемблеры, как правило, также могут показывать прямые ссылки на переходы, поэтому может быть полезно попробовать бесплатный в Linux.

Но если ваш переход является косвенным, как jmp [eax], вам нужно найти его с помощью отладки.Насколько я помню, отладчики Windows, такие как olydbg или X64dbg, могут показывать источник косвенного перехода, когда это происходит, но это только Windows.

0 голосов
/ 21 декабря 2018

Точнее, у меня проблема в ситуации ниже.
0x9230 push %ebx // Where %ebx comes from?

В такой ситуации вероятен отладчик reverse самый полезный.

В последний раз, когда я пытался это сделать, rr творил чудеса, отвечая на вопрос "откуда это взялось?"вопросы.

Здесь вы просто будете использовать reverse-stepi, пока не найдете инструкцию, которая обновила %ebx.

...