2013-04-16 3 views
1

Я хочу, чтобы развеяться x64 стек вызовов, так что я пытаюсь следовать «развернутая процедура» Я нашел здесь:
http://msdn.microsoft.com/en-us/library/8ydc79k6.aspxстек x64 размотки и проверки, если RIP находится в эпилоге

Я понимаю, что если RIP находится в эпилоге, нам нужно вычислить смещение RSP с учетом операций, которые еще нужно сделать, но мне непонятно, как выяснить, находится ли RIP в эпилоге или нет (в разделе 3.a) ?
Может кто-нибудь объяснить это мне? (Ссылка или пример кода будет также значительно оценен)

+0

Я рекомендую прочитать это о x64 ABI: TomCR

+0

Я мог бы Не найди ничего полезного в этой ссылке ... – Idov

ответ

2

От The Unwind Procedure

Для того, чтобы определить, является ли RIP находится в пределах эпилога, кодовый поток от RIP на рассматриваются. Если этот кодовый поток может быть согласован с задней части законного эпилога, как описано в разделе CNDJ6nn5us4RjIIAqgBLqQsCAAAACAAAAA4AAABfAFIAZQBmADQAOQA2ADAAOQAyADQAMgA1AAAA REF _Ref496092425 \ г \ ч 0, то в эпилоге, а остальные части эпилога моделируются, с контекстом записи обновляется каждая команда обрабатывается

, и от Prolog and Epilog (я рекомендую всю статью для лучшего понимания)

это единственные правовые формы для эпилог. Он должен состоять из либо добавления RSP, константы, либо lea RSP, константы [FPReg], а затем серии с нулевыми или более 8-байтовыми регистрами и возвратом или jmp. (Только подмножество операторов jmp допустимо в эпилоге. [...]). Никакой другой код не отображается. В частности, ничто не может быть запланировано в эпилоге, включая загрузку возвращаемого значения.

Обратите внимание, что, когда указатель кадра не используется, эпилог должен использовать добавление RSP, постоянное, чтобы освободить фиксированную часть стека. Он может не использовать lea RSP, постоянный [RSP]. Это ограничение существует, поэтому в коде unwind меньше символов, распознаваемых при поиске эпилогов.

Похоже, что если код окажется в такой ситуации, он проверяет выполненный код в настоящий момент для этих конкретных инструкций и, если он соответствует, считает себя находящимся в эпилоге.