Coredump initialization
In the previous chapter, we have seen how to model a function in the BINSEC intermediate language.
In the level1 challenge,
we had to model the two functions __isoc99_scanf and printf.
A function stub must be provided when at least one of the following conditions is met:
- it produces new symbolic values (e.g.
__isoc99_scanf); - it interacts with the environment (e.g.
printf); - its body is absent from the target binary (e.g. both
__isoc99_scanfandprintf).
Still, what happens when there are more than two functions to modelize?
Providing a stub for each dynamically linked function can quickly become tricky and cumbersome.
The good news is there is a way to partly automatize everything related to dynamic linking. The tip is to start the analysis from a snapshot of the process after that the dynamic linker served its purpose.
We will illustrate the process with the challenge named crackme which comes from the site crackmes.one.
What is inside?
This challenge consist of an ELF x86-64 executable that dynamically links with libraries.
Hexdump
As before, we put here the summary of basic information that can be extracted via BINSEC.
| Legend |
|---|
| Headers Magic |
| Code Instructions |
| Read-Only Data Strings |
| Data Other Sections |
- Headers
- Disassembly
ELF Header:
Class: ELF64
Data: 2's complement, little endian
Type: DYN
OS/ABI: Linux - GNU
Kernel Version: 3.2.0
Machine: x86-64
Entry point address: 0x0010e0
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf
Al
[ 0] NULL 0000000000000000 000000 000000 00 0 0
0
[ 1] .interp PROGBITS 0000000000000318 000318 00001c 00 A 0 0
1
[ 2] .note.gnu.p... NOTE 0000000000000338 000338 000020 00 A 0 0
8
[ 3] .note.gnu.b... NOTE 0000000000000358 000358 000024 00 A 0 0
4
[ 4] .note.ABI-tag NOTE 000000000000037c 00037c 000020 00 A 0 0
4
[ 5] .gnu.hash GNU_HASH 00000000000003a0 0003a0 000028 00 A 6 0
8
[ 6] .dynsym DYNSYM 00000000000003c8 0003c8 000120 18 A 7 1
8
[ 7] .dynstr STRTAB 00000000000004e8 0004e8 0000b8 00 A 0 0
1
[ 8] .gnu.version VERSYM 00000000000005a0 0005a0 000018 02 A 6 0
2
[ 9] .gnu.version_r VERNEED 00000000000005b8 0005b8 000030 00 A 7 1
8
[10] .rela.dyn RELA 00000000000005e8 0005e8 0000f0 18 A 6 0
8
[11] .rela.plt RELA 00000000000006d8 0006d8 000078 18 AI 6 24
8
[12] .init PROGBITS 0000000000001000 001000 00001b 00 AX 0 0
4
[13] .plt PROGBITS 0000000000001020 001020 000060 10 AX 0 0
16
[14] .plt.got PROGBITS 0000000000001080 001080 000010 10 AX 0 0
16
[15] .plt.sec PROGBITS 0000000000001090 001090 000050 10 AX 0 0
16
[16] .text PROGBITS 00000000000010e0 0010e0 000385 00 AX 0 0
16
[17] .fini PROGBITS 0000000000001468 001468 00000d 00 AX 0 0
4
[18] .rodata PROGBITS 0000000000002000 002000 00002f 00 A 0 0
4
[19] .eh_frame_hdr PROGBITS 0000000000002030 002030 000044 00 A 0 0
4
[20] .eh_frame PROGBITS 0000000000002078 002078 000110 00 A 0 0
8
[21] .init_array INIT_ARRAY 0000000000003d98 002d98 000008 08 WA 0 0
8
[22] .fini_array FINI_ARRAY 0000000000003da0 002da0 000008 08 WA 0 0
8
[23] .dynamic DYNAMIC 0000000000003da8 002da8 0001f0 10 WA 7 0
8
[24] .got PROGBITS 0000000000003f98 002f98 000068 08 WA 0 0
8
[25] .data PROGBITS 0000000000004000 003000 000018 00 WA 0 0
8
[26] .bss NOBITS 0000000000004020 003018 000010 00 WA 0 0
16
[27] .comment PROGBITS 0000000000000000 003018 00002a 01 MS 0 0
1
[28] .symtab SYMTAB 0000000000000000 003048 0006a8 18 29 46
8
[29] .strtab STRTAB 0000000000000000 0036f0 000273 00 0 0
1
[30] .shstrtab STRTAB 0000000000000000 003963 00011a 00 0 0
1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
L (link order), G (group), T (TLS), O (extra OS processing required)
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz
MemSiz Flg Align
PHDR 0x000040 0x0000000000000040 0x0000000000000040 0x0002d8
0x0002d8 R 0x8
INTERP 0x000318 0x0000000000000318 0x0000000000000318 0x00001c
0x00001c R 0x1
LOAD 00000000 0x0000000000000000 0x0000000000000000 0x000750
0x000750 R 0x1000
LOAD 0x001000 0x0000000000001000 0x0000000000001000 0x000475
0x000475 R E 0x1000
LOAD 0x002000 0x0000000000002000 0x0000000000002000 0x000188
0x000188 R 0x1000
LOAD 0x002d98 0x0000000000003d98 0x0000000000003d98 0x000280
0x000298 RW 0x1000
DYNAMIC 0x002da8 0x0000000000003da8 0x0000000000003da8 0x0001f0
0x0001f0 RW 0x8
NOTE 0x000338 0x0000000000000338 0x0000000000000338 0x000020
0x000020 R 0x8
NOTE 0x000358 0x0000000000000358 0x0000000000000358 0x000044
0x000044 R 0x4
GNU_PROPERTY 0x000338 0x0000000000000338 0x0000000000000338 0x000020
0x000020 R 0x8
GNU_EH_FRAME 0x002030 0x0000000000002030 0x0000000000002030 0x000044
0x000044 R 0x4
GNU_STACK 00000000 0x0000000000000000 0x0000000000000000 00000000
00000000 RW 0x10
GNU_RELRO 0x002d98 0x0000000000003d98 0x0000000000003d98 0x000268
0x000268 R 0x1
Symbol table '.dynsym' contains 12 entries:
Num: Value Size Type Bind Section Name
0: 0000000000000000 0 NOTYPE LOCAL UND
1: 0000000000000000 0 FUNC GLOBAL UND strncpy
2: 0000000000000000 0 NOTYPE WEAK UND _ITM_deregiste...
3: 0000000000000000 0 FUNC GLOBAL UND puts
4: 0000000000000000 0 FUNC GLOBAL UND __stack_chk_fail
5: 0000000000000000 0 FUNC GLOBAL UND __libc_start_main
6: 0000000000000000 0 FUNC GLOBAL UND fgets
7: 0000000000000000 0 FUNC GLOBAL UND strcmp
8: 0000000000000000 0 NOTYPE WEAK UND __gmon_start__
9: 0000000000000000 0 NOTYPE WEAK UND _ITM_registerT...
10: 0000000000000000 0 FUNC WEAK UND __cxa_finalize
11: 0000000000004020 8 OBJECT GLOBAL .bss stdin
Symbol table '.symtab' contains 71 entries:
Num: Value Size Type Bind Section
Name
0: 0000000000000000 0 NOTYPE LOCAL UND
1: 0000000000000318 0 SECTION LOCAL .interp
2: 0000000000000338 0 SECTION LOCAL .note.gnu.p...
3: 0000000000000358 0 SECTION LOCAL .note.gnu.b...
4: 000000000000037c 0 SECTION LOCAL .note.ABI-tag
5: 00000000000003a0 0 SECTION LOCAL .gnu.hash
6: 00000000000003c8 0 SECTION LOCAL .dynsym
7: 00000000000004e8 0 SECTION LOCAL .dynstr
8: 00000000000005a0 0 SECTION LOCAL .gnu.version
9: 00000000000005b8 0 SECTION LOCAL .gnu.version_r
10: 00000000000005e8 0 SECTION LOCAL .rela.dyn
11: 00000000000006d8 0 SECTION LOCAL .rela.plt
12: 0000000000001000 0 SECTION LOCAL .init
13: 0000000000001020 0 SECTION LOCAL .plt
14: 0000000000001080 0 SECTION LOCAL .plt.got
15: 0000000000001090 0 SECTION LOCAL .plt.sec
16: 00000000000010e0 0 SECTION LOCAL .text
17: 0000000000001468 0 SECTION LOCAL .fini
18: 0000000000002000 0 SECTION LOCAL .rodata
19: 0000000000002030 0 SECTION LOCAL .eh_frame_hdr
20: 0000000000002078 0 SECTION LOCAL .eh_frame
21: 0000000000003d98 0 SECTION LOCAL .init_array
22: 0000000000003da0 0 SECTION LOCAL .fini_array
23: 0000000000003da8 0 SECTION LOCAL .dynamic
24: 0000000000003f98 0 SECTION LOCAL .got
25: 0000000000004000 0 SECTION LOCAL .data
26: 0000000000004020 0 SECTION LOCAL .bss
27: 0000000000000000 0 SECTION LOCAL .comment
28: 0000000000000000 0 FILE LOCAL ABS
crtstuff.c
29: 0000000000001110 0 FUNC LOCAL .text
deregister_tm_clones
30: 0000000000001140 0 FUNC LOCAL .text
register_tm_clones
31: 0000000000001180 0 FUNC LOCAL .text
__do_global_dtors...
32: 0000000000004028 1 OBJECT LOCAL .bss
completed.8060
33: 0000000000003da0 0 OBJECT LOCAL .fini_array
__do_global_dtors...
34: 00000000000011c0 0 FUNC LOCAL .text
frame_dummy
35: 0000000000003d98 0 OBJECT LOCAL .init_array
__frame_dummy_ini...
36: 0000000000000000 0 FILE LOCAL ABS
main1.c
37: 0000000000000000 0 FILE LOCAL ABS
crtstuff.c
38: 0000000000002184 0 OBJECT LOCAL .eh_frame
__FRAME_END__
39: 0000000000000000 0 FILE LOCAL ABS
40: 0000000000003da0 0 NOTYPE LOCAL .init_array
__init_array_end
41: 0000000000003da8 0 OBJECT LOCAL .dynamic
_DYNAMIC
42: 0000000000003d98 0 NOTYPE LOCAL .init_array
__init_array_start
43: 0000000000002030 0 NOTYPE LOCAL .eh_frame_hdr
__GNU_EH_FRAME_HDR
44: 0000000000003f98 0 OBJECT LOCAL .got
_GLOBAL_OFFSET_TA...
45: 0000000000001000 0 FUNC LOCAL .init
_init
46: 0000000000001460 5 FUNC GLOBAL .text
__libc_csu_fini
47: 0000000000000000 0 FUNC GLOBAL UND
strncpy@@GLIBC_2.2.5
48: 0000000000000000 0 NOTYPE WEAK UND
_ITM_deregisterTM...
49: 0000000000004000 0 NOTYPE WEAK .data
data_start
50: 0000000000000000 0 FUNC GLOBAL UND
puts@@GLIBC_2.2.5
51: 0000000000004020 8 OBJECT GLOBAL .bss
stdin@@GLIBC_2.2.5
52: 0000000000004018 0 NOTYPE GLOBAL .data
_edata
53: 0000000000004010 8 OBJECT GLOBAL .data
pass
54: 0000000000001468 0 FUNC GLOBAL .fini
_fini
55: 0000000000000000 0 FUNC GLOBAL UND
__stack_chk_fail@...
56: 0000000000000000 0 FUNC GLOBAL UND
__libc_start_main...
57: 0000000000000000 0 FUNC GLOBAL UND
fgets@@GLIBC_2.2.5
58: 0000000000004000 0 NOTYPE GLOBAL .data
__data_start
59: 0000000000000000 0 FUNC GLOBAL UND
strcmp@@GLIBC_2.2.5
60: 0000000000000000 0 NOTYPE WEAK UND
__gmon_start__
61: 0000000000004008 0 OBJECT GLOBAL .data
__dso_handle
62: 0000000000002000 4 OBJECT GLOBAL .rodata
_IO_stdin_used
63: 00000000000013f0 101 FUNC GLOBAL .text
__libc_csu_init
64: 0000000000004030 0 NOTYPE GLOBAL .bss
_end
65: 00000000000010e0 47 FUNC GLOBAL .text
_start
66: 0000000000004018 0 NOTYPE GLOBAL .bss
__bss_start
67: 00000000000011c9 537 FUNC GLOBAL .text
main
68: 0000000000004018 0 OBJECT GLOBAL .data
__TMC_END__
69: 0000000000000000 0 NOTYPE WEAK UND
_ITM_registerTMCl...
70: 0000000000000000 0 FUNC WEAK UND
__cxa_finalize@@G...
Disassembly of section .init:
00001000 <_init>: 001000: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x001004, 0)001004: 48 83 ec 08 sub $0x8,%rsp
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rsp<64>) & %%0<64>)));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rsp<64> & ! (%%0<64>))));7: rsp<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x001008, 0)001008: 48 8b 05 d9 2f 00 00 mov 0x2fd9(%rip),%rax
0: %%0<64> := @[0x0000000000003fe8,<-,8];1: rax<64> := %%0<64>;2: goto (0x00100f, 0)00100f: 48 85 c0 test %rax,%rax
0: %%0<1> :=
!
((((rax<64>{0} ^ rax<64>{4}) ^ (rax<64>{2} ^ rax<64>{6})) ^
((rax<64>{1} ^ rax<64>{5}) ^ (rax<64>{3} ^ rax<64>{7}))));1: %%1<1> := undef;2: %%2<1> := (0<64> = rax<64>);3: %%3<1> := (rax<64> <s 0<64>);4: of<1> := 0<1>;5: sf<1> := %%3<1>;6: zf<1> := %%2<1>;7: af<1> := %%1<1>;8: pf<1> := %%0<1>;9: cf<1> := 0<1>;10: goto (0x001012, 0)001012: 74 02 je 0x1016
0: if zf<1> goto 2 else goto 11: goto (0x001014, 0)2: goto (0x001016, 0)001014: ff d0 call *%rax
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := rax<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := 0x0000000000001016;4: goto %%1<64> #call with return address @ (0x001016, 0)001016: 48 83 c4 08 add $0x8,%rsp
0: %%0<64> := (rsp<64> + 8<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rsp<64> & ! (%%0<64>))));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rsp<64>) & %%0<64>)));7: rsp<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x00101a, 0)00101a: c3 ret
0: %%0<64> := @[rsp<64>,<-,8];1: %%1<64> := (rsp<64> + 8<64>);2: rsp<64> := %%1<64>;3: goto %%0<64> #returnDisassembly of section .plt:
001020: ff 35 7a 2f 00 00 pushq 0x2f7a(%rip)
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := @[0x0000000000003fa0,<-,8];2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x001026, 0)001026: f2 ff 25 7b 2f 00 00 jmp *0x2f7b(%rip)
0: %%0<64> := @[0x0000000000003fa8,<-,8];1: goto %%0<64>00102d: 0f 1f 00 nop
0: goto (0x001030, 0)001030: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x001034, 0)001034: 68 00 00 00 00 pushq $0x0
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 0<64>;3: goto (0x001039, 0)001039: f2 e9 e1 ff ff ff jmp 0x1020
0: goto (0x001020, 0)00103f: 90 nop
0: goto (0x001040, 0)001040: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x001044, 0)001044: 68 01 00 00 00 pushq $0x1
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 1<64>;3: goto (0x001049, 0)001049: f2 e9 d1 ff ff ff jmp 0x1020
0: goto (0x001020, 0)00104f: 90 nop
0: goto (0x001050, 0)001050: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x001054, 0)001054: 68 02 00 00 00 pushq $0x2
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 2<64>;3: goto (0x001059, 0)001059: f2 e9 c1 ff ff ff jmp 0x1020
0: goto (0x001020, 0)00105f: 90 nop
0: goto (0x001060, 0)001060: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x001064, 0)001064: 68 03 00 00 00 pushq $0x3
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 3<64>;3: goto (0x001069, 0)001069: f2 e9 b1 ff ff ff jmp 0x1020
0: goto (0x001020, 0)00106f: 90 nop
0: goto (0x001070, 0)001070: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x001074, 0)001074: 68 04 00 00 00 pushq $0x4
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 4<64>;3: goto (0x001079, 0)001079: f2 e9 a1 ff ff ff jmp 0x1020
0: goto (0x001020, 0)00107f: 90 nop
0: goto (0x001080, 0)Disassembly of section .plt.got:
001080: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x001084, 0)001084: f2 ff 25 6d 2f 00 00 jmp *0x2f6d(%rip)
0: %%0<64> := @[0x0000000000003ff8,<-,8];1: goto %%0<64>00108b: 0f 1f 44 00 00 nop
0: goto (0x001090, 0)Disassembly of section .plt.sec:
00001090 <strncpy@plt>: 001090: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x001094, 0)001094: f2 ff 25 15 2f 00 00 jmp *0x2f15(%rip)
0: %%0<64> := @[0x0000000000003fb0,<-,8];1: goto %%0<64>00109b: 0f 1f 44 00 00 nop
0: goto (0x0010a0, 0)000010a0 <puts@plt>: 0010a0: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x0010a4, 0)0010a4: f2 ff 25 0d 2f 00 00 jmp *0x2f0d(%rip)
0: %%0<64> := @[0x0000000000003fb8,<-,8];1: goto %%0<64>0010ab: 0f 1f 44 00 00 nop
0: goto (0x0010b0, 0)000010b0 <__stack_chk_fail@plt>: 0010b0: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x0010b4, 0)0010b4: f2 ff 25 05 2f 00 00 jmp *0x2f05(%rip)
0: %%0<64> := @[0x0000000000003fc0,<-,8];1: goto %%0<64>0010bb: 0f 1f 44 00 00 nop
0: goto (0x0010c0, 0)000010c0 <fgets@plt>: 0010c0: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x0010c4, 0)0010c4: f2 ff 25 fd 2e 00 00 jmp *0x2efd(%rip)
0: %%0<64> := @[0x0000000000003fc8,<-,8];1: goto %%0<64>0010cb: 0f 1f 44 00 00 nop
0: goto (0x0010d0, 0)000010d0 <strcmp@plt>: 0010d0: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x0010d4, 0)0010d4: f2 ff 25 f5 2e 00 00 jmp *0x2ef5(%rip)
0: %%0<64> := @[0x0000000000003fd0,<-,8];1: goto %%0<64>0010db: 0f 1f 44 00 00 nop
0: goto (0x0010e0, 0)Disassembly of section .text:
000010e0 <_start>: 0010e0: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x0010e4, 0)0010e4: 31 ed xor %ebp,%ebp
0: %%0<1> := undef;1: rbp<64> := 0<64>;2: of<1> := 0<1>;3: sf<1> := 0<1>;4: zf<1> := -1<1>;5: af<1> := %%0<1>;6: pf<1> := -1<1>;7: cf<1> := 0<1>;8: goto (0x0010e6, 0)0010e6: 49 89 d1 mov %rdx,%r9
0: %%0<64> := rdx<64>;1: r9<64> := %%0<64>;2: goto (0x0010e9, 0)0010e9: 5e pop %rsi
0: %%0<64> := (rsp<64> + 8<64>);1: %%1<64> := @[rsp<64>,<-,8];2: rsi<64> := %%1<64>;3: rsp<64> := %%0<64>;4: goto (0x0010ea, 0)0010ea: 48 89 e2 mov %rsp,%rdx
0: %%0<64> := rsp<64>;1: rdx<64> := %%0<64>;2: goto (0x0010ed, 0)0010ed: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp
0: %%0<64> := (-16<64> & rsp<64>);1: %%1<1> := ! (((rsp<64>{4} ^ rsp<64>{6}) ^ (rsp<64>{5} ^ rsp<64>{7})));2: %%2<1> := undef;3: %%3<1> := (0<64> = %%0<64>);4: %%4<1> := (%%0<64> <s 0<64>);5: rsp<64> := %%0<64>;6: of<1> := 0<1>;7: sf<1> := %%4<1>;8: zf<1> := %%3<1>;9: af<1> := %%2<1>;10: pf<1> := %%1<1>;11: cf<1> := 0<1>;12: goto (0x0010f1, 0)0010f1: 50 push %rax
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := rax<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x0010f2, 0)0010f2: 54 push %rsp
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := rsp<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x0010f3, 0)0010f3: 4c 8d 05 66 03 00 00 lea 0x366(%rip),%r8
0: r8<64> := 0x0000000000001460;1: goto (0x0010fa, 0)0010fa: 48 8d 0d ef 02 00 00 lea 0x2ef(%rip),%rcx
0: rcx<64> := 0x00000000000013f0;1: goto (0x001101, 0)001101: 48 8d 3d c1 00 00 00 lea 0xc1(%rip),%rdi
0: rdi<64> := 0x00000000000011c9;1: goto (0x001108, 0)001108: ff 15 d2 2e 00 00 call *0x2ed2(%rip)
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := @[0x0000000000003fe0,<-,8];2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := 0x000000000000110e;4: goto %%1<64> #call with return address @ (0x00110e, 0)00110e: f4 hlt
0: #unsupported hlt00110f: 90 nop
0: goto (0x001110, 0)00001110 <deregister_tm_clones>: 001110: 48 8d 3d 01 2f 00 00 lea 0x2f01(%rip),%rdi
0: rdi<64> := 0x0000000000004018;1: goto (0x001117, 0)001117: 48 8d 05 fa 2e 00 00 lea 0x2efa(%rip),%rax
0: rax<64> := 0x0000000000004018;1: goto (0x00111e, 0)00111e: 48 39 f8 cmp %rdi,%rax
0: %%0<64> := ! (rax<64>);1: %%1<64> := (rax<64> - rdi<64>);2: %%2<64> := ! (%%1<64>);3: %%3<64> := (%%0<64> & rdi<64>);4: %%4<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((%%0<64> | rdi<64>) & %%1<64>) | (%%3<64> & %%2<64>))));5: %%5<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));6: %%6<1> := undef;7: %%7<1> := (0<64> = %%1<64>);8: %%8<1> := (%%1<64> <s 0<64>);9: %%9<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rax<64> & ! (rdi<64>)) & %%2<64>) | (%%3<64> & %%1<64>))));10: of<1> := %%9<1>;11: sf<1> := %%8<1>;12: zf<1> := %%7<1>;13: af<1> := %%6<1>;14: pf<1> := %%5<1>;15: cf<1> := %%4<1>;16: goto (0x001121, 0)001121: 74 15 je 0x1138
0: if zf<1> goto 2 else goto 11: goto (0x001123, 0)2: goto (0x001138, 0)001123: 48 8b 05 ae 2e 00 00 mov 0x2eae(%rip),%rax
0: %%0<64> := @[0x0000000000003fd8,<-,8];1: rax<64> := %%0<64>;2: goto (0x00112a, 0)00112a: 48 85 c0 test %rax,%rax
0: %%0<1> :=
!
((((rax<64>{0} ^ rax<64>{4}) ^ (rax<64>{2} ^ rax<64>{6})) ^
((rax<64>{1} ^ rax<64>{5}) ^ (rax<64>{3} ^ rax<64>{7}))));1: %%1<1> := undef;2: %%2<1> := (0<64> = rax<64>);3: %%3<1> := (rax<64> <s 0<64>);4: of<1> := 0<1>;5: sf<1> := %%3<1>;6: zf<1> := %%2<1>;7: af<1> := %%1<1>;8: pf<1> := %%0<1>;9: cf<1> := 0<1>;10: goto (0x00112d, 0)00112d: 74 09 je 0x1138
0: if zf<1> goto 2 else goto 11: goto (0x00112f, 0)2: goto (0x001138, 0)00112f: ff e0 jmp *%rax
0: %%0<64> := rax<64>;1: goto %%0<64>001131: 0f 1f 80 00 00 00 00 nop
0: goto (0x001138, 0)001138: c3 ret
0: %%0<64> := @[rsp<64>,<-,8];1: %%1<64> := (rsp<64> + 8<64>);2: rsp<64> := %%1<64>;3: goto %%0<64> #return001139: 0f 1f 80 00 00 00 00 nop
0: goto (0x001140, 0)00001140 <register_tm_clones>: 001140: 48 8d 3d d1 2e 00 00 lea 0x2ed1(%rip),%rdi
0: rdi<64> := 0x0000000000004018;1: goto (0x001147, 0)001147: 48 8d 35 ca 2e 00 00 lea 0x2eca(%rip),%rsi
0: rsi<64> := 0x0000000000004018;1: goto (0x00114e, 0)00114e: 48 29 fe sub %rdi,%rsi
0: %%0<64> := ! (rsi<64>);1: %%1<64> := (rsi<64> - rdi<64>);2: %%2<64> := ! (%%1<64>);3: %%3<64> := (%%0<64> & rdi<64>);4: %%4<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((%%0<64> | rdi<64>) & %%1<64>) | (%%3<64> & %%2<64>))));5: %%5<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));6: %%6<1> := undef;7: %%7<1> := (0<64> = %%1<64>);8: %%8<1> := (%%1<64> <s 0<64>);9: %%9<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rsi<64> & ! (rdi<64>)) & %%2<64>) | (%%3<64> & %%1<64>))));10: rsi<64> := %%1<64>;11: of<1> := %%9<1>;12: sf<1> := %%8<1>;13: zf<1> := %%7<1>;14: af<1> := %%6<1>;15: pf<1> := %%5<1>;16: cf<1> := %%4<1>;17: goto (0x001151, 0)001151: 48 89 f0 mov %rsi,%rax
0: %%0<64> := rsi<64>;1: rax<64> := %%0<64>;2: goto (0x001154, 0)001154: 48 c1 ee 3f shr $0x3f,%rsi
0: %%0<64> := (rsi<64> lsr 63<64>);1: %%1<1> := rsi<64>{62};2: %%2<1> := ! (rsi<64>{63});3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := ((rsi<64> lsr 63<64>) <s 0<64>);6: %%6<1> := undef;7: rsi<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x001158, 0)001158: 48 c1 f8 03 sar $0x3,%rax
0: %%0<64> := (rax<64> asr 3<64>);1: %%1<1> := rax<64>{2};2: %%2<1> :=
!
((((rax<64>{3} ^ rax<64>{7}) ^ (rax<64>{5} ^ rax<64>{9})) ^
((rax<64>{4} ^ rax<64>{8}) ^ (rax<64>{6} ^ rax<64>{10}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> := undef;7: %%7<64> := %%0<64>;8: rax<64> := %%7<64>;9: of<1> := %%6<1>;10: sf<1> := %%5<1>;11: zf<1> := %%4<1>;12: af<1> := %%3<1>;13: pf<1> := %%2<1>;14: cf<1> := %%1<1>;15: goto (0x00115c, 0)00115c: 48 01 c6 add %rax,%rsi
0: %%0<64> := (rsi<64> & rax<64>);1: %%1<64> := (rsi<64> + rax<64>);2: %%2<64> := ! (%%1<64>);3: %%3<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rsi<64> | rax<64>) & %%2<64>) | (%%0<64> & %%1<64>))));4: %%4<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));5: %%5<1> := undef;6: %%6<1> := (0<64> = %%1<64>);7: %%7<1> := (%%1<64> <s 0<64>);8: %%8<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
((%%0<64> & %%2<64>) | ((! (rsi<64>) & ! (rax<64>)) & %%1<64>))));9: rsi<64> := %%1<64>;10: of<1> := %%8<1>;11: sf<1> := %%7<1>;12: zf<1> := %%6<1>;13: af<1> := %%5<1>;14: pf<1> := %%4<1>;15: cf<1> := %%3<1>;16: goto (0x00115f, 0)00115f: 48 d1 fe sar $0x1,%rsi
0: %%0<64> := (rsi<64> asr 1<64>);1: %%1<1> := (0<64> <> (1<64> & rsi<64>));2: %%2<1> :=
!
((((rsi<64>{1} ^ rsi<64>{5}) ^ (rsi<64>{3} ^ rsi<64>{7})) ^
((rsi<64>{2} ^ rsi<64>{6}) ^ (rsi<64>{4} ^ rsi<64>{8}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<64> := %%0<64>;7: rsi<64> := %%6<64>;8: of<1> := 0<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x001162, 0)001162: 74 14 je 0x1178
0: if zf<1> goto 2 else goto 11: goto (0x001164, 0)2: goto (0x001178, 0)001164: 48 8b 05 85 2e 00 00 mov 0x2e85(%rip),%rax
0: %%0<64> := @[0x0000000000003ff0,<-,8];1: rax<64> := %%0<64>;2: goto (0x00116b, 0)00116b: 48 85 c0 test %rax,%rax
0: %%0<1> :=
!
((((rax<64>{0} ^ rax<64>{4}) ^ (rax<64>{2} ^ rax<64>{6})) ^
((rax<64>{1} ^ rax<64>{5}) ^ (rax<64>{3} ^ rax<64>{7}))));1: %%1<1> := undef;2: %%2<1> := (0<64> = rax<64>);3: %%3<1> := (rax<64> <s 0<64>);4: of<1> := 0<1>;5: sf<1> := %%3<1>;6: zf<1> := %%2<1>;7: af<1> := %%1<1>;8: pf<1> := %%0<1>;9: cf<1> := 0<1>;10: goto (0x00116e, 0)00116e: 74 08 je 0x1178
0: if zf<1> goto 2 else goto 11: goto (0x001170, 0)2: goto (0x001178, 0)001170: ff e0 jmp *%rax
0: %%0<64> := rax<64>;1: goto %%0<64>001172: 66 0f 1f 44 00 00 nop
0: goto (0x001178, 0)001178: c3 ret
0: %%0<64> := @[rsp<64>,<-,8];1: %%1<64> := (rsp<64> + 8<64>);2: rsp<64> := %%1<64>;3: goto %%0<64> #return001179: 0f 1f 80 00 00 00 00 nop
0: goto (0x001180, 0)00001180 <__do_global_dtors_aux>: 001180: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x001184, 0)001184: 80 3d 9d 2e 00 00 00 cmpb $0x0,0x2e9d(%rip)
0: %%0<8> := @[0x0000000000004028,<-,1];1: %%1<8> := %%0<8>;2: %%2<1> := (-128<8> = (-128<8> & (! (%%0<8>) & %%1<8>)));3: %%3<1> :=
!
((((%%1<8>{0} ^ %%1<8>{4}) ^ (%%1<8>{2} ^ %%1<8>{6})) ^
((%%1<8>{1} ^ %%1<8>{5}) ^ (%%1<8>{3} ^ %%1<8>{7}))));4: %%4<1> := undef;5: %%5<1> := (0<8> = %%1<8>);6: %%6<1> := (%%1<8> <s 0<8>);7: %%7<1> := (-128<8> = (-128<8> & (%%0<8> & ! (%%1<8>))));8: of<1> := %%7<1>;9: sf<1> := %%6<1>;10: zf<1> := %%5<1>;11: af<1> := %%4<1>;12: pf<1> := %%3<1>;13: cf<1> := %%2<1>;14: goto (0x00118b, 0)00118b: 75 2b jne 0x11b8
0: if ! (zf<1>) goto 2 else goto 11: goto (0x00118d, 0)2: goto (0x0011b8, 0)00118d: 55 push %rbp
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := rbp<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x00118e, 0)00118e: 48 83 3d 62 2e 00 00 00 cmpq $0x0,0x2e62(%rip)
0: %%0<64> := @[0x0000000000003ff8,<-,8];1: %%1<64> := %%0<64>;2: %%2<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (%%0<64>) & %%1<64>)));3: %%3<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));4: %%4<1> := undef;5: %%5<1> := (0<64> = %%1<64>);6: %%6<1> := (%%1<64> <s 0<64>);7: %%7<1> :=
(0x8000000000000000 = (0x8000000000000000 & (%%0<64> & ! (%%1<64>))));8: of<1> := %%7<1>;9: sf<1> := %%6<1>;10: zf<1> := %%5<1>;11: af<1> := %%4<1>;12: pf<1> := %%3<1>;13: cf<1> := %%2<1>;14: goto (0x001196, 0)001196: 48 89 e5 mov %rsp,%rbp
0: %%0<64> := rsp<64>;1: rbp<64> := %%0<64>;2: goto (0x001199, 0)001199: 74 0c je 0x11a7
0: if zf<1> goto 2 else goto 11: goto (0x00119b, 0)2: goto (0x0011a7, 0)00119b: 48 8b 3d 66 2e 00 00 mov 0x2e66(%rip),%rdi
0: %%0<64> := @[0x0000000000004008,<-,8];1: rdi<64> := %%0<64>;2: goto (0x0011a2, 0)0011a2: e8 d9 fe ff ff call 0x1080
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 0x00000000000011a7;3: goto (0x001080, 0) #call with return address @ (0x0011a7, 0)0011a7: e8 64 ff ff ff call 0x1110
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 0x00000000000011ac;3: goto (0x001110, 0) #call with return address @ (0x0011ac, 0)0011ac: c6 05 75 2e 00 00 01 movb $0x1,0x2e75(%rip)
0: @[0x0000000000004028,<-,1] := 1<8>;1: goto (0x0011b3, 0)0011b3: 5d pop %rbp
0: %%0<64> := (rsp<64> + 8<64>);1: %%1<64> := @[rsp<64>,<-,8];2: rbp<64> := %%1<64>;3: rsp<64> := %%0<64>;4: goto (0x0011b4, 0)0011b4: c3 ret
0: %%0<64> := @[rsp<64>,<-,8];1: %%1<64> := (rsp<64> + 8<64>);2: rsp<64> := %%1<64>;3: goto %%0<64> #return0011b5: 0f 1f 00 nop
0: goto (0x0011b8, 0)0011b8: c3 ret
0: %%0<64> := @[rsp<64>,<-,8];1: %%1<64> := (rsp<64> + 8<64>);2: rsp<64> := %%1<64>;3: goto %%0<64> #return0011b9: 0f 1f 80 00 00 00 00 nop
0: goto (0x0011c0, 0)000011c0 <frame_dummy>: 0011c0: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x0011c4, 0)0011c4: e9 77 ff ff ff jmp 0x1140
0: goto (0x001140, 0)000011c9 <main>: 0011c9: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x0011cd, 0)0011cd: 55 push %rbp
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := rbp<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x0011ce, 0)0011ce: 48 89 e5 mov %rsp,%rbp
0: %%0<64> := rsp<64>;1: rbp<64> := %%0<64>;2: goto (0x0011d1, 0)0011d1: 41 55 push %r13
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := r13<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x0011d3, 0)0011d3: 41 54 push %r12
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := r12<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x0011d5, 0)0011d5: 53 push %rbx
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := rbx<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x0011d6, 0)0011d6: 48 83 ec 38 sub $0x38,%rsp
0: %%0<64> := (rsp<64> - 56<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rsp<64>) & %%0<64>)));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rsp<64> & ! (%%0<64>))));7: rsp<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x0011da, 0)0011da: 64 48 8b 04 25 28 00 00 00 mov %fs:0x28,%rax
0: %%0<64> := @[(fs_base<64> + 40<64>),<-,8];1: rax<64> := %%0<64>;2: goto (0x0011e3, 0)0011e3: 48 89 45 d8 mov %rax,-0x28(%rbp)
0: %%0<64> := rax<64>;1: %%1<64> := (rbp<64> + -40<64>);2: @[%%1<64>,<-,8] := %%0<64>;3: goto (0x0011e7, 0)0011e7: 31 c0 xor %eax,%eax
0: %%0<1> := undef;1: rax<64> := 0<64>;2: of<1> := 0<1>;3: sf<1> := 0<1>;4: zf<1> := -1<1>;5: af<1> := %%0<1>;6: pf<1> := -1<1>;7: cf<1> := 0<1>;8: goto (0x0011e9, 0)0011e9: 48 89 e0 mov %rsp,%rax
0: %%0<64> := rsp<64>;1: rax<64> := %%0<64>;2: goto (0x0011ec, 0)0011ec: 48 89 c3 mov %rax,%rbx
0: %%0<64> := rax<64>;1: rbx<64> := %%0<64>;2: goto (0x0011ef, 0)0011ef: c7 45 b0 09 00 00 00 movl $0x9,-0x50(%rbp)
0: %%0<64> := (rbp<64> + -80<64>);1: @[%%0<64>,<-,4] := 9<32>;2: goto (0x0011f6, 0)0011f6: 8b 45 b0 mov -0x50(%rbp),%eax
0: %%0<64> := (uext64 @[(rbp<64> + -80<64>),<-,4]);1: rax<64> := %%0<64>;2: goto (0x0011f9, 0)0011f9: 48 63 d0 movslq %eax,%rdx
0: %%0<64> := (sext64 rax<64>{31..0});1: rdx<64> := %%0<64>;2: goto (0x0011fc, 0)0011fc: 48 83 ea 01 sub $0x1,%rdx
0: %%0<64> := (rdx<64> - 1<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rdx<64>) & %%0<64>)));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rdx<64> & ! (%%0<64>))));7: rdx<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x001200, 0)001200: 48 89 55 b8 mov %rdx,-0x48(%rbp)
0: %%0<64> := rdx<64>;1: %%1<64> := (rbp<64> + -72<64>);2: @[%%1<64>,<-,8] := %%0<64>;3: goto (0x001204, 0)001204: 48 63 d0 movslq %eax,%rdx
0: %%0<64> := (sext64 rax<64>{31..0});1: rdx<64> := %%0<64>;2: goto (0x001207, 0)001207: 49 89 d4 mov %rdx,%r12
0: %%0<64> := rdx<64>;1: r12<64> := %%0<64>;2: goto (0x00120a, 0)00120a: 41 bd 00 00 00 00 mov $0x0,%r13d
0: r13<64> := 0<64>;1: goto (0x001210, 0)001210: 48 63 d0 movslq %eax,%rdx
0: %%0<64> := (sext64 rax<64>{31..0});1: rdx<64> := %%0<64>;2: goto (0x001213, 0)001213: 49 89 d2 mov %rdx,%r10
0: %%0<64> := rdx<64>;1: r10<64> := %%0<64>;2: goto (0x001216, 0)001216: 41 bb 00 00 00 00 mov $0x0,%r11d
0: r11<64> := 0<64>;1: goto (0x00121c, 0)00121c: 48 98 cdtqe
0: %%0<64> := (sext64 rax<64>{31..0});1: rax<64> := %%0<64>;2: goto (0x00121e, 0)00121e: ba 10 00 00 00 mov $0x10,%edx
0: rdx<64> := 16<64>;1: goto (0x001223, 0)001223: 48 83 ea 01 sub $0x1,%rdx
0: %%0<64> := (rdx<64> - 1<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rdx<64>) & %%0<64>)));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rdx<64> & ! (%%0<64>))));7: rdx<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x001227, 0)001227: 48 01 d0 add %rdx,%rax
0: %%0<64> := (rax<64> & rdx<64>);1: %%1<64> := (rax<64> + rdx<64>);2: %%2<64> := ! (%%1<64>);3: %%3<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rax<64> | rdx<64>) & %%2<64>) | (%%0<64> & %%1<64>))));4: %%4<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));5: %%5<1> := undef;6: %%6<1> := (0<64> = %%1<64>);7: %%7<1> := (%%1<64> <s 0<64>);8: %%8<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
((%%0<64> & %%2<64>) | ((! (rax<64>) & ! (rdx<64>)) & %%1<64>))));9: rax<64> := %%1<64>;10: of<1> := %%8<1>;11: sf<1> := %%7<1>;12: zf<1> := %%6<1>;13: af<1> := %%5<1>;14: pf<1> := %%4<1>;15: cf<1> := %%3<1>;16: goto (0x00122a, 0)00122a: b9 10 00 00 00 mov $0x10,%ecx
0: rcx<64> := 16<64>;1: goto (0x00122f, 0)00122f: ba 00 00 00 00 mov $0x0,%edx
0: rdx<64> := 0<64>;1: goto (0x001234, 0)001234: 48 f7 f1 div %rcx
0: %%0<128> := (uext128 rcx<64>);1: %%1<1> := (0<64> = rcx<64>);2: %%2<128> := (rdx<64> :: rax<64>);3: %%3<64> := %%1<1> ? rax<64> : (%%2<128> /u %%0<128>){63..0};4: %%4<64> := %%1<1> ? rdx<64> : (%%2<128> %u %%0<128>){63..0};5: if %%1<1> goto 6 else goto 76: @assert (0<1>);7: rdx<64> := %%4<64>;8: rax<64> := %%3<64>;9: goto (0x001237, 0)001237: 48 6b c0 10 imul $0x10,%rax,%rax
0: %%0<128> := (16<128> * (sext128 rax<64>));1: %%1<1> := ((sext128 %%0<128>{63..0}) <> %%0<128>);2: %%2<64> := %%0<128>{63..0};3: rax<64> := %%2<64>;4: of<1> := %%1<1>;5: cf<1> := %%1<1>;6: goto (0x00123b, 0)00123b: 48 89 c2 mov %rax,%rdx
0: %%0<64> := rax<64>;1: rdx<64> := %%0<64>;2: goto (0x00123e, 0)00123e: 48 81 e2 00 f0 ff ff and $0xfffffffffffff000,%rdx
0: %%0<64> := (-4096<64> & rdx<64>);1: %%1<1> := undef;2: %%2<1> := (0<64> = %%0<64>);3: %%3<1> := (%%0<64> <s 0<64>);4: rdx<64> := %%0<64>;5: of<1> := 0<1>;6: sf<1> := %%3<1>;7: zf<1> := %%2<1>;8: af<1> := %%1<1>;9: pf<1> := -1<1>;10: cf<1> := 0<1>;11: goto (0x001245, 0)001245: 48 89 e1 mov %rsp,%rcx
0: %%0<64> := rsp<64>;1: rcx<64> := %%0<64>;2: goto (0x001248, 0)001248: 48 29 d1 sub %rdx,%rcx
0: %%0<64> := ! (rcx<64>);1: %%1<64> := (rcx<64> - rdx<64>);2: %%2<64> := ! (%%1<64>);3: %%3<64> := (%%0<64> & rdx<64>);4: %%4<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((%%0<64> | rdx<64>) & %%1<64>) | (%%3<64> & %%2<64>))));5: %%5<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));6: %%6<1> := undef;7: %%7<1> := (0<64> = %%1<64>);8: %%8<1> := (%%1<64> <s 0<64>);9: %%9<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rcx<64> & ! (rdx<64>)) & %%2<64>) | (%%3<64> & %%1<64>))));10: rcx<64> := %%1<64>;11: of<1> := %%9<1>;12: sf<1> := %%8<1>;13: zf<1> := %%7<1>;14: af<1> := %%6<1>;15: pf<1> := %%5<1>;16: cf<1> := %%4<1>;17: goto (0x00124b, 0)00124b: 48 89 ca mov %rcx,%rdx
0: %%0<64> := rcx<64>;1: rdx<64> := %%0<64>;2: goto (0x00124e, 0)00124e: 48 39 d4 cmp %rdx,%rsp
0: %%0<64> := ! (rsp<64>);1: %%1<64> := (rsp<64> - rdx<64>);2: %%2<64> := ! (%%1<64>);3: %%3<64> := (%%0<64> & rdx<64>);4: %%4<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((%%0<64> | rdx<64>) & %%1<64>) | (%%3<64> & %%2<64>))));5: %%5<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));6: %%6<1> := undef;7: %%7<1> := (0<64> = %%1<64>);8: %%8<1> := (%%1<64> <s 0<64>);9: %%9<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rsp<64> & ! (rdx<64>)) & %%2<64>) | (%%3<64> & %%1<64>))));10: of<1> := %%9<1>;11: sf<1> := %%8<1>;12: zf<1> := %%7<1>;13: af<1> := %%6<1>;14: pf<1> := %%5<1>;15: cf<1> := %%4<1>;16: goto (0x001251, 0)001251: 74 12 je 0x1265
0: if zf<1> goto 2 else goto 11: goto (0x001253, 0)2: goto (0x001265, 0)001253: 48 81 ec 00 10 00 00 sub $0x1000,%rsp
0: %%0<64> := (rsp<64> - 4096<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rsp<64>) & %%0<64>)));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rsp<64> & ! (%%0<64>))));7: rsp<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x00125a, 0)00125a: 48 83 8c 24 f8 0f 00 00 00 orq $0x0,0xff8(%rsp)
0: %%0<64> := (rsp<64> + 4088<64>);1: %%1<64> := @[%%0<64>,<-,8];2: %%2<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%1<64>);5: %%5<1> := (%%1<64> <s 0<64>);6: of<1> := 0<1>;7: sf<1> := %%5<1>;8: zf<1> := %%4<1>;9: af<1> := %%3<1>;10: pf<1> := %%2<1>;11: cf<1> := 0<1>;12: @[%%0<64>,<-,8] := %%1<64>;13: goto (0x001263, 0)001263: eb e9 jmp 0x124e
0: goto (0x00124e, 0)001265: 48 89 c2 mov %rax,%rdx
0: %%0<64> := rax<64>;1: rdx<64> := %%0<64>;2: goto (0x001268, 0)001268: 81 e2 ff 0f 00 00 and $0xfff,%edx
0: %%0<1> :=
!
((((rdx<64>{0} ^ rdx<64>{4}) ^ (rdx<64>{2} ^ rdx<64>{6})) ^
((rdx<64>{1} ^ rdx<64>{5}) ^ (rdx<64>{3} ^ rdx<64>{7}))));1: %%1<1> := undef;2: %%2<1> := (0<12> = rdx<64>{11..0});3: %%3<1> := ((uext32 rdx<64>{11..0}) <s 0<32>);4: %%4<64> := (4095<64> & rdx<64>);5: rdx<64> := %%4<64>;6: of<1> := 0<1>;7: sf<1> := %%3<1>;8: zf<1> := %%2<1>;9: af<1> := %%1<1>;10: pf<1> := %%0<1>;11: cf<1> := 0<1>;12: goto (0x00126e, 0)00126e: 48 29 d4 sub %rdx,%rsp
0: %%0<64> := ! (rsp<64>);1: %%1<64> := (rsp<64> - rdx<64>);2: %%2<64> := ! (%%1<64>);3: %%3<64> := (%%0<64> & rdx<64>);4: %%4<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((%%0<64> | rdx<64>) & %%1<64>) | (%%3<64> & %%2<64>))));5: %%5<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));6: %%6<1> := undef;7: %%7<1> := (0<64> = %%1<64>);8: %%8<1> := (%%1<64> <s 0<64>);9: %%9<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rsp<64> & ! (rdx<64>)) & %%2<64>) | (%%3<64> & %%1<64>))));10: rsp<64> := %%1<64>;11: of<1> := %%9<1>;12: sf<1> := %%8<1>;13: zf<1> := %%7<1>;14: af<1> := %%6<1>;15: pf<1> := %%5<1>;16: cf<1> := %%4<1>;17: goto (0x001271, 0)001271: 48 89 c2 mov %rax,%rdx
0: %%0<64> := rax<64>;1: rdx<64> := %%0<64>;2: goto (0x001274, 0)001274: 81 e2 ff 0f 00 00 and $0xfff,%edx
0: %%0<1> :=
!
((((rdx<64>{0} ^ rdx<64>{4}) ^ (rdx<64>{2} ^ rdx<64>{6})) ^
((rdx<64>{1} ^ rdx<64>{5}) ^ (rdx<64>{3} ^ rdx<64>{7}))));1: %%1<1> := undef;2: %%2<1> := (0<12> = rdx<64>{11..0});3: %%3<1> := ((uext32 rdx<64>{11..0}) <s 0<32>);4: %%4<64> := (4095<64> & rdx<64>);5: rdx<64> := %%4<64>;6: of<1> := 0<1>;7: sf<1> := %%3<1>;8: zf<1> := %%2<1>;9: af<1> := %%1<1>;10: pf<1> := %%0<1>;11: cf<1> := 0<1>;12: goto (0x00127a, 0)00127a: 48 85 d2 test %rdx,%rdx
0: %%0<1> :=
!
((((rdx<64>{0} ^ rdx<64>{4}) ^ (rdx<64>{2} ^ rdx<64>{6})) ^
((rdx<64>{1} ^ rdx<64>{5}) ^ (rdx<64>{3} ^ rdx<64>{7}))));1: %%1<1> := undef;2: %%2<1> := (0<64> = rdx<64>);3: %%3<1> := (rdx<64> <s 0<64>);4: of<1> := 0<1>;5: sf<1> := %%3<1>;6: zf<1> := %%2<1>;7: af<1> := %%1<1>;8: pf<1> := %%0<1>;9: cf<1> := 0<1>;10: goto (0x00127d, 0)00127d: 74 10 je 0x128f
0: if zf<1> goto 2 else goto 11: goto (0x00127f, 0)2: goto (0x00128f, 0)00127f: 25 ff 0f 00 00 and $0xfff,%eax
0: %%0<1> :=
!
((((rax<64>{0} ^ rax<64>{4}) ^ (rax<64>{2} ^ rax<64>{6})) ^
((rax<64>{1} ^ rax<64>{5}) ^ (rax<64>{3} ^ rax<64>{7}))));1: %%1<1> := undef;2: %%2<1> := (0<12> = rax<64>{11..0});3: %%3<1> := ((uext32 rax<64>{11..0}) <s 0<32>);4: %%4<64> := (4095<64> & rax<64>);5: rax<64> := %%4<64>;6: of<1> := 0<1>;7: sf<1> := %%3<1>;8: zf<1> := %%2<1>;9: af<1> := %%1<1>;10: pf<1> := %%0<1>;11: cf<1> := 0<1>;12: goto (0x001284, 0)001284: 48 83 e8 08 sub $0x8,%rax
0: %%0<64> := (rax<64> - 8<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rax<64>) & %%0<64>)));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rax<64> & ! (%%0<64>))));7: rax<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x001288, 0)001288: 48 01 e0 add %rsp,%rax
0: %%0<64> := (rax<64> & rsp<64>);1: %%1<64> := (rax<64> + rsp<64>);2: %%2<64> := ! (%%1<64>);3: %%3<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rax<64> | rsp<64>) & %%2<64>) | (%%0<64> & %%1<64>))));4: %%4<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));5: %%5<1> := undef;6: %%6<1> := (0<64> = %%1<64>);7: %%7<1> := (%%1<64> <s 0<64>);8: %%8<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
((%%0<64> & %%2<64>) | ((! (rax<64>) & ! (rsp<64>)) & %%1<64>))));9: rax<64> := %%1<64>;10: of<1> := %%8<1>;11: sf<1> := %%7<1>;12: zf<1> := %%6<1>;13: af<1> := %%5<1>;14: pf<1> := %%4<1>;15: cf<1> := %%3<1>;16: goto (0x00128b, 0)00128b: 48 83 08 00 orq $0x0,(%rax)
0: %%0<64> := @[rax<64>,<-,8];1: %%1<64> := rax<64>;2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: of<1> := 0<1>;7: sf<1> := %%5<1>;8: zf<1> := %%4<1>;9: af<1> := %%3<1>;10: pf<1> := %%2<1>;11: cf<1> := 0<1>;12: @[%%1<64>,<-,8] := %%0<64>;13: goto (0x00128f, 0)00128f: 48 89 e0 mov %rsp,%rax
0: %%0<64> := rsp<64>;1: rax<64> := %%0<64>;2: goto (0x001292, 0)001292: 48 83 c0 00 add $0x0,%rax
0: %%0<64> := rax<64>;1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rax<64> & ! (%%0<64>))));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rax<64>) & %%0<64>)));7: rax<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x001296, 0)001296: 48 89 45 c0 mov %rax,-0x40(%rbp)
0: %%0<64> := rax<64>;1: %%1<64> := (rbp<64> + -64<64>);2: @[%%1<64>,<-,8] := %%0<64>;3: goto (0x00129a, 0)00129a: 8b 45 b0 mov -0x50(%rbp),%eax
0: %%0<64> := (uext64 @[(rbp<64> + -80<64>),<-,4]);1: rax<64> := %%0<64>;2: goto (0x00129d, 0)00129d: 48 63 d0 movslq %eax,%rdx
0: %%0<64> := (sext64 rax<64>{31..0});1: rdx<64> := %%0<64>;2: goto (0x0012a0, 0)0012a0: 48 83 ea 01 sub $0x1,%rdx
0: %%0<64> := (rdx<64> - 1<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rdx<64>) & %%0<64>)));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rdx<64> & ! (%%0<64>))));7: rdx<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x0012a4, 0)0012a4: 48 89 55 c8 mov %rdx,-0x38(%rbp)
0: %%0<64> := rdx<64>;1: %%1<64> := (rbp<64> + -56<64>);2: @[%%1<64>,<-,8] := %%0<64>;3: goto (0x0012a8, 0)0012a8: 48 63 d0 movslq %eax,%rdx
0: %%0<64> := (sext64 rax<64>{31..0});1: rdx<64> := %%0<64>;2: goto (0x0012ab, 0)0012ab: 49 89 d0 mov %rdx,%r8
0: %%0<64> := rdx<64>;1: r8<64> := %%0<64>;2: goto (0x0012ae, 0)0012ae: 41 b9 00 00 00 00 mov $0x0,%r9d
0: r9<64> := 0<64>;1: goto (0x0012b4, 0)0012b4: 48 63 d0 movslq %eax,%rdx
0: %%0<64> := (sext64 rax<64>{31..0});1: rdx<64> := %%0<64>;2: goto (0x0012b7, 0)0012b7: 48 89 d6 mov %rdx,%rsi
0: %%0<64> := rdx<64>;1: rsi<64> := %%0<64>;2: goto (0x0012ba, 0)0012ba: bf 00 00 00 00 mov $0x0,%edi
0: rdi<64> := 0<64>;1: goto (0x0012bf, 0)0012bf: 48 98 cdtqe
0: %%0<64> := (sext64 rax<64>{31..0});1: rax<64> := %%0<64>;2: goto (0x0012c1, 0)0012c1: ba 10 00 00 00 mov $0x10,%edx
0: rdx<64> := 16<64>;1: goto (0x0012c6, 0)0012c6: 48 83 ea 01 sub $0x1,%rdx
0: %%0<64> := (rdx<64> - 1<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rdx<64>) & %%0<64>)));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rdx<64> & ! (%%0<64>))));7: rdx<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x0012ca, 0)0012ca: 48 01 d0 add %rdx,%rax
0: %%0<64> := (rax<64> & rdx<64>);1: %%1<64> := (rax<64> + rdx<64>);2: %%2<64> := ! (%%1<64>);3: %%3<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rax<64> | rdx<64>) & %%2<64>) | (%%0<64> & %%1<64>))));4: %%4<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));5: %%5<1> := undef;6: %%6<1> := (0<64> = %%1<64>);7: %%7<1> := (%%1<64> <s 0<64>);8: %%8<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
((%%0<64> & %%2<64>) | ((! (rax<64>) & ! (rdx<64>)) & %%1<64>))));9: rax<64> := %%1<64>;10: of<1> := %%8<1>;11: sf<1> := %%7<1>;12: zf<1> := %%6<1>;13: af<1> := %%5<1>;14: pf<1> := %%4<1>;15: cf<1> := %%3<1>;16: goto (0x0012cd, 0)0012cd: bf 10 00 00 00 mov $0x10,%edi
0: rdi<64> := 16<64>;1: goto (0x0012d2, 0)0012d2: ba 00 00 00 00 mov $0x0,%edx
0: rdx<64> := 0<64>;1: goto (0x0012d7, 0)0012d7: 48 f7 f7 div %rdi
0: %%0<128> := (uext128 rdi<64>);1: %%1<1> := (0<64> = rdi<64>);2: %%2<128> := (rdx<64> :: rax<64>);3: %%3<64> := %%1<1> ? rax<64> : (%%2<128> /u %%0<128>){63..0};4: %%4<64> := %%1<1> ? rdx<64> : (%%2<128> %u %%0<128>){63..0};5: if %%1<1> goto 6 else goto 76: @assert (0<1>);7: rdx<64> := %%4<64>;8: rax<64> := %%3<64>;9: goto (0x0012da, 0)0012da: 48 6b c0 10 imul $0x10,%rax,%rax
0: %%0<128> := (16<128> * (sext128 rax<64>));1: %%1<1> := ((sext128 %%0<128>{63..0}) <> %%0<128>);2: %%2<64> := %%0<128>{63..0};3: rax<64> := %%2<64>;4: of<1> := %%1<1>;5: cf<1> := %%1<1>;6: goto (0x0012de, 0)0012de: 48 89 c2 mov %rax,%rdx
0: %%0<64> := rax<64>;1: rdx<64> := %%0<64>;2: goto (0x0012e1, 0)0012e1: 48 81 e2 00 f0 ff ff and $0xfffffffffffff000,%rdx
0: %%0<64> := (-4096<64> & rdx<64>);1: %%1<1> := undef;2: %%2<1> := (0<64> = %%0<64>);3: %%3<1> := (%%0<64> <s 0<64>);4: rdx<64> := %%0<64>;5: of<1> := 0<1>;6: sf<1> := %%3<1>;7: zf<1> := %%2<1>;8: af<1> := %%1<1>;9: pf<1> := -1<1>;10: cf<1> := 0<1>;11: goto (0x0012e8, 0)0012e8: 48 89 e6 mov %rsp,%rsi
0: %%0<64> := rsp<64>;1: rsi<64> := %%0<64>;2: goto (0x0012eb, 0)0012eb: 48 29 d6 sub %rdx,%rsi
0: %%0<64> := ! (rsi<64>);1: %%1<64> := (rsi<64> - rdx<64>);2: %%2<64> := ! (%%1<64>);3: %%3<64> := (%%0<64> & rdx<64>);4: %%4<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((%%0<64> | rdx<64>) & %%1<64>) | (%%3<64> & %%2<64>))));5: %%5<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));6: %%6<1> := undef;7: %%7<1> := (0<64> = %%1<64>);8: %%8<1> := (%%1<64> <s 0<64>);9: %%9<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rsi<64> & ! (rdx<64>)) & %%2<64>) | (%%3<64> & %%1<64>))));10: rsi<64> := %%1<64>;11: of<1> := %%9<1>;12: sf<1> := %%8<1>;13: zf<1> := %%7<1>;14: af<1> := %%6<1>;15: pf<1> := %%5<1>;16: cf<1> := %%4<1>;17: goto (0x0012ee, 0)0012ee: 48 89 f2 mov %rsi,%rdx
0: %%0<64> := rsi<64>;1: rdx<64> := %%0<64>;2: goto (0x0012f1, 0)0012f1: 48 39 d4 cmp %rdx,%rsp
0: %%0<64> := ! (rsp<64>);1: %%1<64> := (rsp<64> - rdx<64>);2: %%2<64> := ! (%%1<64>);3: %%3<64> := (%%0<64> & rdx<64>);4: %%4<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((%%0<64> | rdx<64>) & %%1<64>) | (%%3<64> & %%2<64>))));5: %%5<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));6: %%6<1> := undef;7: %%7<1> := (0<64> = %%1<64>);8: %%8<1> := (%%1<64> <s 0<64>);9: %%9<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rsp<64> & ! (rdx<64>)) & %%2<64>) | (%%3<64> & %%1<64>))));10: of<1> := %%9<1>;11: sf<1> := %%8<1>;12: zf<1> := %%7<1>;13: af<1> := %%6<1>;14: pf<1> := %%5<1>;15: cf<1> := %%4<1>;16: goto (0x0012f4, 0)0012f4: 74 12 je 0x1308
0: if zf<1> goto 2 else goto 11: goto (0x0012f6, 0)2: goto (0x001308, 0)0012f6: 48 81 ec 00 10 00 00 sub $0x1000,%rsp
0: %%0<64> := (rsp<64> - 4096<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rsp<64>) & %%0<64>)));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rsp<64> & ! (%%0<64>))));7: rsp<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x0012fd, 0)0012fd: 48 83 8c 24 f8 0f 00 00 00 orq $0x0,0xff8(%rsp)
0: %%0<64> := (rsp<64> + 4088<64>);1: %%1<64> := @[%%0<64>,<-,8];2: %%2<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%1<64>);5: %%5<1> := (%%1<64> <s 0<64>);6: of<1> := 0<1>;7: sf<1> := %%5<1>;8: zf<1> := %%4<1>;9: af<1> := %%3<1>;10: pf<1> := %%2<1>;11: cf<1> := 0<1>;12: @[%%0<64>,<-,8] := %%1<64>;13: goto (0x001306, 0)001306: eb e9 jmp 0x12f1
0: goto (0x0012f1, 0)001308: 48 89 c2 mov %rax,%rdx
0: %%0<64> := rax<64>;1: rdx<64> := %%0<64>;2: goto (0x00130b, 0)00130b: 81 e2 ff 0f 00 00 and $0xfff,%edx
0: %%0<1> :=
!
((((rdx<64>{0} ^ rdx<64>{4}) ^ (rdx<64>{2} ^ rdx<64>{6})) ^
((rdx<64>{1} ^ rdx<64>{5}) ^ (rdx<64>{3} ^ rdx<64>{7}))));1: %%1<1> := undef;2: %%2<1> := (0<12> = rdx<64>{11..0});3: %%3<1> := ((uext32 rdx<64>{11..0}) <s 0<32>);4: %%4<64> := (4095<64> & rdx<64>);5: rdx<64> := %%4<64>;6: of<1> := 0<1>;7: sf<1> := %%3<1>;8: zf<1> := %%2<1>;9: af<1> := %%1<1>;10: pf<1> := %%0<1>;11: cf<1> := 0<1>;12: goto (0x001311, 0)001311: 48 29 d4 sub %rdx,%rsp
0: %%0<64> := ! (rsp<64>);1: %%1<64> := (rsp<64> - rdx<64>);2: %%2<64> := ! (%%1<64>);3: %%3<64> := (%%0<64> & rdx<64>);4: %%4<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((%%0<64> | rdx<64>) & %%1<64>) | (%%3<64> & %%2<64>))));5: %%5<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));6: %%6<1> := undef;7: %%7<1> := (0<64> = %%1<64>);8: %%8<1> := (%%1<64> <s 0<64>);9: %%9<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rsp<64> & ! (rdx<64>)) & %%2<64>) | (%%3<64> & %%1<64>))));10: rsp<64> := %%1<64>;11: of<1> := %%9<1>;12: sf<1> := %%8<1>;13: zf<1> := %%7<1>;14: af<1> := %%6<1>;15: pf<1> := %%5<1>;16: cf<1> := %%4<1>;17: goto (0x001314, 0)001314: 48 89 c2 mov %rax,%rdx
0: %%0<64> := rax<64>;1: rdx<64> := %%0<64>;2: goto (0x001317, 0)001317: 81 e2 ff 0f 00 00 and $0xfff,%edx
0: %%0<1> :=
!
((((rdx<64>{0} ^ rdx<64>{4}) ^ (rdx<64>{2} ^ rdx<64>{6})) ^
((rdx<64>{1} ^ rdx<64>{5}) ^ (rdx<64>{3} ^ rdx<64>{7}))));1: %%1<1> := undef;2: %%2<1> := (0<12> = rdx<64>{11..0});3: %%3<1> := ((uext32 rdx<64>{11..0}) <s 0<32>);4: %%4<64> := (4095<64> & rdx<64>);5: rdx<64> := %%4<64>;6: of<1> := 0<1>;7: sf<1> := %%3<1>;8: zf<1> := %%2<1>;9: af<1> := %%1<1>;10: pf<1> := %%0<1>;11: cf<1> := 0<1>;12: goto (0x00131d, 0)00131d: 48 85 d2 test %rdx,%rdx
0: %%0<1> :=
!
((((rdx<64>{0} ^ rdx<64>{4}) ^ (rdx<64>{2} ^ rdx<64>{6})) ^
((rdx<64>{1} ^ rdx<64>{5}) ^ (rdx<64>{3} ^ rdx<64>{7}))));1: %%1<1> := undef;2: %%2<1> := (0<64> = rdx<64>);3: %%3<1> := (rdx<64> <s 0<64>);4: of<1> := 0<1>;5: sf<1> := %%3<1>;6: zf<1> := %%2<1>;7: af<1> := %%1<1>;8: pf<1> := %%0<1>;9: cf<1> := 0<1>;10: goto (0x001320, 0)001320: 74 10 je 0x1332
0: if zf<1> goto 2 else goto 11: goto (0x001322, 0)2: goto (0x001332, 0)001322: 25 ff 0f 00 00 and $0xfff,%eax
0: %%0<1> :=
!
((((rax<64>{0} ^ rax<64>{4}) ^ (rax<64>{2} ^ rax<64>{6})) ^
((rax<64>{1} ^ rax<64>{5}) ^ (rax<64>{3} ^ rax<64>{7}))));1: %%1<1> := undef;2: %%2<1> := (0<12> = rax<64>{11..0});3: %%3<1> := ((uext32 rax<64>{11..0}) <s 0<32>);4: %%4<64> := (4095<64> & rax<64>);5: rax<64> := %%4<64>;6: of<1> := 0<1>;7: sf<1> := %%3<1>;8: zf<1> := %%2<1>;9: af<1> := %%1<1>;10: pf<1> := %%0<1>;11: cf<1> := 0<1>;12: goto (0x001327, 0)001327: 48 83 e8 08 sub $0x8,%rax
0: %%0<64> := (rax<64> - 8<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rax<64>) & %%0<64>)));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rax<64> & ! (%%0<64>))));7: rax<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x00132b, 0)00132b: 48 01 e0 add %rsp,%rax
0: %%0<64> := (rax<64> & rsp<64>);1: %%1<64> := (rax<64> + rsp<64>);2: %%2<64> := ! (%%1<64>);3: %%3<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rax<64> | rsp<64>) & %%2<64>) | (%%0<64> & %%1<64>))));4: %%4<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));5: %%5<1> := undef;6: %%6<1> := (0<64> = %%1<64>);7: %%7<1> := (%%1<64> <s 0<64>);8: %%8<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
((%%0<64> & %%2<64>) | ((! (rax<64>) & ! (rsp<64>)) & %%1<64>))));9: rax<64> := %%1<64>;10: of<1> := %%8<1>;11: sf<1> := %%7<1>;12: zf<1> := %%6<1>;13: af<1> := %%5<1>;14: pf<1> := %%4<1>;15: cf<1> := %%3<1>;16: goto (0x00132e, 0)00132e: 48 83 08 00 orq $0x0,(%rax)
0: %%0<64> := @[rax<64>,<-,8];1: %%1<64> := rax<64>;2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: of<1> := 0<1>;7: sf<1> := %%5<1>;8: zf<1> := %%4<1>;9: af<1> := %%3<1>;10: pf<1> := %%2<1>;11: cf<1> := 0<1>;12: @[%%1<64>,<-,8] := %%0<64>;13: goto (0x001332, 0)001332: 48 89 e0 mov %rsp,%rax
0: %%0<64> := rsp<64>;1: rax<64> := %%0<64>;2: goto (0x001335, 0)001335: 48 83 c0 00 add $0x0,%rax
0: %%0<64> := rax<64>;1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rax<64> & ! (%%0<64>))));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rax<64>) & %%0<64>)));7: rax<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x001339, 0)001339: 48 89 45 d0 mov %rax,-0x30(%rbp)
0: %%0<64> := rax<64>;1: %%1<64> := (rbp<64> + -48<64>);2: @[%%1<64>,<-,8] := %%0<64>;3: goto (0x00133d, 0)00133d: 8b 45 b0 mov -0x50(%rbp),%eax
0: %%0<64> := (uext64 @[(rbp<64> + -80<64>),<-,4]);1: rax<64> := %%0<64>;2: goto (0x001340, 0)001340: 48 63 d0 movslq %eax,%rdx
0: %%0<64> := (sext64 rax<64>{31..0});1: rdx<64> := %%0<64>;2: goto (0x001343, 0)001343: 48 8b 0d c6 2c 00 00 mov 0x2cc6(%rip),%rcx
0: %%0<64> := @[0x0000000000004010,<-,8];1: rcx<64> := %%0<64>;2: goto (0x00134a, 0)00134a: 48 8b 45 d0 mov -0x30(%rbp),%rax
0: %%0<64> := @[(rbp<64> + -48<64>),<-,8];1: rax<64> := %%0<64>;2: goto (0x00134e, 0)00134e: 48 89 ce mov %rcx,%rsi
0: %%0<64> := rcx<64>;1: rsi<64> := %%0<64>;2: goto (0x001351, 0)001351: 48 89 c7 mov %rax,%rdi
0: %%0<64> := rax<64>;1: rdi<64> := %%0<64>;2: goto (0x001354, 0)001354: e8 37 fd ff ff call 0x1090
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 0x0000000000001359;3: goto (0x001090, 0) #call with return address @ (0x001359, 0)001359: 48 8b 45 d0 mov -0x30(%rbp),%rax
0: %%0<64> := @[(rbp<64> + -48<64>),<-,8];1: rax<64> := %%0<64>;2: goto (0x00135d, 0)00135d: c6 40 01 61 movb $0x61,0x1(%rax)
0: %%0<64> := (rax<64> + 1<64>);1: @[%%0<64>,<-,1] := 97<8>;2: goto (0x001361, 0)001361: 48 8d 3d a5 0c 00 00 lea 0xca5(%rip),%rdi
0: rdi<64> := 0x000000000000200d;1: goto (0x001368, 0)001368: e8 33 fd ff ff call 0x10a0
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 0x000000000000136d;3: goto (0x0010a0, 0) #call with return address @ (0x00136d, 0)00136d: 48 8b 15 ac 2c 00 00 mov 0x2cac(%rip),%rdx
0: %%0<64> := @[0x0000000000004020,<-,8];1: rdx<64> := %%0<64>;2: goto (0x001374, 0)001374: 8b 4d b0 mov -0x50(%rbp),%ecx
0: %%0<64> := (uext64 @[(rbp<64> + -80<64>),<-,4]);1: rcx<64> := %%0<64>;2: goto (0x001377, 0)001377: 48 8b 45 c0 mov -0x40(%rbp),%rax
0: %%0<64> := @[(rbp<64> + -64<64>),<-,8];1: rax<64> := %%0<64>;2: goto (0x00137b, 0)00137b: 89 ce mov %ecx,%esi
0: %%0<64> := (0x00000000ffffffff & rcx<64>);1: rsi<64> := %%0<64>;2: goto (0x00137d, 0)00137d: 48 89 c7 mov %rax,%rdi
0: %%0<64> := rax<64>;1: rdi<64> := %%0<64>;2: goto (0x001380, 0)001380: e8 3b fd ff ff call 0x10c0
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 0x0000000000001385;3: goto (0x0010c0, 0) #call with return address @ (0x001385, 0)001385: 48 8b 55 d0 mov -0x30(%rbp),%rdx
0: %%0<64> := @[(rbp<64> + -48<64>),<-,8];1: rdx<64> := %%0<64>;2: goto (0x001389, 0)001389: 48 8b 45 c0 mov -0x40(%rbp),%rax
0: %%0<64> := @[(rbp<64> + -64<64>),<-,8];1: rax<64> := %%0<64>;2: goto (0x00138d, 0)00138d: 48 89 d6 mov %rdx,%rsi
0: %%0<64> := rdx<64>;1: rsi<64> := %%0<64>;2: goto (0x001390, 0)001390: 48 89 c7 mov %rax,%rdi
0: %%0<64> := rax<64>;1: rdi<64> := %%0<64>;2: goto (0x001393, 0)001393: e8 38 fd ff ff call 0x10d0
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 0x0000000000001398;3: goto (0x0010d0, 0) #call with return address @ (0x001398, 0)001398: 89 45 b4 mov %eax,-0x4c(%rbp)
0: %%0<32> := rax<64>{31..0};1: %%1<64> := (rbp<64> + -76<64>);2: @[%%1<64>,<-,4] := %%0<32>;3: goto (0x00139b, 0)00139b: 83 7d b4 00 cmpl $0x0,-0x4c(%rbp)
0: %%0<32> := @[(rbp<64> + -76<64>),<-,4];1: %%1<32> := %%0<32>;2: %%2<1> := (0x80000000 = (0x80000000 & (! (%%0<32>) & %%1<32>)));3: %%3<1> :=
!
((((%%1<32>{0} ^ %%1<32>{4}) ^ (%%1<32>{2} ^ %%1<32>{6})) ^
((%%1<32>{1} ^ %%1<32>{5}) ^ (%%1<32>{3} ^ %%1<32>{7}))));4: %%4<1> := undef;5: %%5<1> := (0<32> = %%1<32>);6: %%6<1> := (%%1<32> <s 0<32>);7: %%7<1> := (0x80000000 = (0x80000000 & (%%0<32> & ! (%%1<32>))));8: of<1> := %%7<1>;9: sf<1> := %%6<1>;10: zf<1> := %%5<1>;11: af<1> := %%4<1>;12: pf<1> := %%3<1>;13: cf<1> := %%2<1>;14: goto (0x00139f, 0)00139f: 74 0e je 0x13af
0: if zf<1> goto 2 else goto 11: goto (0x0013a1, 0)2: goto (0x0013af, 0)0013a1: 48 8d 3d 75 0c 00 00 lea 0xc75(%rip),%rdi
0: rdi<64> := 0x000000000000201d;1: goto (0x0013a8, 0)0013a8: e8 f3 fc ff ff call 0x10a0
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 0x00000000000013ad;3: goto (0x0010a0, 0) #call with return address @ (0x0013ad, 0)0013ad: eb 0c jmp 0x13bb
0: goto (0x0013bb, 0)0013af: 48 8d 3d 70 0c 00 00 lea 0xc70(%rip),%rdi
0: rdi<64> := 0x0000000000002026;1: goto (0x0013b6, 0)0013b6: e8 e5 fc ff ff call 0x10a0
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 0x00000000000013bb;3: goto (0x0010a0, 0) #call with return address @ (0x0013bb, 0)0013bb: b8 00 00 00 00 mov $0x0,%eax
0: rax<64> := 0<64>;1: goto (0x0013c0, 0)0013c0: 48 89 dc mov %rbx,%rsp
0: %%0<64> := rbx<64>;1: rsp<64> := %%0<64>;2: goto (0x0013c3, 0)0013c3: 48 8b 5d d8 mov -0x28(%rbp),%rbx
0: %%0<64> := @[(rbp<64> + -40<64>),<-,8];1: rbx<64> := %%0<64>;2: goto (0x0013c7, 0)0013c7: 64 48 33 1c 25 28 00 00 00 xor %fs:0x28,%rbx
0: %%0<64> := @[(fs_base<64> + 40<64>),<-,8];1: %%1<64> := (rbx<64> ^ %%0<64>);2: %%2<1> :=
!
(((((rbx<64>{0} ^ %%0<64>{0}) ^ (rbx<64>{4} ^ %%0<64>{4})) ^
((rbx<64>{2} ^ %%0<64>{2}) ^ (rbx<64>{6} ^ %%0<64>{6}))) ^
(((rbx<64>{1} ^ %%0<64>{1}) ^ (rbx<64>{5} ^ %%0<64>{5})) ^
((rbx<64>{3} ^ %%0<64>{3}) ^ (rbx<64>{7} ^ %%0<64>{7})))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%1<64>);5: %%5<1> := (%%1<64> <s 0<64>);6: rbx<64> := %%1<64>;7: of<1> := 0<1>;8: sf<1> := %%5<1>;9: zf<1> := %%4<1>;10: af<1> := %%3<1>;11: pf<1> := %%2<1>;12: cf<1> := 0<1>;13: goto (0x0013d0, 0)0013d0: 74 05 je 0x13d7
0: if zf<1> goto 2 else goto 11: goto (0x0013d2, 0)2: goto (0x0013d7, 0)0013d2: e8 d9 fc ff ff call 0x10b0
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 0x00000000000013d7;3: goto (0x0010b0, 0) #call with return address @ (0x0013d7, 0)0013d7: 48 8d 65 e8 lea -0x18(%rbp),%rsp
0: %%0<64> := (rbp<64> + -24<64>);1: rsp<64> := %%0<64>;2: goto (0x0013db, 0)0013db: 5b pop %rbx
0: %%0<64> := @[rsp<64>,<-,8];1: %%1<64> := (rsp<64> + 8<64>);2: rsp<64> := %%1<64>;3: rbx<64> := %%0<64>;4: goto (0x0013dc, 0)0013dc: 41 5c pop %r12
0: %%0<64> := (rsp<64> + 8<64>);1: %%1<64> := @[rsp<64>,<-,8];2: r12<64> := %%1<64>;3: rsp<64> := %%0<64>;4: goto (0x0013de, 0)0013de: 41 5d pop %r13
0: %%0<64> := (rsp<64> + 8<64>);1: %%1<64> := @[rsp<64>,<-,8];2: r13<64> := %%1<64>;3: rsp<64> := %%0<64>;4: goto (0x0013e0, 0)0013e0: 5d pop %rbp
0: %%0<64> := (rsp<64> + 8<64>);1: %%1<64> := @[rsp<64>,<-,8];2: rbp<64> := %%1<64>;3: rsp<64> := %%0<64>;4: goto (0x0013e1, 0)0013e1: c3 ret
0: %%0<64> := @[rsp<64>,<-,8];1: %%1<64> := (rsp<64> + 8<64>);2: rsp<64> := %%1<64>;3: goto %%0<64> #return0013e2: 66 2e 0f 1f 84 00 00 00 00 00 nop
0: goto (0x0013ec, 0)0013ec: 0f 1f 40 00 nop
0: goto (0x0013f0, 0)000013f0 <__libc_csu_init>: 0013f0: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x0013f4, 0)0013f4: 41 57 push %r15
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := r15<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x0013f6, 0)0013f6: 4c 8d 3d 9b 29 00 00 lea 0x299b(%rip),%r15
0: r15<64> := 0x0000000000003d98;1: goto (0x0013fd, 0)0013fd: 41 56 push %r14
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := r14<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x0013ff, 0)0013ff: 49 89 d6 mov %rdx,%r14
0: %%0<64> := rdx<64>;1: r14<64> := %%0<64>;2: goto (0x001402, 0)001402: 41 55 push %r13
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := r13<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x001404, 0)001404: 49 89 f5 mov %rsi,%r13
0: %%0<64> := rsi<64>;1: r13<64> := %%0<64>;2: goto (0x001407, 0)001407: 41 54 push %r12
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := r12<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x001409, 0)001409: 41 89 fc mov %edi,%r12d
0: %%0<64> := (0x00000000ffffffff & rdi<64>);1: r12<64> := %%0<64>;2: goto (0x00140c, 0)00140c: 55 push %rbp
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := rbp<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x00140d, 0)00140d: 48 8d 2d 8c 29 00 00 lea 0x298c(%rip),%rbp
0: rbp<64> := 0x0000000000003da0;1: goto (0x001414, 0)001414: 53 push %rbx
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := rbx<64>;2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := %%1<64>;4: goto (0x001415, 0)001415: 4c 29 fd sub %r15,%rbp
0: %%0<64> := ! (rbp<64>);1: %%1<64> := (rbp<64> - r15<64>);2: %%2<64> := ! (%%1<64>);3: %%3<64> := (%%0<64> & r15<64>);4: %%4<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((%%0<64> | r15<64>) & %%1<64>) | (%%3<64> & %%2<64>))));5: %%5<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));6: %%6<1> := undef;7: %%7<1> := (0<64> = %%1<64>);8: %%8<1> := (%%1<64> <s 0<64>);9: %%9<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rbp<64> & ! (r15<64>)) & %%2<64>) | (%%3<64> & %%1<64>))));10: rbp<64> := %%1<64>;11: of<1> := %%9<1>;12: sf<1> := %%8<1>;13: zf<1> := %%7<1>;14: af<1> := %%6<1>;15: pf<1> := %%5<1>;16: cf<1> := %%4<1>;17: goto (0x001418, 0)001418: 48 83 ec 08 sub $0x8,%rsp
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rsp<64>) & %%0<64>)));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rsp<64> & ! (%%0<64>))));7: rsp<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x00141c, 0)00141c: e8 df fb ff ff call 0x1000
0: %%0<64> := (rsp<64> - 8<64>);1: rsp<64> := %%0<64>;2: @[%%0<64>,<-,8] := 0x0000000000001421;3: goto (0x001000, 0) #call with return address @ (0x001421, 0)001421: 48 c1 fd 03 sar $0x3,%rbp
0: %%0<64> := (rbp<64> asr 3<64>);1: %%1<1> := rbp<64>{2};2: %%2<1> :=
!
((((rbp<64>{3} ^ rbp<64>{7}) ^ (rbp<64>{5} ^ rbp<64>{9})) ^
((rbp<64>{4} ^ rbp<64>{8}) ^ (rbp<64>{6} ^ rbp<64>{10}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> := undef;7: %%7<64> := %%0<64>;8: rbp<64> := %%7<64>;9: of<1> := %%6<1>;10: sf<1> := %%5<1>;11: zf<1> := %%4<1>;12: af<1> := %%3<1>;13: pf<1> := %%2<1>;14: cf<1> := %%1<1>;15: goto (0x001425, 0)001425: 74 1f je 0x1446
0: if zf<1> goto 2 else goto 11: goto (0x001427, 0)2: goto (0x001446, 0)001427: 31 db xor %ebx,%ebx
0: %%0<1> := undef;1: rbx<64> := 0<64>;2: of<1> := 0<1>;3: sf<1> := 0<1>;4: zf<1> := -1<1>;5: af<1> := %%0<1>;6: pf<1> := -1<1>;7: cf<1> := 0<1>;8: goto (0x001429, 0)001429: 0f 1f 80 00 00 00 00 nop
0: goto (0x001430, 0)001430: 4c 89 f2 mov %r14,%rdx
0: %%0<64> := r14<64>;1: rdx<64> := %%0<64>;2: goto (0x001433, 0)001433: 4c 89 ee mov %r13,%rsi
0: %%0<64> := r13<64>;1: rsi<64> := %%0<64>;2: goto (0x001436, 0)001436: 44 89 e7 mov %r12d,%edi
0: %%0<64> := (0x00000000ffffffff & r12<64>);1: rdi<64> := %%0<64>;2: goto (0x001439, 0)001439: 41 ff 14 df call *(%r15,%rbx,8)
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<64> := @[(r15<64> + (rbx<64> lsl 3<64>)),<-,8];2: rsp<64> := %%0<64>;3: @[%%0<64>,<-,8] := 0x000000000000143d;4: goto %%1<64> #call with return address @ (0x00143d, 0)00143d: 48 83 c3 01 add $0x1,%rbx
0: %%0<64> := (rbx<64> + 1<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rbx<64> & ! (%%0<64>))));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rbx<64>) & %%0<64>)));7: rbx<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x001441, 0)001441: 48 39 dd cmp %rbx,%rbp
0: %%0<64> := ! (rbp<64>);1: %%1<64> := (rbp<64> - rbx<64>);2: %%2<64> := ! (%%1<64>);3: %%3<64> := (%%0<64> & rbx<64>);4: %%4<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((%%0<64> | rbx<64>) & %%1<64>) | (%%3<64> & %%2<64>))));5: %%5<1> :=
!
((((%%1<64>{0} ^ %%1<64>{4}) ^ (%%1<64>{2} ^ %%1<64>{6})) ^
((%%1<64>{1} ^ %%1<64>{5}) ^ (%%1<64>{3} ^ %%1<64>{7}))));6: %%6<1> := undef;7: %%7<1> := (0<64> = %%1<64>);8: %%8<1> := (%%1<64> <s 0<64>);9: %%9<1> :=
(0x8000000000000000 =
(0x8000000000000000 &
(((rbp<64> & ! (rbx<64>)) & %%2<64>) | (%%3<64> & %%1<64>))));10: of<1> := %%9<1>;11: sf<1> := %%8<1>;12: zf<1> := %%7<1>;13: af<1> := %%6<1>;14: pf<1> := %%5<1>;15: cf<1> := %%4<1>;16: goto (0x001444, 0)001444: 75 ea jne 0x1430
0: if ! (zf<1>) goto 2 else goto 11: goto (0x001446, 0)2: goto (0x001430, 0)001446: 48 83 c4 08 add $0x8,%rsp
0: %%0<64> := (rsp<64> + 8<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rsp<64> & ! (%%0<64>))));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rsp<64>) & %%0<64>)));7: rsp<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x00144a, 0)00144a: 5b pop %rbx
0: %%0<64> := @[rsp<64>,<-,8];1: %%1<64> := (rsp<64> + 8<64>);2: rsp<64> := %%1<64>;3: rbx<64> := %%0<64>;4: goto (0x00144b, 0)00144b: 5d pop %rbp
0: %%0<64> := (rsp<64> + 8<64>);1: %%1<64> := @[rsp<64>,<-,8];2: rbp<64> := %%1<64>;3: rsp<64> := %%0<64>;4: goto (0x00144c, 0)00144c: 41 5c pop %r12
0: %%0<64> := (rsp<64> + 8<64>);1: %%1<64> := @[rsp<64>,<-,8];2: r12<64> := %%1<64>;3: rsp<64> := %%0<64>;4: goto (0x00144e, 0)00144e: 41 5d pop %r13
0: %%0<64> := (rsp<64> + 8<64>);1: %%1<64> := @[rsp<64>,<-,8];2: r13<64> := %%1<64>;3: rsp<64> := %%0<64>;4: goto (0x001450, 0)001450: 41 5e pop %r14
0: %%0<64> := (rsp<64> + 8<64>);1: %%1<64> := @[rsp<64>,<-,8];2: r14<64> := %%1<64>;3: rsp<64> := %%0<64>;4: goto (0x001452, 0)001452: 41 5f pop %r15
0: %%0<64> := (rsp<64> + 8<64>);1: %%1<64> := @[rsp<64>,<-,8];2: r15<64> := %%1<64>;3: rsp<64> := %%0<64>;4: goto (0x001454, 0)001454: c3 ret
0: %%0<64> := @[rsp<64>,<-,8];1: %%1<64> := (rsp<64> + 8<64>);2: rsp<64> := %%1<64>;3: goto %%0<64> #return001455: 66 66 2e 0f 1f 84 00 00 00 00 00 nop
0: goto (0x001460, 0)00001460 <__libc_csu_fini>: 001460: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x001464, 0)001464: c3 ret
0: %%0<64> := @[rsp<64>,<-,8];1: %%1<64> := (rsp<64> + 8<64>);2: rsp<64> := %%1<64>;3: goto %%0<64> #returnDisassembly of section .fini:
00001468 <_fini>: 001468: f3 0f 1e fa hint<16> %rdi,%rdx
0: goto (0x00146c, 0)00146c: 48 83 ec 08 sub $0x8,%rsp
0: %%0<64> := (rsp<64> - 8<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rsp<64>) & %%0<64>)));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rsp<64> & ! (%%0<64>))));7: rsp<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x001470, 0)001470: 48 83 c4 08 add $0x8,%rsp
0: %%0<64> := (rsp<64> + 8<64>);1: %%1<1> :=
(0x8000000000000000 = (0x8000000000000000 & (rsp<64> & ! (%%0<64>))));2: %%2<1> :=
!
((((%%0<64>{0} ^ %%0<64>{4}) ^ (%%0<64>{2} ^ %%0<64>{6})) ^
((%%0<64>{1} ^ %%0<64>{5}) ^ (%%0<64>{3} ^ %%0<64>{7}))));3: %%3<1> := undef;4: %%4<1> := (0<64> = %%0<64>);5: %%5<1> := (%%0<64> <s 0<64>);6: %%6<1> :=
(0x8000000000000000 = (0x8000000000000000 & (! (rsp<64>) & %%0<64>)));7: rsp<64> := %%0<64>;8: of<1> := %%6<1>;9: sf<1> := %%5<1>;10: zf<1> := %%4<1>;11: af<1> := %%3<1>;12: pf<1> := %%2<1>;13: cf<1> := %%1<1>;14: goto (0x001474, 0)001474: c3 ret
0: %%0<64> := @[rsp<64>,<-,8];1: %%1<64> := (rsp<64> + 8<64>);2: rsp<64> := %%1<64>;3: goto %%0<64> #return
Reverse engineering
If we run it, we are asked to enter a password.
./crackme
./crackme
Enter password:
Go away!
As usual, failing to provide the good one greets us with an error message, while we can guess that we want the Welcome! message from the .rodata section (0x2000).
Looking at the dynamic symbol table shows us the dynamically linked
functions the program may call: here puts for output and fgets for input, but also strncpy and strcmp for data processing.
Symbol table '.dynsym' contains 12 entries:
Num: Value Size Type Bind Section Name
0: 0000000000000000 0 NOTYPE LOCAL UND
1: 0000000000000000 0 FUNC GLOBAL UND strncpy
2: 0000000000000000 0 NOTYPE WEAK UND _ITM_deregiste...
3: 0000000000000000 0 FUNC GLOBAL UND puts
4: 0000000000000000 0 FUNC GLOBAL UND __stack_chk_fail
5: 0000000000000000 0 FUNC GLOBAL UND __libc_start_main
6: 0000000000000000 0 FUNC GLOBAL UND fgets
7: 0000000000000000 0 FUNC GLOBAL UND strcmp
8: 0000000000000000 0 NOTYPE WEAK UND __gmon_start__
9: 0000000000000000 0 NOTYPE WEAK UND _ITM_registerT...
10: 0000000000000000 0 FUNC WEAK UND __cxa_finalize
11: 0000000000004020 8 OBJECT GLOBAL .bss stdin
Generating the core dump
First, we need to generate a core dump. For this, we will use the script make coredump.sh.
This script is a wrapper around gdb. It runs the program with the environment variable
LD BIND NOW set, such that the dynamic linker resolves all the dynamic functions at
startup time, stopping at the main function and outputting the memory dump.
Gor the reproducibility, we can then use the script archive_sysroot.sh to create a copy of the files used by the snapshot.
We will illustrate the process with the challenge named crackme which comes from the site crackmes.one.
- Browser
- Command-line
The following commands will produce the files core.snapshot and sysroot.tar.gz.
make_coredump.sh core.snapshot crackme
archive_sysroot.sh core.snapshot sysroot.tar.gz
Final script
We will use the following script.
starting from core
replace <puts> (_) by
return 0
end
abort at <__stack_chk_fail>
stdin_pos<64> := 0
replace <fgets> (ptr, size, _) by
for i<64> in 0 to size - 1 do
@[ptr + i] := stdin[stdin_pos]
stdin_pos := stdin_pos + 1
end
return size
end
reach <puts> such that @[rdi, 8] = "Welcome!" then print c string stdin
cut at <main> return
- Browser
- Command-line
Download or copy the content of the script in the file crackme_script_1.ini.
To run BINSEC, we have to pass the generated core dump instead of the original binary.
binsec -sse -sse-script crackme_script_1.ini core.snapshot -sse-sysroot sysroot
[sse:result] Path 1 reached address 0x7df64f3135a0 (<puts>) (0 to go)
[sse:result] C string stdin[0<64>, *] : "Password"
[sse:info] SMT queries
Preprocessing simplifications
total 12
sat 12
unsat 0
time 0.00
Satisfiability queries
total 1
sat 1
unsat 0
unknown 0
time 0.01
average 0.01
Exploration
total paths 2
completed/cut paths 1
pending paths 1
discontinued paths 0
failed assertions 0
branching points 27
max path depth 185
visited instructions (unrolled) 189
visited instructions (static) 827
We are using an alternative statement starting from core to instruct the symbolic
engine to concretize everything from the memory snapshot. It thus replaces loading of
sections, initialization of the starting address and stack pointer.
The kind of thing we like to know!
Here, we no longer have to anchor the dynamic functions with @plt; we can directly use the
symbol names (<SYMBOL>) that are automatically resolved by BINSEC.
The abort at <__stack_chk_fail> statement is juste a shortcut for the following.
replace <__stack_chk_fail> by
assert false
end