C, сборка x86 - вызов альтернативы - PullRequest
0 голосов
/ 18 сентября 2018

Я новичок в сборке.Я хочу вызывать две или более функции, но не терять или вставлять что-либо в стек.Я использовал jmp, но он игнорирует следующие строки в коде и оставляет текущую функцию.Так возможно ли это сделать?(Дополнительная информация: у меня много функций, и я хочу подключить их (функция Create (pre / original / post)). Я не хочу делать hook отдельно (это займет огромное пространство, я хочу одну универсальную), поэтому у меня естьдля всех них созданы голые функции, которые будут хранить некоторую информацию в переменных для входящей функции, и они перейдут в универсальную функцию (тоже голая + код сборки), это зациклит Pre-хуки и вызовет их, затем вызовет оригинал ... Но проблемав том, что 'call' не тот случай, а функция jmp просто игнорирует следующий код)

1 Ответ

0 голосов
/ 18 сентября 2018

Вы нашли оба варианта.Поведение полностью определяется этим вопросом:

Сохраняете ли вы обратный адрес?

Если вы ответили «да», у вас есть поведение, например, вызов, и что-то выдвигаетсяв стек (хотя бы адрес возврата).

Если ответ отрицательный, вы не возвращаетесь к вызывающей функции, поэтому остальная часть пропускается (например, jmp).

Закон исключенного посредника гласит, что других вариантов нет.


Возможный способ обойти это - сохранить обратный адрес (возвращаясь к батуту) прямо поверхисходный адрес возврата (сохраняя его где-то еще, возможно, локальное хранилище).Таким образом вы поддерживаете макет стека, необходимый для функции, которую вы пересылаете.Часть вашего пост-хука должна затем вернуть исходный обратный адрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...