* Added build files [Capstone to Zydis] * x86 Analysis [Capstone to Zydis] * Changed x86 RzIL [Capstone to Zydis] * Changed asm and arch files [Capstone to Zydis] * Compilation, build error and test fixes [Capstone to Zydis] * Test changes [Capstone to Zydis] * Remaining changes [Capstone to Zydis] * Added BE support [Capstone to Zydis] --------- Co-authored-by: tushar3q34 <tushar3q34@gmail.com>
950 lines
34 KiB
Text
950 lines
34 KiB
Text
NAME=Cd 4096
|
||
FILE==
|
||
CMDS=<<EOF
|
||
e asm.arch=x86
|
||
e asm.bits=64
|
||
Cd 4096
|
||
pd 2~?
|
||
EOF
|
||
EXPECT=<<EOF
|
||
18
|
||
EOF
|
||
RUN
|
||
|
||
NAME=Cd 4096 asm.meta=false
|
||
FILE==
|
||
CMDS=<<EOF
|
||
e asm.meta=false
|
||
e asm.arch=x86
|
||
e asm.bits=64
|
||
Cd 4096
|
||
pd 2~?
|
||
pd 1~?
|
||
pd 2
|
||
EOF
|
||
EXPECT=<<EOF
|
||
3
|
||
2
|
||
.data: 4096
|
||
0x00000000 .hex 00000000000000000000000000000000...
|
||
0x00001000 invalid
|
||
EOF
|
||
RUN
|
||
|
||
NAME=Cd4+pdi2
|
||
FILE=bins/mach0/ls-osx-x86_64
|
||
CMDS=<<EOF
|
||
e asm.bytes=0
|
||
so
|
||
pdq 2
|
||
Cd 4
|
||
pdq 2
|
||
EOF
|
||
EXPECT=<<EOF
|
||
0x1000013d9 mov rbp, rsp
|
||
0x1000013dc push r15
|
||
0x1000013d9 .dword 0x41564157
|
||
0x1000013dd push rdi
|
||
EOF
|
||
RUN
|
||
|
||
|
||
NAME=bytes for invalid insn (#11434)
|
||
FILE==
|
||
CMDS=<<EOF
|
||
e asm.bytes=true
|
||
e asm.arch=x86
|
||
e asm.bits=64
|
||
wx 60; pd 2
|
||
echo
|
||
wx 906090; pd 3
|
||
EOF
|
||
EXPECT=<<EOF
|
||
0x00000000 60 invalid
|
||
0x00000001 0000 add byte [rax], al
|
||
|
||
0x00000000 90 nop
|
||
0x00000001 60 invalid
|
||
0x00000002 90 nop
|
||
EOF
|
||
RUN
|
||
|
||
NAME=arm indirect subrel fix (#11780)
|
||
FILE=bins/elf/analysis/arm_32_flags0
|
||
CMDS=<<EOF
|
||
e asm.bytes=false
|
||
e asm.cmt.right=true
|
||
pd 1 @ 0x000102e0
|
||
pd 1 @ 0x000102e8
|
||
echo
|
||
e asm.cmt.right=false
|
||
pd 1 @ 0x000102e0
|
||
pd 1 @ 0x000102e8
|
||
EOF
|
||
EXPECT=<<EOF
|
||
0x000102e0 ldr ip, sym.__libc_csu_fini ; [0x102f8:4]=0x10494 sym.__libc_csu_fini
|
||
0x000102e8 ldr r0, main ; [0x102fc:4]=0x10408 sym.main
|
||
|
||
; [0x102f8:4]=0x10494 sym.__libc_csu_fini
|
||
0x000102e0 ldr ip, sym.__libc_csu_fini
|
||
; [0x102fc:4]=0x10408 sym.main
|
||
0x000102e8 ldr r0, main
|
||
EOF
|
||
RUN
|
||
|
||
NAME=realign after sparse (#11810)
|
||
FILE=bins/pe/cmd_adf_sample0.exe
|
||
CMDS=<<EOF
|
||
e asm.bytes=false
|
||
e asm.comments=false
|
||
s 0x560e67
|
||
af+ fcn.00560e67 @ 0x00560e67
|
||
afb+ 0x00560e67 0x00560e67 6 0x00560e7d
|
||
afb+ 0x00560e67 0x00560e7d 8 0x00560e96
|
||
afb+ 0x00560e67 0x00560e96 7 0x00560eb1
|
||
afb+ 0x00560e67 0x00560eb1 297
|
||
pdf
|
||
EOF
|
||
EXPECT=<<EOF
|
||
/ fcn.00560e67();
|
||
| : 0x00560e67 push esi
|
||
| ,==< 0x00560e68 jmp 0x560e7d
|
||
..
|
||
| `--> 0x00560e7d pop esi
|
||
| : 0x00560e7e push eax
|
||
| : 0x00560e7f push edx
|
||
| ,==< 0x00560e80 jmp 0x560e96
|
||
..
|
||
| |`--> 0x00560e96 rdtsc
|
||
| | : 0x00560e98 jmp 0x560eb1
|
||
..
|
||
| ||: 0x00560eb1 pop edx
|
||
| ||: 0x00560eb2 pop eax
|
||
| ||: 0x00560eb3 pushfd
|
||
| ||: 0x00560eb4 push eax
|
||
| ||: 0x00560eb5 mov dword [esp], ecx
|
||
| ||: 0x00560eb8 push ecx
|
||
| ||: 0x00560eb9 mov dword [esp], 0x4b7dbaf4
|
||
| ||: 0x00560ec0 mov dword [esp], ebx
|
||
| ||: 0x00560ec3 mov ebx, 0x60
|
||
| ||: 0x00560ec8 mov dword [esp+0x04], ebx
|
||
| ||: 0x00560ecc pop ebx
|
||
| ||: 0x00560ecd push ecx
|
||
| ||: 0x00560ece mov dword [esp], 0x7fdd7312
|
||
| ||: 0x00560ed5 or dword [esp], 0x76fe6216
|
||
| |: 0x00560edc shl dword [esp], 0x01
|
||
| |: 0x00560ee0 or dword [esp], 0x5677e157
|
||
| |: 0x00560ee7 sub dword [esp], 0x66a97007
|
||
| |: 0x00560eee add dword [esp], 0xd4a8fad4
|
||
| |: 0x00560ef5 xchg dword [esp], ebp
|
||
| |: 0x00560ef8 not ebp
|
||
| |: 0x00560efa xchg dword [esp], ebp
|
||
| |: 0x00560efd inc dword [esp]
|
||
| |: 0x00560f00 sub dword [esp], 0x91ea8610
|
||
| |: 0x00560f07 push ebp
|
||
| |: 0x00560f08 mov ebp, esp
|
||
| |: 0x00560f0a add ebp, 0x04
|
||
| |: 0x00560f10 sub ebp, 0x04
|
||
| |: 0x00560f16 xchg dword [esp], ebp
|
||
| |: 0x00560f19 pop esp
|
||
| |: 0x00560f1a mov dword [esp], ecx
|
||
| |: 0x00560f1d mov dword [esp], eax
|
||
| |: 0x00560f20 push 0x5a9b4939
|
||
| |: 0x00560f25 mov dword [esp], ecx
|
||
| |: 0x00560f28 mov ecx, esp
|
||
| : 0x00560f2a push ebx
|
||
| : 0x00560f2b mov ebx, 0x04
|
||
| : 0x00560f30 add ecx, ebx
|
||
| : 0x00560f32 pop ebx
|
||
| : 0x00560f33 sub ecx, 0x04
|
||
| : 0x00560f36 xor ecx, dword [esp]
|
||
| : 0x00560f39 xor dword [esp], ecx
|
||
| : 0x00560f3c xor ecx, dword [esp]
|
||
| : 0x00560f3f pop esp
|
||
| : 0x00560f40 mov dword [esp], ebx
|
||
| : 0x00560f43 push dword [esp+0x10]
|
||
| : 0x00560f47 mov eax, dword [esp]
|
||
| : 0x00560f4a push esi
|
||
| : 0x00560f4b mov esi, esp
|
||
| : 0x00560f4d push edx
|
||
| : 0x00560f4e mov edx, 0x75ff55bb
|
||
| : 0x00560f53 and edx, 0x7e5d8b17
|
||
| : 0x00560f59 xor edx, 0x745d0117
|
||
| : 0x00560f5f add esi, edx
|
||
| : 0x00560f61 mov edx, dword [esp]
|
||
| : 0x00560f64 add esp, 0x04
|
||
| : 0x00560f67 add esi, 0x04
|
||
| : 0x00560f6d xchg dword [esp], esi
|
||
| : 0x00560f70 pop esp
|
||
| : 0x00560f71 push dword [esp+0x08]
|
||
| : 0x00560f75 push dword [esp]
|
||
| : 0x00560f78 mov ebx, dword [esp]
|
||
| : 0x00560f7b push ebx
|
||
| : 0x00560f7c mov ebx, esp
|
||
| : 0x00560f7e add ebx, 0x04
|
||
| : 0x00560f84 add ebx, 0x04
|
||
| : 0x00560f8a xchg dword [esp], ebx
|
||
| : 0x00560f8d pop esp
|
||
| : 0x00560f8e add esp, 0x04
|
||
| : 0x00560f91 mov dword [esp+0x08], eax
|
||
| : 0x00560f95 mov dword [esp+0x10], ebx
|
||
| : 0x00560f99 push dword [esp]
|
||
| : 0x00560f9c pop ebx
|
||
| : 0x00560f9d push ebx
|
||
| : 0x00560f9e mov ebx, esp
|
||
| : 0x00560fa0 add ebx, 0x04
|
||
| : 0x00560fa6 add ebx, 0x04
|
||
| : 0x00560fa9 push ebx
|
||
| : 0x00560faa push dword [esp+0x04]
|
||
| : 0x00560fae pop ebx
|
||
| : 0x00560faf pop dword [esp]
|
||
| : 0x00560fb2 mov esp, dword [esp]
|
||
| : 0x00560fb5 mov eax, dword [esp]
|
||
| : 0x00560fb8 push ebx
|
||
| : 0x00560fb9 mov dword [esp], 0x1e8e43e4
|
||
| : 0x00560fc0 mov dword [esp], eax
|
||
| : 0x00560fc3 mov eax, esp
|
||
| : 0x00560fc5 add eax, 0x04
|
||
| : 0x00560fca add eax, 0x04
|
||
| : 0x00560fcf xchg dword [esp], eax
|
||
| : 0x00560fd2 mov esp, dword [esp]
|
||
\ `=< 0x00560fd5 jmp 0x43d3f7
|
||
EOF
|
||
RUN
|
||
|
||
NAME=pdf hidden code in sparse fix
|
||
FILE=bins/pe/cmd_adf_sample0.exe
|
||
CMDS=<<EOF
|
||
e asm.bytes=true
|
||
e asm.var=false
|
||
e io.cache=true
|
||
wx 90eb09 @ 0x560e71
|
||
wx e904000000 @ 0x560e68
|
||
wx e940c5edff @ 0x560eb2
|
||
s 0x560e67
|
||
af+ fcn.00560e67 @ 0x00560e67
|
||
afb+ 0x00560e67 0x00560e67 6 0x00560e71
|
||
afb+ 0x00560e67 0x00560e71 3 0x00560e7d
|
||
afb+ 0x00560e67 0x00560e7d 8 0x00560e96
|
||
afb+ 0x00560e67 0x00560e96 7 0x00560eb1
|
||
afb+ 0x00560e67 0x00560eb1 6
|
||
pdf
|
||
echo
|
||
pdr.
|
||
EOF
|
||
EXPECT=<<EOF
|
||
/ fcn.00560e67();
|
||
| : 0x00560e67 56 push esi
|
||
| ,==< 0x00560e68 e904000000 jmp 0x560e71
|
||
..
|
||
| `--> 0x00560e71 90 nop
|
||
| : 0x00560e72 eb09 jmp 0x560e7d
|
||
..
|
||
| : 0x00560e7d 5e pop esi
|
||
| : 0x00560e7e 50 push eax
|
||
| : 0x00560e7f 52 push edx
|
||
| ,==< 0x00560e80 e911000000 jmp 0x560e96
|
||
..
|
||
| |`--> 0x00560e96 0f31 rdtsc
|
||
| | : 0x00560e98 e914000000 jmp 0x560eb1
|
||
..
|
||
| ||: 0x00560eb1 5a pop edx
|
||
\ ||`=< 0x00560eb2 e940c5edff jmp 0x43d3f7
|
||
|
||
/ fcn.00560e67();
|
||
| 0x00560e67 56 push esi
|
||
| 0x00560e68 e904000000 jmp 0x560e71
|
||
| ----------- true: 0x00560e71
|
||
| 0x00560e71 90 nop
|
||
| 0x00560e72 eb09 jmp 0x560e7d
|
||
| ----------- true: 0x00560e7d
|
||
| 0x00560e7d 5e pop esi
|
||
| 0x00560e7e 50 push eax
|
||
| 0x00560e7f 52 push edx
|
||
| 0x00560e80 e911000000 jmp 0x560e96
|
||
| ----------- true: 0x00560e96
|
||
| 0x00560e96 0f31 rdtsc
|
||
| 0x00560e98 e914000000 jmp 0x560eb1
|
||
| ----------- true: 0x00560eb1
|
||
| 0x00560eb1 5a pop edx
|
||
\ 0x00560eb2 e940c5edff jmp 0x43d3f7
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=esil func cmts
|
||
FILE=bins/elf/arm1.bin
|
||
CMDS=<<EOF
|
||
tn- __libc_start_main
|
||
e asm.bytes=true
|
||
e asm.emu=true
|
||
e emu.write=true
|
||
s 0x8174
|
||
af
|
||
e asm.cmt.right=true
|
||
pdf
|
||
echo
|
||
e asm.cmt.right=false
|
||
pdf
|
||
echo
|
||
agf
|
||
EOF
|
||
EXPECT=<<EOF
|
||
/ fcn.00008174(void *main, int argc);
|
||
| ; arg void *main @ r0
|
||
| ; arg int argc @ r1
|
||
| 0x00008174 b80000eb bl sym.__libc_start_main ; lr=0x8178 -> 0xeb0002a4 ; pc=0x845c -> 0xe92d41f0
|
||
| ; int __libc_start_main(-1, -1, -1, -1, -1, -1, -1)
|
||
\ 0x00008178 a40200eb bl sym.abort ; lr=0x817c -> 0xe92d4030 ; pc=0x8c10 -> 0xe59f62a0
|
||
\ ; void abort(void)
|
||
|
||
/ fcn.00008174(void *main, int argc);
|
||
| ; arg void *main @ r0
|
||
| ; arg int argc @ r1
|
||
| ; lr=0x8178 -> 0xeb0002a4
|
||
| ; pc=0x845c -> 0xe92d41f0 sym.__libc_start_main
|
||
| ; int __libc_start_main(-1, -1, -1, -1, -1, -1, -1)
|
||
| 0x00008174 b80000eb bl sym.__libc_start_main
|
||
| ; lr=0x817c -> 0xe92d4030
|
||
| ; pc=0x8c10 -> 0xe59f62a0 sym.abort
|
||
| ; void abort(void)
|
||
\ 0x00008178 a40200eb bl sym.abort
|
||
|
||
.--------------------------------------------------------.
|
||
| 0x8174 |
|
||
| fcn.00008174(void *main, int argc); |
|
||
| ; arg void *main @ r0 |
|
||
| ; arg int argc @ r1 |
|
||
| ; lr=0x8178 -> 0xeb0002a4 |
|
||
| ; pc=0x845c -> 0xe92d41f0 sym.__libc_start_main |
|
||
| ; int __libc_start_main(-1, -1, -1, -1, -1, -1, -1) |
|
||
| bl sym.__libc_start_main |
|
||
| ; lr=0x817c -> 0xe92d4030 |
|
||
| ; pc=0x8c10 -> 0xe59f62a0 sym.abort |
|
||
| ; void abort(void) |
|
||
| bl sym.abort |
|
||
`--------------------------------------------------------'
|
||
EOF
|
||
RUN
|
||
|
||
NAME=esil func cmt refline
|
||
FILE=bins/elf/ls
|
||
CMDS=<<EOF
|
||
e asm.bytes=true
|
||
e asm.emu=true
|
||
e asm.types=0
|
||
e io.cache=true
|
||
wx 7d0a7f08eb00 @ 0x5b02
|
||
pd 4 @ 0x5b02
|
||
EOF
|
||
EXPECT=<<EOF
|
||
,=< 0x00005b02 7d0a jnl 0x5b0e ; rip=0x5b0e -> 0x8d4890f4 ; likely
|
||
,==< 0x00005b04 7f08 jnle 0x5b0e ; rip=0x5b0e -> 0x8d4890f4 ; likely
|
||
,===< 0x00005b06 eb00 jmp 0x5b08 ; rip=0x5b08 -> 0xc30a15ff
|
||
`---> 0x00005b08 ff150ac30100 call qword [reloc.__libc_start_main] ; [reloc.__libc_start_main:8]=0x23708 reloc.target.__libc_start_main ; rsp=0xfffffffffffffff8 ; rip=0x23708 -> 0x464c457f reloc.target.__libc_start_main
|
||
EOF
|
||
RUN
|
||
|
||
NAME=aht asm.cmt.right=false fix (#12330)
|
||
FILE==
|
||
CMDS=<<EOF
|
||
e asm.bytes=true
|
||
e asm.arch=x86
|
||
e asm.bits=64
|
||
wx 488b4608
|
||
td "struct ms { char b[8]; int member1; int member2; };"
|
||
aht ms.member1
|
||
e asm.cmt.right=true
|
||
pd 1
|
||
e asm.cmt.right=false
|
||
pd 1
|
||
EOF
|
||
EXPECT=<<EOF
|
||
0x00000000 488b4608 mov rax, qword [rsi+ms.member1]
|
||
0x00000000 488b4608 mov rax, qword [rsi+ms.member1]
|
||
EOF
|
||
RUN
|
||
|
||
NAME=asm.bb.line fcnline glitches fix, bblines btw bb & non-bb
|
||
FILE=bins/elf/before-after-main
|
||
CMDS=<<EOF
|
||
e asm.bb.line=true
|
||
e asm.bytes=false
|
||
e asm.comments=false
|
||
e asm.fcn.signature=false
|
||
e asm.var=false
|
||
s sym.deregister_tm_clones
|
||
aF
|
||
s sym.deregister_tm_clones-1
|
||
pd 3
|
||
echo
|
||
s sym.deregister_tm_clones+38
|
||
pd 4
|
||
echo
|
||
s entry.fini0
|
||
aF
|
||
s entry.fini0+32
|
||
pd 3
|
||
EOF
|
||
EXPECT=<<EOF
|
||
0x080483cf nop
|
||
/ sym.deregister_tm_clones
|
||
| 0x080483d0 mov eax, obj.completed.6891
|
||
| 0x080483d5 cmp eax, obj.completed.6891
|
||
|
||
| 0x080483f6 ret
|
||
|
|
||
0x080483f7 mov esi, esi
|
||
0x080483f9 lea edi, dword [edi]
|
||
|
|
||
\ 0x08048400 ret
|
||
|
||
| 0x08048470 ret
|
||
|
|
||
0x08048471 lea esi, dword [esi]
|
||
|
|
||
\ 0x08048478 ret
|
||
EOF
|
||
RUN
|
||
|
||
# asm.bb.line with no analysis is not supported, since backward jump targets
|
||
# can't be determined completely without analysis of the whole function
|
||
# (assuming no jumps from outside the function into the middle)
|
||
NAME=asm.bb.line no-anal
|
||
FILE=bins/elf/lab2
|
||
CMDS=<<EOF
|
||
e asm.bb.line=true
|
||
e asm.bytes=false
|
||
e asm.comments=false
|
||
e io.cache=true
|
||
wx 907f04 @ 0x08048597
|
||
wx 75f3909090 @ 0x080485bc
|
||
s 0x08048598
|
||
pd 11
|
||
EOF
|
||
EXPECT=<<EOF
|
||
,=< 0x08048598 jnle 0x804859e
|
||
| 0x0804859a cmp al, byte [esp+0x27]
|
||
,`-> 0x0804859e jz 0x80485b3
|
||
| 0x080485a0 mov dword [esp], str.Wrong
|
||
| 0x080485a7 call sym.imp.puts
|
||
| 0x080485ac mov eax, 0x01
|
||
,=.-> 0x080485b1 jmp 0x80485f9
|
||
|`--> 0x080485b3 add dword [esp+0x20], 0x01
|
||
| : 0x080485b8 mov ebx, dword [esp+0x20]
|
||
| `=< 0x080485bc jnz 0x80485b1
|
||
| 0x080485be nop
|
||
EOF
|
||
RUN
|
||
|
||
NAME=asm.bb.line glitch fix (#12516)
|
||
FILE=bins/elf/ls
|
||
CMDS=<<EOF
|
||
e asm.bb.line=true
|
||
e asm.bytes=false
|
||
e asm.comments=false
|
||
e io.cache=true
|
||
wx 907f03 @ 0x4232
|
||
wx 72f1909090 @ 0x424a
|
||
s main
|
||
aF
|
||
s 0x4233
|
||
pd 9
|
||
echo
|
||
pdJ 9~{}
|
||
EOF
|
||
EXPECT=<<EOF
|
||
| ,=< 0x00004233 jnle 0x4238
|
||
| | |
|
||
| | 0x00004235 test rax, rax
|
||
| | |
|
||
| ,`-> 0x00004238 jz 0x4243
|
||
| | |
|
||
| | 0x0000423a cmp byte [rax], 0x00
|
||
| | |
|
||
| ,=.-> 0x0000423d jnz 0x4b1c
|
||
| ||: |
|
||
| |`--> 0x00004243 lea r12, qword [var_58h]
|
||
| | : 0x00004248 xor eax, eax
|
||
| | `=< 0x0000424a jb 0x423d
|
||
| | |
|
||
| | 0x0000424c nop
|
||
|
||
[
|
||
{
|
||
"offset": 16947,
|
||
"arrow": 16952,
|
||
"text": "| ,=< 0x00004233 jnle 0x4238"
|
||
},
|
||
{
|
||
"offset": 16949,
|
||
"text": "| | |"
|
||
},
|
||
{
|
||
"offset": 16949,
|
||
"text": "| | 0x00004235 test rax, rax"
|
||
},
|
||
{
|
||
"offset": 16952,
|
||
"arrow": 16963,
|
||
"text": "| | |"
|
||
},
|
||
{
|
||
"offset": 16952,
|
||
"arrow": 16963,
|
||
"text": "| ,`-> 0x00004238 jz 0x4243"
|
||
},
|
||
{
|
||
"offset": 16954,
|
||
"text": "| | |"
|
||
},
|
||
{
|
||
"offset": 16954,
|
||
"text": "| | 0x0000423a cmp byte [rax], 0x00"
|
||
},
|
||
{
|
||
"offset": 16957,
|
||
"arrow": 19228,
|
||
"text": "| | |"
|
||
},
|
||
{
|
||
"offset": 16957,
|
||
"arrow": 19228,
|
||
"text": "| ,=.-> 0x0000423d jnz 0x4b1c"
|
||
},
|
||
{
|
||
"offset": 16963,
|
||
"text": "| ||: |"
|
||
},
|
||
{
|
||
"offset": 16963,
|
||
"text": "| |`--> 0x00004243 lea r12, qword [var_58h]"
|
||
},
|
||
{
|
||
"offset": 16968,
|
||
"text": "| | : 0x00004248 xor eax, eax"
|
||
},
|
||
{
|
||
"offset": 16970,
|
||
"arrow": 16957,
|
||
"text": "| | `=< 0x0000424a jb 0x423d"
|
||
},
|
||
{
|
||
"offset": 16972,
|
||
"text": "| | |"
|
||
},
|
||
{
|
||
"offset": 16972,
|
||
"text": "| | 0x0000424c nop"
|
||
}
|
||
]
|
||
EOF
|
||
RUN
|
||
|
||
NAME=flag-func_sig order
|
||
FILE=bins/elf/abcde-qt32
|
||
CMDS=<<EOF
|
||
e asm.demangle=true
|
||
e asm.bytes=false
|
||
e asm.sub.names=false
|
||
e asm.sub.jmp=false
|
||
aa
|
||
e asm.cmt.right=true
|
||
pd 1 @ 0x080493b4
|
||
pd 1 @ 0x080493ca
|
||
echo
|
||
e asm.cmt.right=false
|
||
pd 1 @ 0x080493b4
|
||
pd 1 @ 0x080493ca
|
||
EOF
|
||
EXPECT=<<EOF
|
||
| 0x080493b4 call 0x80490b0 ; sym.imp.strlen ; size_t strlen(const char *s)
|
||
| 0x080493ca call 0x80490e0 ; method.QString.fromAscii_helper_char_const___int
|
||
|
||
| ; sym.imp.strlen
|
||
| ; size_t strlen(const char *s)
|
||
| 0x080493b4 call 0x80490b0
|
||
| ; method.QString.fromAscii_helper_char_const___int
|
||
| 0x080493ca call 0x80490e0
|
||
EOF
|
||
RUN
|
||
|
||
NAME=newlined-comment-refline fix (#14627), wayward rip-relative flag fixes
|
||
FILE=bins/elf/ls
|
||
CMDS=<<EOF
|
||
e asm.bytes=false
|
||
e asm.sub.names=true
|
||
(pd_tests; e asm.sub.rel=true; pd 15; echo; e asm.sub.rel=false; pd 1 @ 0x000041ee; pd 1 @ 0x00004225)
|
||
(insn_tests; e scr.color=0; .(pd_tests); echo; e scr.color=1; .(pd_tests))
|
||
s 0x000041e0
|
||
.(insn_tests)
|
||
echo
|
||
e io.cache=true
|
||
wa "mov rdx, [rip + 0x17792]; mov rsi, [rip + 0x1d84b]" @ 0x000041e7
|
||
wa "mov rdi, [rip + 0x147f6]" @ 0x00004225
|
||
.(insn_tests)
|
||
echo
|
||
wx 483b1592770100483b354bd80100 @ 0x000041e7 # cmp rdx, [rip + 0x17792]; cmp rsi, [rip + 0x1d84b]
|
||
wx 483b3df6470100 @ 0x00004225 # cmp rdi, [rip + 0x147f6]
|
||
.(insn_tests)
|
||
EOF
|
||
EXPECT=<<EOF
|
||
,=< 0x000041e0 jz 0x421a
|
||
| 0x000041e2 mov ecx, 0x04
|
||
| 0x000041e7 lea rdx, qword [0x0001b980]
|
||
| 0x000041ee lea rsi, qword [0x00021a40]
|
||
| 0x000041f5 mov rdi, rax
|
||
| 0x000041f8 call 0xc660
|
||
| 0x000041fe test eax, eax
|
||
,==< 0x00004200 js 0x4ae5
|
||
|| 0x00004206 cdqe
|
||
|| 0x00004208 lea rdx, qword [0x0001b980]
|
||
|| 0x0000420f xor edi, edi
|
||
|| 0x00004211 mov esi, dword [rdx+rax*4]
|
||
|| 0x00004214 call 0x13c50
|
||
|`-> 0x0000421a mov qword [0x000232b0], 0x50 ; 'P'
|
||
| ; [0x232b0:8]=0
|
||
| 0x00004225 lea rdi, qword str.COLUMNS ; 0x18a22 ; "COLUMNS"
|
||
|
||
0x000041ee lea rsi, qword [rip+0x1d84b] ; 0x21a40
|
||
0x00004225 lea rdi, qword [rip+0x147f6] ; str.COLUMNS
|
||
; 0x18a22 ; "COLUMNS"
|
||
|
||
[36m,[0m[36m=[0m[36m<[0m [32m0x000041e0[0m [32mjz[0m[37m [0m[33m0x421a[0m[0m[0m
|
||
[36m|[0m [32m0x000041e2[0m [37mmov[0m[37m [0m[36mecx[0m[37m, [0m[33m0x04[0m[0m[0m
|
||
[36m|[0m [32m0x000041e7[0m [37mlea[0m[37m [0m[36mrdx[0m[37m, [0m[37mqword[0m[37m [[0m[33m0x0001b980[0m[37m][0m[0m[0m
|
||
[36m|[0m [32m0x000041ee[0m [37mlea[0m[37m [0m[36mrsi[0m[37m, [0m[37mqword[0m[37m [[0m[33m0x00021a40[0m[37m][0m[0m[0m
|
||
[36m|[0m [32m0x000041f5[0m [37mmov[0m[37m [0m[36mrdi[0m[37m, [0m[36mrax[0m[0m[0m
|
||
[36m|[0m [32m0x000041f8[0m [1;92mcall[0m[37m [0m[33m0xc660[0m[0m[0m
|
||
[36m|[0m [32m0x000041fe[0m [36mtest[0m[37m [0m[36meax[0m[37m, [0m[36meax[0m[0m[0m
|
||
[36m,[0m[36m=[0m[36m=[0m[36m<[0m [32m0x00004200[0m [32mjs[0m[37m [0m[33m0x4ae5[0m[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x00004206[0m [37mcdqe[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x00004208[0m [37mlea[0m[37m [0m[36mrdx[0m[37m, [0m[37mqword[0m[37m [[0m[33m0x0001b980[0m[37m][0m[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x0000420f[0m [36mxor[0m[37m [0m[36medi[0m[37m, [0m[36medi[0m[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x00004211[0m [37mmov[0m[37m [0m[36mesi[0m[37m, [0m[37mdword[0m[37m [[0m[36mrdx[0m[37m+[0m[36mrax[0m[37m*[0m[33m4[0m[37m][0m[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x00004214[0m [1;92mcall[0m[37m [0m[33m0x13c50[0m[0m[0m
|
||
[36m|[0m[36m`[0m[36m-[0m[36m>[0m [32m0x0000421a[0m [37mmov[0m[37m [0m[37mqword[0m[37m [[0m[33m0x000232b0[0m[37m], [0m[33m0x50[0m[0m[31m ; 'P'
|
||
[36m|[0m [31m ; [0x232b0:8]=0[0m
|
||
[36m|[0m [32m0x00004225[0m [37mlea[0m[37m [0m[36mrdi[0m[37m, [0m[37mqword[0m[37m [33mstr.COLUMNS[0m[0m[0m[31m ; 0x18a22[31m ; "COLUMNS"[0m
|
||
|
||
[32m0x000041ee[0m [37mlea[0m[37m [0m[36mrsi[0m[37m, [0m[37mqword[0m[37m [[0m[36mrip[0m[37m+[0m[33m0x1d84b[0m[37m][0m[0m[31m ; 0x21a40[0m
|
||
[32m0x00004225[0m [37mlea[0m[37m [0m[36mrdi[0m[37m, [0m[37mqword[0m[37m [[0m[36mrip[0m[37m+[0m[33m0x147f6[0m[37m][0m[0m[31m ; str.COLUMNS
|
||
[31m ; 0x18a22[31m ; "COLUMNS"[0m
|
||
|
||
,=< 0x000041e0 jz 0x421a
|
||
| 0x000041e2 mov ecx, 0x04
|
||
| 0x000041e7 mov rax, qword [0x0001b980] ; [0x1b980:8]=0x100000000
|
||
| 0x000041ee mov rax, qword [0x00021a40] ; [0x21a40:8]=0x18d31 str.literal
|
||
| 0x000041f5 mov rdi, rax
|
||
| 0x000041f8 call 0xc660
|
||
| 0x000041fe test eax, eax
|
||
,==< 0x00004200 js 0x4ae5
|
||
|| 0x00004206 cdqe
|
||
|| 0x00004208 lea rdx, qword [0x0001b980]
|
||
|| 0x0000420f xor edi, edi
|
||
|| 0x00004211 mov esi, dword [rdx+rax*4]
|
||
|| 0x00004214 call 0x13c50
|
||
|`-> 0x0000421a mov qword [0x000232b0], 0x50 ; 'P'
|
||
| ; [0x232b0:8]=0
|
||
| 0x00004225 mov rax, qword [str.COLUMNS] ; [0x18a22:8]=0x534e4d554c4f43 ; "COLUMNS"
|
||
|
||
0x000041ee mov rax, qword [rip+0x1d84b] ; [0x21a40:8]=0x18d31 str.literal
|
||
0x00004225 mov rax, qword [rip+0x147f6] ; str.COLUMNS
|
||
; [0x18a22:8]=0x534e4d554c4f43 ; "COLUMNS"
|
||
|
||
[36m,[0m[36m=[0m[36m<[0m [32m0x000041e0[0m [32mjz[0m[37m [0m[33m0x421a[0m[0m[0m
|
||
[36m|[0m [32m0x000041e2[0m [37mmov[0m[37m [0m[36mecx[0m[37m, [0m[33m0x04[0m[0m[0m
|
||
[36m|[0m [32m0x000041e7[0m [37mmov[0m[37m [0m[36mrax[0m[37m, [0m[37mqword[0m[37m [[0m[33m0x0001b980[0m[37m][0m[0m[31m ; [[31m0x1b980[31m:8]=0x100000000[0m
|
||
[36m|[0m [32m0x000041ee[0m [37mmov[0m[37m [0m[36mrax[0m[37m, [0m[37mqword[0m[37m [[0m[33m0x00021a40[0m[37m][0m[0m[31m ; [[31m0x21a40[31m:8]=0x18d31 str.literal[0m
|
||
[36m|[0m [32m0x000041f5[0m [37mmov[0m[37m [0m[36mrdi[0m[37m, [0m[36mrax[0m[0m[0m
|
||
[36m|[0m [32m0x000041f8[0m [1;92mcall[0m[37m [0m[33m0xc660[0m[0m[0m
|
||
[36m|[0m [32m0x000041fe[0m [36mtest[0m[37m [0m[36meax[0m[37m, [0m[36meax[0m[0m[0m
|
||
[36m,[0m[36m=[0m[36m=[0m[36m<[0m [32m0x00004200[0m [32mjs[0m[37m [0m[33m0x4ae5[0m[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x00004206[0m [37mcdqe[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x00004208[0m [37mlea[0m[37m [0m[36mrdx[0m[37m, [0m[37mqword[0m[37m [[0m[33m0x0001b980[0m[37m][0m[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x0000420f[0m [36mxor[0m[37m [0m[36medi[0m[37m, [0m[36medi[0m[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x00004211[0m [37mmov[0m[37m [0m[36mesi[0m[37m, [0m[37mdword[0m[37m [[0m[36mrdx[0m[37m+[0m[36mrax[0m[37m*[0m[33m4[0m[37m][0m[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x00004214[0m [1;92mcall[0m[37m [0m[33m0x13c50[0m[0m[0m
|
||
[36m|[0m[36m`[0m[36m-[0m[36m>[0m [32m0x0000421a[0m [37mmov[0m[37m [0m[37mqword[0m[37m [[0m[33m0x000232b0[0m[37m], [0m[33m0x50[0m[0m[31m ; 'P'
|
||
[36m|[0m [31m ; [0x232b0:8]=0[0m
|
||
[36m|[0m [32m0x00004225[0m [37mmov[0m[37m [0m[36mrax[0m[37m, [0m[37mqword[0m[37m [[0m[33mstr.COLUMNS[0m[37m][0m[0m[31m ; [[31m0x18a22[31m:8]=0x534e4d554c4f43[31m ; "COLUMNS"[0m
|
||
|
||
[32m0x000041ee[0m [37mmov[0m[37m [0m[36mrax[0m[37m, [0m[37mqword[0m[37m [[0m[36mrip[0m[37m+[0m[33m0x1d84b[0m[37m][0m[0m[31m ; [[31m0x21a40[31m:8]=0x18d31 str.literal[0m
|
||
[32m0x00004225[0m [37mmov[0m[37m [0m[36mrax[0m[37m, [0m[37mqword[0m[37m [[0m[36mrip[0m[37m+[0m[33m0x147f6[0m[37m][0m[0m[31m ; str.COLUMNS
|
||
[31m ; [[31m0x18a22[31m:8]=0x534e4d554c4f43[31m ; "COLUMNS"[0m
|
||
|
||
,=< 0x000041e0 jz 0x421a
|
||
| 0x000041e2 mov ecx, 0x04
|
||
| 0x000041e7 cmp rdx, qword [0x0001b980] ; [0x1b980:8]=0x100000000
|
||
| 0x000041ee cmp rsi, qword [0x00021a40] ; [0x21a40:8]=0x18d31 str.literal
|
||
| 0x000041f5 mov rdi, rax
|
||
| 0x000041f8 call 0xc660
|
||
| 0x000041fe test eax, eax
|
||
,==< 0x00004200 js 0x4ae5
|
||
|| 0x00004206 cdqe
|
||
|| 0x00004208 lea rdx, qword [0x0001b980]
|
||
|| 0x0000420f xor edi, edi
|
||
|| 0x00004211 mov esi, dword [rdx+rax*4]
|
||
|| 0x00004214 call 0x13c50
|
||
|`-> 0x0000421a mov qword [0x000232b0], 0x50 ; 'P'
|
||
| ; [0x232b0:8]=0
|
||
| 0x00004225 cmp rdi, qword [str.COLUMNS] ; [0x18a22:8]=0x534e4d554c4f43 ; "COLUMNS"
|
||
|
||
0x000041ee cmp rsi, qword [rip+0x1d84b] ; [0x21a40:8]=0x18d31 str.literal
|
||
0x00004225 cmp rdi, qword [rip+0x147f6] ; str.COLUMNS
|
||
; [0x18a22:8]=0x534e4d554c4f43 ; "COLUMNS"
|
||
|
||
[36m,[0m[36m=[0m[36m<[0m [32m0x000041e0[0m [32mjz[0m[37m [0m[33m0x421a[0m[0m[0m
|
||
[36m|[0m [32m0x000041e2[0m [37mmov[0m[37m [0m[36mecx[0m[37m, [0m[33m0x04[0m[0m[0m
|
||
[36m|[0m [32m0x000041e7[0m [36mcmp[0m[37m [0m[36mrdx[0m[37m, [0m[37mqword[0m[37m [[0m[33m0x0001b980[0m[37m][0m[0m[31m ; [[31m0x1b980[31m:8]=0x100000000[0m
|
||
[36m|[0m [32m0x000041ee[0m [36mcmp[0m[37m [0m[36mrsi[0m[37m, [0m[37mqword[0m[37m [[0m[33m0x00021a40[0m[37m][0m[0m[31m ; [[31m0x21a40[31m:8]=0x18d31 str.literal[0m
|
||
[36m|[0m [32m0x000041f5[0m [37mmov[0m[37m [0m[36mrdi[0m[37m, [0m[36mrax[0m[0m[0m
|
||
[36m|[0m [32m0x000041f8[0m [1;92mcall[0m[37m [0m[33m0xc660[0m[0m[0m
|
||
[36m|[0m [32m0x000041fe[0m [36mtest[0m[37m [0m[36meax[0m[37m, [0m[36meax[0m[0m[0m
|
||
[36m,[0m[36m=[0m[36m=[0m[36m<[0m [32m0x00004200[0m [32mjs[0m[37m [0m[33m0x4ae5[0m[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x00004206[0m [37mcdqe[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x00004208[0m [37mlea[0m[37m [0m[36mrdx[0m[37m, [0m[37mqword[0m[37m [[0m[33m0x0001b980[0m[37m][0m[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x0000420f[0m [36mxor[0m[37m [0m[36medi[0m[37m, [0m[36medi[0m[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x00004211[0m [37mmov[0m[37m [0m[36mesi[0m[37m, [0m[37mdword[0m[37m [[0m[36mrdx[0m[37m+[0m[36mrax[0m[37m*[0m[33m4[0m[37m][0m[0m[0m
|
||
[36m|[0m[36m|[0m [32m0x00004214[0m [1;92mcall[0m[37m [0m[33m0x13c50[0m[0m[0m
|
||
[36m|[0m[36m`[0m[36m-[0m[36m>[0m [32m0x0000421a[0m [37mmov[0m[37m [0m[37mqword[0m[37m [[0m[33m0x000232b0[0m[37m], [0m[33m0x50[0m[0m[31m ; 'P'
|
||
[36m|[0m [31m ; [0x232b0:8]=0[0m
|
||
[36m|[0m [32m0x00004225[0m [36mcmp[0m[37m [0m[36mrdi[0m[37m, [0m[37mqword[0m[37m [[0m[33mstr.COLUMNS[0m[37m][0m[0m[31m ; [[31m0x18a22[31m:8]=0x534e4d554c4f43[31m ; "COLUMNS"[0m
|
||
|
||
[32m0x000041ee[0m [36mcmp[0m[37m [0m[36mrsi[0m[37m, [0m[37mqword[0m[37m [[0m[36mrip[0m[37m+[0m[33m0x1d84b[0m[37m][0m[0m[31m ; [[31m0x21a40[31m:8]=0x18d31 str.literal[0m
|
||
[32m0x00004225[0m [36mcmp[0m[37m [0m[36mrdi[0m[37m, [0m[37mqword[0m[37m [[0m[36mrip[0m[37m+[0m[33m0x147f6[0m[37m][0m[0m[31m ; str.COLUMNS
|
||
[31m ; [[31m0x18a22[31m:8]=0x534e4d554c4f43[31m ; "COLUMNS"[0m
|
||
EOF
|
||
RUN
|
||
|
||
NAME=lea section flag bracket fix
|
||
FILE=bins/elf/analysis/ls-alxchk
|
||
CMDS=<<EOF
|
||
e asm.bytes=true
|
||
s 0x5e6e
|
||
e scr.color=0
|
||
pd 1
|
||
e scr.color=1
|
||
pd 1
|
||
EOF
|
||
EXPECT=<<EOF
|
||
0x00005e6e 488d3d339b01. lea rdi, qword section..fini_array ; 0x1f9a8
|
||
[32m0x00005e6e[0m [33m48[37m8d[33m3d[33m33[37m9b[37m01[37m.[0m [37mlea[0m[37m [0m[36mrdi[0m[37m, [0m[37mqword[0m[37m [33msection..fini_array[0m[0m[0m[31m ; 0x1f9a8[0m
|
||
EOF
|
||
RUN
|
||
|
||
NAME=pi no-color rip-relative addr fix
|
||
FILE=bins/elf/ls
|
||
CMDS=<<EOF
|
||
e scr.color=0
|
||
s 0x000041e0
|
||
pi 15
|
||
EOF
|
||
EXPECT=<<EOF
|
||
jz 0x421a
|
||
mov ecx, 0x04
|
||
lea rdx, qword [0x0001b980]
|
||
lea rsi, qword [0x00021a40]
|
||
mov rdi, rax
|
||
call 0xc660
|
||
test eax, eax
|
||
js 0x4ae5
|
||
cdqe
|
||
lea rdx, qword [0x0001b980]
|
||
xor edi, edi
|
||
mov esi, dword [rdx+rax*4]
|
||
call 0x13c50
|
||
mov qword [0x000232b0], 0x50
|
||
lea rdi, qword str.COLUMNS
|
||
EOF
|
||
RUN
|
||
|
||
NAME=esil call no-fcn-name cmt alignment
|
||
FILE=bins/elf/analysis/arm-ls
|
||
CMDS=<<EOF
|
||
e asm.bytes=false
|
||
e emu.pre=true
|
||
e emu.str=true
|
||
pd 1 @ 0x00011ee4
|
||
EOF
|
||
EXPECT=<<EOF
|
||
0x00011ee4 bl 0x2258c ; 0x2258c(0x19ac0, 0x25c0c, 0x0, 0x372cc)
|
||
EOF
|
||
RUN
|
||
|
||
NAME=str.encoding no-guess with initial null
|
||
FILE=bins/elf/utfbe&bom
|
||
CMDS=<<EOF
|
||
e asm.bytes=false
|
||
e asm.offset=false
|
||
e asm.cmt.off=false
|
||
aar
|
||
(pdenc enc; e str.encoding=${enc}; pd 1)
|
||
(pdstr bits; s `axt @ obj.utf${bits}be~[1]`; .(pdenc guess); .(pdenc utf${bits}le); .(pdenc utf${bits}be))
|
||
.(pdstr 16)
|
||
echo
|
||
.(pdstr 32)
|
||
EOF
|
||
EXPECT=<<EOF
|
||
mov esi, obj.utf16be
|
||
mov esi, obj.utf16be ; u"唀吀䘀\x00\x31㘀䈀䔀"
|
||
mov esi, obj.utf16be ; ub"UTF16BE"
|
||
|
||
mov esi, obj.utf32be
|
||
mov esi, obj.utf32be ; U"\x00\x00\x00\x55\x00\x00\x00\x54\x00\x00\x00\x46\x00\x00\x00\x33\x00\x00\x00\x32\x00\x00\x00\x42\x00\x00\x00\x45"
|
||
mov esi, obj.utf32be ; Ub"UTF32BE"
|
||
EOF
|
||
RUN
|
||
|
||
NAME=str.encoding guess bom, asm.cmt.off=0/1
|
||
FILE=bins/elf/utfbe&bom
|
||
CMDS=<<EOF
|
||
e asm.bytes=0
|
||
e asm.offset=0
|
||
e asm.cmt.off=0
|
||
e str.encoding=guess
|
||
aar
|
||
(pdstr flag; s `axt @ obj.${flag}~[1]`; pd 1)
|
||
.(pdstr utf8_bom)
|
||
.(pdstr utf16le_bom)
|
||
.(pdstr utf16be_bom)
|
||
.(pdstr utf32le_bom)
|
||
.(pdstr utf32be_bom)
|
||
echo
|
||
e asm.cmt.off=1
|
||
.(pdstr utf32be_bom)
|
||
e asm.cmt.off=off
|
||
.(pdstr utf32be_bom)
|
||
EOF
|
||
EXPECT=<<EOF
|
||
mov esi, obj.utf8_bom ; "\U0000feffUTF8_BOM"
|
||
mov esi, obj.utf16le_bom ; u"\U0000feffUTF16LE_BOM"
|
||
mov esi, obj.utf16be_bom ; ub"\U0000feffUTF16BE_BOM"
|
||
mov esi, obj.utf32le_bom ; U"\U0000feffUTF32LE_BOM"
|
||
mov esi, obj.utf32be_bom ; Ub"\U0000feffUTF32BE_BOM"
|
||
|
||
mov esi, obj.utf32be_bom ; 0x4041e0 ; Ub"\U0000feffUTF32BE_BOM"
|
||
mov esi, obj.utf32be_bom ; Ub"\U0000feffUTF32BE_BOM"
|
||
EOF
|
||
RUN
|
||
|
||
NAME=no-analysis asm.symbol from fcn mid
|
||
FILE=bins/elf/analysis/tiny1
|
||
CMDS=<<EOF
|
||
e asm.symbol=true
|
||
e asm.bytes=false
|
||
e asm.offset=false
|
||
e asm.comments=false
|
||
s entry0 + 2
|
||
pd 2
|
||
echo
|
||
s segment.LOAD0 + 83
|
||
pd 4
|
||
echo
|
||
s entry0
|
||
pd 3
|
||
EOF
|
||
EXPECT=<<EOF
|
||
entry0 + 2 xor eax, eax
|
||
entry0 + 4 inc eax
|
||
|
||
segment.LOAD0 + 83 ~ add byte [ebx+0x40c0312a], dh
|
||
entry0 + 0 ;-- entry0:
|
||
entry0 + 0 mov bl, 0x2a
|
||
entry0 + 2 xor eax, eax
|
||
entry0 + 4 inc eax
|
||
|
||
entry0 + 0 ;-- entry0:
|
||
entry0 + 0 mov bl, 0x2a
|
||
entry0 + 2 xor eax, eax
|
||
entry0 + 4 inc eax
|
||
EOF
|
||
RUN
|
||
|
||
NAME=seek with spaces
|
||
FILE==
|
||
CMDS=<<EOF
|
||
wx 010203040506
|
||
p8 1 @ 1 + 3
|
||
EOF
|
||
EXPECT=<<EOF
|
||
05
|
||
EOF
|
||
RUN
|
||
|
||
NAME=pdf entry0 pe
|
||
FILE=bins/pe/ConsoleApplication1.exe
|
||
ARGS=-A
|
||
CMDS=pdf
|
||
EXPECT=<<EOF
|
||
/ entry0();
|
||
| : ; var int32_t var_24h @ stack - 0x24
|
||
| : ; var int32_t var_19h @ stack - 0x19
|
||
| : ; var int32_t var_4h @ stack - 0x4
|
||
| : 0x0040149e call fcn.00401836
|
||
| `=< 0x004014a3 jmp 0x401322
|
||
EOF
|
||
RUN
|
||
|
||
NAME=pdf '..' fix (#2288)
|
||
FILE=bins/elf/infinite-loop.bf
|
||
CMDS=<<EOF
|
||
e asm.bytes=1
|
||
s main
|
||
aF
|
||
pdf
|
||
EOF
|
||
EXPECT=<<EOF
|
||
;-- section..text:
|
||
;-- .text:
|
||
/ int main(int argc, char **argv, char **envp);
|
||
| 0x00001040 f30f1efa endbr64 ; [13] -r-x section size 389 named .text
|
||
| 0x00001044 8005f52f0000. add byte [obj.array], 0x01 ; [0x4040:1]=0
|
||
| ,=< 0x0000104b 7403 jz 0x1050
|
||
| @=-> 0x0000104d ebfe jmp 0x104d
|
||
..
|
||
| `-> 0x00001050 31c0 xor eax, eax
|
||
\ 0x00001052 c3 ret
|
||
EOF
|
||
RUN
|
||
|
||
NAME=utf8 self-loop
|
||
FILE=bins/elf/infinite-loop.bf
|
||
CMDS=<<EOF
|
||
e scr.utf8=1
|
||
e scr.utf8.curvy=0
|
||
s main
|
||
aF
|
||
pd 4 @ 0x104b
|
||
echo
|
||
e scr.utf8.curvy=1
|
||
pd 4 @ 0x104b
|
||
EOF
|
||
EXPECT=<<EOF
|
||
│ ┌─< 0x0000104b jz 0x1050
|
||
│ @──> 0x0000104d jmp 0x104d
|
||
│ 0x0000104f nop
|
||
│ └─> 0x00001050 xor eax, eax
|
||
|
||
│ ╭─< 0x0000104b jz 0x1050
|
||
│ @──> 0x0000104d jmp 0x104d
|
||
│ 0x0000104f nop
|
||
│ ╰─> 0x00001050 xor eax, eax
|
||
EOF
|
||
RUN
|
||
|
||
NAME=floating point asm.sub.names
|
||
FILE=bins/wasm/float-constant.wasm
|
||
CMDS=<<EOF
|
||
aF
|
||
pdf
|
||
EOF
|
||
EXPECT=<<EOF
|
||
;-- fcn.0:
|
||
/ entry0();
|
||
| 0x00000019 get_local 0
|
||
| 0x0000001b f64.const 3.141590
|
||
| 0x00000024 f64.add
|
||
\ 0x00000025 end
|
||
EOF
|
||
RUN
|