2016-05-01 16 views
0

Я делаю небольшую программу, которая работает немного как strace, за исключением того, что я заставляю ее улавливать все вызовы, а также реты. Поскольку я не могу найти способ получить все вызовы и ret из-за косвенных вызовов, я хотел бы найти способ получить функцию, из которой возникает код op-кода. Есть ли у вас, ребята, есть какие-либо идеи о том, как сделать этоКак узнать начало кода операции ret при трассировке программы

+0

какой инструкция комплект это? –

ответ

1

Вы можете имитировать то, что ret делает: Он смотрит в стек по адресу %esp и устанавливает EIP к этому значению. Инструкция перед адресом в текущем стеке будет содержать call.

+0

ok, но поскольку размер предыдущей инструкции не фиксирован, не трудно ли вернуться назад и перейти к началу этой инструкции? –

+1

Да, это общее ограничение по всем кодовым архитектурам с переменным размером - вы не можете вернуться назад. Но вы знаете функцию вызова. Я не уверен, почему вы хотите получить «вызов» в первую очередь, но способ сделать это - это разобрать всю функцию из любой действующей точки, которую вы знаете, останавливаясь по адресу, считываемому 'ret' , – phihag

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

  • Нет связанных вопросов^_^