Мы используем отладчик gdb для чтения функций сборки.Что делает команда jmpq в этом примере
При сборке мы имеем следующие инструкции: mov 0xc(%rsp),%eax
jmpq *0x402390(,%rax,8)
В ячейке памяти *0x402390
мы имеем значение 0x8e
. В регистре rax у нас есть второй целочисленный ввод для этой конкретной функции (можно использовать переменную y).
Из нашего анализа, мы сделали вывод, что эта функция принимает в трех переменных (x, y, z)
и что они могут быть найдены на месте памяти (rsp)
, (rsp + 8)
, (rsp + 12)
соответственно.
Мы хотели бы знать, что происходит в jmpq *0x402390(,%rax,8)
. Перепрыгивает ли инструкция до (0x8e + rax*8)
? Если да, то как мы можем узнать, что называется этой инструкцией?
Это полный сброс ассемблерного кода для функции phase_3:
Возможный дубликат [Как работает инструкция jmp в сборке att в этом случае] (http://stackoverflow.com/questions/23418524/how-does-the-jmp-instruction-work-in-att-assembly -в этом случае). См. Также [этот вопрос] (http://stackoverflow.com/questions/26204974/disassembling-why-a-jmp-that-leads-nowhere/26205216) – Jester