.SETFRAME
Заполняет поле регистра кадра и смещение в сведениях об очистке с помощью указанного регистра (reg) и смещения (смещения). Смещение должно быть кратным 16 и меньше или равно 240. Эта директива также создает UWOP_SET_FPREG
запись кода очистки для указанного регистра с помощью текущего смещения пролога.
Синтаксис
. REG SETFRAME, смещение
Замечания
. SETFRAME позволяет ml64.exe пользователям указывать способ очистки функции кадра и допускается только в прологе, который расширяется от объявления PROC FRAME к прологу . Директива ENDPROLOG . Эти директивы не создают код; они создаются .xdata
только и .pdata
. . SETFRAME должен предшествовать инструкциям, которые фактически реализуют действия, которые должны быть размножены. Рекомендуется упаковать как директивы очистки, так и код, которые они предназначены для очистки макроса для обеспечения соглашения.
Дополнительные сведения см. в статье MASM для x64 (ml64.exe).
Пример
Description
В следующем примере показано, как использовать указатель кадра:
Код
; ml64 frmex2.asm /link /entry:frmex2 /SUBSYSTEM:CONSOLE
_text SEGMENT
frmex2 PROC FRAME
push rbp
.pushreg rbp
sub rsp, 010h
.allocstack 010h
mov rbp, rsp
.setframe rbp, 0
.endprolog
; modify the stack pointer outside of the prologue (similar to alloca)
sub rsp, 060h
; we can unwind from the following AV because of the frame pointer
mov rax, 0
mov rax, [rax] ; AV!
add rsp, 060h
add rsp, 010h
pop rbp
ret
frmex2 ENDP
_text ENDS
END
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по