1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- ;------------------------------------------------------------------------------
- ;
- ; Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
- ; SPDX-License-Identifier: BSD-2-Clause-Patent
- ;
- ; Abstract:
- ;
- ; This file provides macro definitions for stuffing the Return Stack Buffer (RSB)
- ; for NASM files.
- ;
- ;------------------------------------------------------------------------------
- %define RSB_STUFF_ENTRIES 0x20
- ;
- ; parameters:
- ; @param 1: register to use as counter (e.g. IA32:eax, X64:rax)
- ; @param 2: stack pointer to restore (IA32:esp, X64:rsp)
- ; @param 3: the size of a stack frame (IA32:4, X64:8)
- ;
- %macro StuffRsb 3
- mov %1, RSB_STUFF_ENTRIES / 2
- %%Unroll1:
- call %%Unroll2
- %%SpecTrap1:
- pause
- lfence
- jmp %%SpecTrap1
- %%Unroll2:
- call %%StuffLoop
- %%SpecTrap2:
- pause
- lfence
- jmp %%SpecTrap2
- %%StuffLoop:
- dec %1
- jnz %%Unroll1
- add %2, RSB_STUFF_ENTRIES * %3 ; Restore the stack pointer
- %endmacro
- ;
- ; RSB stuffing macros for IA32 and X64
- ;
- %macro StuffRsb32 0
- StuffRsb eax, esp, 4
- %endmacro
- %macro StuffRsb64 0
- StuffRsb rax, rsp, 8
- %endmacro
|