NAME=ELF: dynamic p_offset
FILE=bins/elf/analysis/dynamic-poffset
CMDS=ir
EXPECT=<<EOF
[Relocations]

vaddr      paddr      type   name
---------------------------------
0x00600988 0x00000988 SET_64 __gmon_start__
0x006009a8 0x000009a8 SET_64 write
0x006009b0 0x000009b0 SET_64 close
0x006009b8 0x000009b8 SET_64 __libc_start_main
0x006009c0 0x000009c0 SET_64 open


5 relocations
EOF
RUN

NAME=ELF: Spurious relocations
FILE=bins/elf/analysis/spurious-relocs
CMDS=ir~vaddr=0x0000003a
EXPECT=<<EOF
EOF
RUN

NAME=ELF: .plt/.plt.sec sections
FILE=bins/elf/ls-cet
CMDS=pdi 10 @ main+0x28
EXPECT=<<EOF
0x00004e98                 31c0  xor eax, eax
0x00004e9a           e8a1e60000  call 0x13540
0x00004e9f       488d351e4a0100  lea rsi, [rip + 0x14a1e]
0x00004ea6           bf06000000  mov edi, 6
0x00004eab           e8b0fdffff  call sym.imp.setlocale
0x00004eb0       488d35584b0100  lea rsi, [rip + 0x14b58]
0x00004eb7       488d3d374b0100  lea rdi, [rip + 0x14b37]
0x00004ebe           e81dfaffff  call sym.imp.bindtextdomain
0x00004ec3       488d3d2b4b0100  lea rdi, [rip + 0x14b2b]
0x00004eca           e8d1f9ffff  call sym.imp.textdomain
EOF
RUN

NAME=ELF: use reloc table in dyn entry
FILE=bins/elf/simple-hello-world-with-wrong-rela-section-name
CMDS=<<EOF
e asm.comments=false
e asm.lines=false
pd 15 @ entry0~call
EOF
EXPECT=<<EOF
0x00001068      ff15722f0000   call qword [reloc.__libc_start_main]
EOF
RUN

NAME=ELF: R_X86_64_PLT32 patch reloc
FILE=bins/elf/radare2.c.obj
ARGS=-e io.cache=true
CMDS=<<EOF
e asm.comments=false
e asm.lines=false
pd 1 @ 0x0800005e
EOF
EXPECT=<<EOF
0x0800005e      e878840300     call r_spaces_set
EOF
RUN

NAME=ELF: R_X86_64_PLT32 patch reloc 2
FILE=bins/elf/test.ko
ARGS=-e io.cache=true
CMDS=<<EOF
e asm.comments=false
e asm.lines=false
e asm.flags=false
pd 1 @ 0x0800007c
pd 1 @ 0x0800008c
pd 1 @ 0x0800009f
EOF
EXPECT=<<EOF
0x0800007c      e88e0a0000     call __fentry__
0x0800008c      e8860a0000     call printk
0x0800009f      e8730a0000     call printk
EOF
RUN

NAME=ELF: R_X86_64_PLT32 patch reloc 2 (no io.cache)
FILE=bins/elf/test.ko
CMDS=<<EOF
e asm.comments=false
e asm.lines=false
e asm.flags=false
pd 1 @ 0x0800007c
pd 1 @ 0x0800008c
pd 1 @ 0x0800009f
EOF
EXPECT=<<EOF
0x0800007c      e800000000     call __fentry__
0x0800008c      e800000000     call printk
0x0800009f      e800000000     call printk
EOF
RUN

NAME=x86 32bit relocs in kernel module
FILE=bins/elf/linux-example-x86-32.ko
ARGS=-e bin.cache=true
CMDS=<<EOF
s 0x0800007c
pi 15
px 0x26
EOF
EXPECT=<<EOF
call __fentry__
push ebp
mov ebp, esp
push reloc..rodata.str1.1
call printk
xor eax, eax
leave
ret
push ebp
mov ebp, esp
push str.Ulu_mulu_n
call printk
pop eax
leave
ret
- offset -  7C7D 7E7F 8081 8283 8485 8687 8889 8A8B  CDEF0123456789AB
0x0800007c  e8cc c802 0055 89e5 68a2 0000 08e8 c3c8  .....U..h.......
0x0800008c  0200 31c0 c9c3 5589 e568 b100 0008 e8b2  ..1...U..h......
0x0800009c  c802 0058 c9c3                           ...X..
EOF
RUN

NAME=x86 32bit relocs in kernel module (bin.cache=false)
FILE=bins/elf/linux-example-x86-32.ko
CMDS=<<EOF
s 0x0800007c
pi 15
px 0x26
EOF
EXPECT=<<EOF
call __fentry__
push ebp
mov ebp, esp
push 0
call printk
xor eax, eax
leave
ret
push ebp
mov ebp, esp
push 0xf
call printk
pop eax
leave
ret
- offset -  7C7D 7E7F 8081 8283 8485 8687 8889 8A8B  CDEF0123456789AB
0x0800007c  e8fc ffff ff55 89e5 6800 0000 00e8 fcff  .....U..h.......
0x0800008c  ffff 31c0 c9c3 5589 e568 0f00 0000 e8fc  ..1...U..h......
0x0800009c  ffff ff58 c9c3                           ...X..
EOF
RUN

NAME=ELF: relocs init array
FILE=bins/elf/r2pay-arm64.so
CMDS=<<EOF
s section..init_array
pd 10
pd 1 @ 0x0800009f
EOF
EXPECT=<<EOF
            ;-- section..init_array:
            ;-- segment.LOAD1:
            0x00126510      .qword 0x0000000000000000                  ; [13] -rw- section size 728 named .init_array
            0x00126518      .qword 0x0000000000000000
            0x00126520      .qword 0x0000000000000000
            0x00126528      .qword 0x0000000000009080 ; entry.init0    ; RELOC 64 
            0x00126530      .qword 0x0000000000077d14 ; entry.init1    ; RELOC 64 
            0x00126538      .qword 0x0000000000000000
            0x00126540      .qword 0x0000000000000000
            0x00126548      .qword 0x0000000000000000
            0x00126550      .qword 0x0000000000000000
            0x00126558      .qword 0x0000000000000000
            0x0800009f      ff             unaligned
EOF
RUN

NAME=ELF: relocs r2pay
FILE=bins/elf/r2pay-arm64.so
ARGS=-e bin.cache=true
CMDS=<<EOF
s section..init_array
pd 10
pd 1 @ 0x0800009f
EOF
EXPECT=<<EOF
            ;-- section..init_array:
            ;-- segment.LOAD1:
            0x00126510      .qword 0x0000000000005a6c ; sym..datadiv_decode9958896245423089702 ; [13] -rw- section size 728 named .init_array
            0x00126518      .qword 0x0000000000005a80 ; sym..datadiv_decode10476194973746341988
            0x00126520      .qword 0x00000000000efddc ; sym..datadiv_decode16323044921667855934
            0x00126528      .qword 0x0000000000009080 ; entry.init0
            0x00126530      .qword 0x0000000000077d14 ; entry.init1
            0x00126538      .qword 0x00000000000f22e0 ; sym..datadiv_decode667225052219618748
            0x00126540      .qword 0x00000000000f22e4 ; sym..datadiv_decode8132880250332170398
            0x00126548      .qword 0x00000000000f22e8 ; sym..datadiv_decode3655886617018729963
            0x00126550      .qword 0x00000000000f22ec ; sym..datadiv_decode16406252260792032531
            0x00126558      .qword 0x00000000000f22f0 ; sym..datadiv_decode13403071575248320347
            0x0800009f      ff             unaligned
EOF
RUN
