1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
.text
.globl _rt$abort_oob
.globl __rt$abort_oob
_rt$abort_oob:
__rt$abort_oob:
/* format pc */
movq (%rsp),%rax
movq $15,%rdx
leaq .digitchars(%rip),%r8
leaq .pcstr(%rip),%r9
.loop:
movq %rax, %rcx
andq $0xf, %rcx
movb (%r8,%rcx),%r10b
movb %r10b,(%r9,%rdx)
subq $1, %rdx
shrq $4, %rax
jnz .loop
/* write abort message */
movq $0x2000004, %rax /* write(fd=%rdi, msg=%rsi, len=%rdx) */
movq $2, %rdi /* fd */
leaq .msg(%rip), %rsi /* msg */
movq $(.msgend-.msg), %rdx /* length */
syscall
/* kill self */
movq $0x2000014,%rax /* getpid */
syscall
movq %rax, %rdi /* save pid */
movq $0x2000025, %rax /* kill(pid=%rdi, sig=%rsi) */
movq $6, %rsi
syscall
.data
.msg: /* pc name: */
.ascii "0x"
.pcstr:
.ascii "0000000000000000"
.ascii ": out of bounds access\n"
.msgend:
.digitchars:
.ascii "0123456789abcdef"
|