thread-step-out-ret-addr-check.s
640 Bytes
.text
.globl asm_main
asm_main:
sub $0x8, %rsp
movq $0, (%rsp)
push %rsp
jmp nonstandard_stub
# Takes a single pointer argument via the stack, which is nonstandard for x64.
# Executing 'thread step-out' here will initially attempt to write a
# breakpoint to that stack address, but should fail because of the executable
# memory check.
.globl nonstandard_stub
nonstandard_stub:
mov (%rsp), %rdi
mov (%rdi), %rsi
add $1, %rsi
mov %rsi, (%rdi)
add $0x10, %rsp
ret
#ifdef __linux__
.section .note.GNU-stack,"",@progbits
#endif