Skip to content

Instantly share code, notes, and snippets.

@jzebedee
Created July 22, 2014 15:18
Show Gist options
  • Save jzebedee/d96d1f585508b8ec3660 to your computer and use it in GitHub Desktop.
Save jzebedee/d96d1f585508b8ec3660 to your computer and use it in GitHub Desktop.
old/new Write64 JIT
Text Compare
Produced: 7/22/2014 10:17:01 AM
Mode: All
Left file: C:\Users\\Desktop\old_Write64_JIT.txt
Right file: C:\Users\\Desktop\new_Write64_JIT.txt
<> 1 if (value < 0)
1 00007FFC28EE46B0 mov dword ptr [rsp+18h],r8d 2 00007FFC28EE48C0 mov dword ptr [rsp+18h],r8d
2 00007FFC28EE46B5 mov qword ptr [rsp+10h],rdx 3 00007FFC28EE48C5 mov qword ptr [rsp+10h],rdx
3 00007FFC28EE46BA mov qword ptr [rsp+8],rcx 4 00007FFC28EE48CA mov qword ptr [rsp+8],rcx
4 00007FFC28EE46BF sub rsp,78h 5 00007FFC28EE48CF sub rsp,68h
5 00007FFC28EE46C3 mov qword ptr [rsp+20h],0 6 00007FFC28EE48D3 mov dword ptr [rsp+20h],0
6 00007FFC28EE46CC mov dword ptr [rsp+28h],0 7 00007FFC28EE48DB mov dword ptr [rsp+24h],0
7 00007FFC28EE46D4 mov rax,7FFC28F33D40h 8 00007FFC28EE48E3 mov rax,7FFC28F33D40h
8 00007FFC28EE46DE mov eax,dword ptr [rax] 9 00007FFC28EE48ED mov eax,dword ptr [rax]
9 00007FFC28EE46E0 test eax,eax 10 00007FFC28EE48EF test eax,eax
10 00007FFC28EE46E2 je 00007FFC28EE46E9 11 00007FFC28EE48F1 je 00007FFC28EE48F8
11 00007FFC28EE46E4 call 00007FFC88A139F0 12 00007FFC28EE48F3 call 00007FFC88A139F0
12 00007FFC28EE46E9 cmp qword ptr [rsp+80h],0 13 00007FFC28EE48F8 cmp qword ptr [rsp+70h],0
13 00007FFC28EE46F2 jl 00007FFC28EE4703 14 00007FFC28EE48FE jge 00007FFC28EE49E9
14 00007FFC28EE46F4 mov rax,qword ptr [rsp+80h]
15 00007FFC28EE46FC mov qword ptr [rsp+30h],rax
16 00007FFC28EE4701 jmp 00007FFC28EE4713
17 00007FFC28EE4703 mov rax,qword ptr [rsp+80h]
18 00007FFC28EE470B neg rax
19 00007FFC28EE470E mov qword ptr [rsp+30h],rax
20 00007FFC28EE4713 mov rax,qword ptr [rsp+30h]
21 00007FFC28EE4718 mov qword ptr [rsp+20h],rax
22
23 for (int byteIndex = 0; byteIndex < 8; byteIndex++)
24 00007FFC28EE471D mov dword ptr [rsp+28h],0
25 00007FFC28EE4725 jmp 00007FFC28EE4825
------------------------------------------------------------------------
26 { = 15 {
------------------------------------------------------------------------
27 buf[offset + byteIndex] = (byte)(valueToWrite % 256); <> 16 value = -value;
28 00007FFC28EE472A mov ecx,dword ptr [rsp+28h]
29 00007FFC28EE472E mov eax,dword ptr [rsp+90h] 17 00007FFC28EE4904 mov rax,qword ptr [rsp+70h]
30 00007FFC28EE4735 add eax,ecx 18 00007FFC28EE4909 neg rax
31 00007FFC28EE4737 mov dword ptr [rsp+38h],eax 19 00007FFC28EE490C mov qword ptr [rsp+70h],rax
20 for (int i = -1; ++i < 8; value >>= 8)
32 00007FFC28EE473B mov rax,qword ptr [rsp+20h] 21 00007FFC28EE4911 mov dword ptr [rsp+20h],0FFFFFFFFh
33 00007FFC28EE4740 cqo 22 00007FFC28EE4919 jmp 00007FFC28EE4972
23 buf[offset + i] = (byte)value;
34 00007FFC28EE4742 and rdx,0FFh 24 00007FFC28EE491B mov ecx,dword ptr [rsp+20h]
35 00007FFC28EE4749 add rax,rdx 25 00007FFC28EE491F mov eax,dword ptr [rsp+80h]
36 00007FFC28EE474C and rax,0FFh 26 00007FFC28EE4926 add eax,ecx
37 00007FFC28EE4752 sub rax,rdx 27 00007FFC28EE4928 movsxd rcx,eax
38 00007FFC28EE4755 mov qword ptr [rsp+40h],rax
39 00007FFC28EE475A movsxd rcx,dword ptr [rsp+38h]
40 00007FFC28EE475F mov rax,qword ptr [rsp+88h] 28 00007FFC28EE492B mov rax,qword ptr [rsp+78h]
41 00007FFC28EE4767 mov rax,qword ptr [rax+8] 29 00007FFC28EE4930 mov rax,qword ptr [rax+8]
42 00007FFC28EE476B mov qword ptr [rsp+48h],rcx 30 00007FFC28EE4934 mov qword ptr [rsp+28h],rcx
43 00007FFC28EE4770 cmp qword ptr [rsp+48h],rax 31 00007FFC28EE4939 cmp qword ptr [rsp+28h],rax
44 00007FFC28EE4775 jae 00007FFC28EE4783 32 00007FFC28EE493E jae 00007FFC28EE494C
45 00007FFC28EE4777 mov rax,qword ptr [rsp+48h] 33 00007FFC28EE4940 mov rax,qword ptr [rsp+28h]
46 00007FFC28EE477C mov qword ptr [rsp+48h],rax 34 00007FFC28EE4945 mov qword ptr [rsp+28h],rax
47 00007FFC28EE4781 jmp 00007FFC28EE4788 35 00007FFC28EE494A jmp 00007FFC28EE4951
48 00007FFC28EE4783 call 00007FFC88A16590 36 00007FFC28EE494C call 00007FFC88A16590
49 00007FFC28EE4788 mov rdx,qword ptr [rsp+88h] 37 00007FFC28EE4951 mov rdx,qword ptr [rsp+78h]
50 00007FFC28EE4790 mov rcx,qword ptr [rsp+48h] 38 00007FFC28EE4956 mov rcx,qword ptr [rsp+28h]
51 00007FFC28EE4795 movzx eax,byte ptr [rsp+40h] 39 00007FFC28EE495B movzx eax,byte ptr [rsp+70h]
52 00007FFC28EE479A mov byte ptr [rdx+rcx+10h],al 40 00007FFC28EE4960 mov byte ptr [rdx+rcx+10h],al
53 valueToWrite -= buf[offset + byteIndex]; 41 for (int i = -1; ++i < 8; value >>= 8)
54 00007FFC28EE479E mov ecx,dword ptr [rsp+28h] 42 00007FFC28EE4964 mov rax,qword ptr [rsp+70h]
43 00007FFC28EE4969 sar rax,8
55 00007FFC28EE47A2 mov eax,dword ptr [rsp+90h] 44 00007FFC28EE496D mov qword ptr [rsp+70h],rax
56 00007FFC28EE47A9 add eax,ecx 45 00007FFC28EE4972 mov eax,dword ptr [rsp+20h]
57 00007FFC28EE47AB movsxd rcx,eax 46 00007FFC28EE4976 inc eax
58 00007FFC28EE47AE mov rax,qword ptr [rsp+88h] 47 00007FFC28EE4978 mov dword ptr [rsp+30h],eax
59 00007FFC28EE47B6 mov rax,qword ptr [rax+8] 48 00007FFC28EE497C mov eax,dword ptr [rsp+30h]
60 00007FFC28EE47BA mov qword ptr [rsp+50h],rcx 49 00007FFC28EE4980 mov dword ptr [rsp+20h],eax
61 00007FFC28EE47BF cmp qword ptr [rsp+50h],rax 50 00007FFC28EE4984 cmp dword ptr [rsp+30h],8
62 00007FFC28EE47C4 jae 00007FFC28EE47D2 51 00007FFC28EE4989 jl 00007FFC28EE491B
52 buf[offset + 7] |= 0x80;
63 00007FFC28EE47C6 mov rax,qword ptr [rsp+50h] 53 00007FFC28EE498B mov eax,dword ptr [rsp+80h]
54 00007FFC28EE4992 add eax,7
64 00007FFC28EE47CB mov qword ptr [rsp+50h],rax 55 00007FFC28EE4995 movsxd rcx,eax
65 00007FFC28EE47D0 jmp 00007FFC28EE47D7
66 00007FFC28EE47D2 call 00007FFC88A16590
67 00007FFC28EE47D7 mov rcx,qword ptr [rsp+88h] 56 00007FFC28EE4998 mov rax,qword ptr [rsp+78h]
68 00007FFC28EE47DF mov rax,qword ptr [rsp+50h] 57 00007FFC28EE499D mov rax,qword ptr [rax+8]
69 00007FFC28EE47E4 movzx rcx,byte ptr [rcx+rax+10h] 58 00007FFC28EE49A1 mov qword ptr [rsp+38h],rcx
70 00007FFC28EE47EA mov rax,qword ptr [rsp+20h] 59 00007FFC28EE49A6 cmp qword ptr [rsp+38h],rax
71 00007FFC28EE47EF sub rax,rcx 60 00007FFC28EE49AB jae 00007FFC28EE49B9
72 00007FFC28EE47F2 mov qword ptr [rsp+20h],rax 61 00007FFC28EE49AD mov rax,qword ptr [rsp+38h]
73 valueToWrite /= 256;
74 00007FFC28EE47F7 mov rax,qword ptr [rsp+20h] 62 00007FFC28EE49B2 mov qword ptr [rsp+38h],rax
63 00007FFC28EE49B7 jmp 00007FFC28EE49BE
75 00007FFC28EE47FC cqo 64 00007FFC28EE49B9 call 00007FFC88A16590
76 00007FFC28EE47FE and rdx,0FFh 65 00007FFC28EE49BE mov rcx,qword ptr [rsp+78h]
77 valueToWrite /= 256;
78 00007FFC28EE4805 add rax,rdx
79 00007FFC28EE4808 sar rax,8 66 00007FFC28EE49C3 mov rax,qword ptr [rsp+38h]
80 00007FFC28EE480C mov qword ptr [rsp+58h],rax 67 00007FFC28EE49C8 lea rax,[rcx+rax+10h]
81 00007FFC28EE4811 mov rax,qword ptr [rsp+58h] 68 00007FFC28EE49CD mov qword ptr [rsp+40h],rax
82 00007FFC28EE4816 mov qword ptr [rsp+20h],rax 69 00007FFC28EE49D2 mov rax,qword ptr [rsp+40h]
83 for (int byteIndex = 0; byteIndex < 8; byteIndex++)
84 00007FFC28EE481B mov eax,dword ptr [rsp+28h] 70 00007FFC28EE49D7 movzx ecx,byte ptr [rax]
85 00007FFC28EE481F inc eax 71 00007FFC28EE49DA or ecx,80h
86 00007FFC28EE4821 mov dword ptr [rsp+28h],eax 72 00007FFC28EE49E0 mov rax,qword ptr [rsp+40h]
87 00007FFC28EE4825 cmp dword ptr [rsp+28h],8 73 00007FFC28EE49E5 mov byte ptr [rax],cl
88 00007FFC28EE482A jl 00007FFC28EE472A 74 00007FFC28EE49E7 jmp 00007FFC28EE4A65
------------------------------------------------------------------------
89 } = 75 }
------------------------------------------------------------------------
<> 76 else
90 77 {
91 if (value < 0) 78 for (int i = -1; ++i < 8; value >>= 8)
92 00007FFC28EE4830 cmp qword ptr [rsp+80h],0 79 00007FFC28EE49E9 mov dword ptr [rsp+24h],0FFFFFFFFh
93 00007FFC28EE4839 jge 00007FFC28EE489D 80 00007FFC28EE49F1 jmp 00007FFC28EE4A4A
94 buf[offset + 7] |= 0x80; 81 buf[offset + i] = (byte)value;
82 00007FFC28EE49F3 mov ecx,dword ptr [rsp+24h]
83 buf[offset + i] = (byte)value;
95 00007FFC28EE483B mov eax,dword ptr [rsp+90h] 84 00007FFC28EE49F7 mov eax,dword ptr [rsp+80h]
96 00007FFC28EE4842 add eax,7 85 00007FFC28EE49FE add eax,ecx
97 00007FFC28EE4845 movsxd rcx,eax 86 00007FFC28EE4A00 movsxd rcx,eax
98 00007FFC28EE4848 mov rax,qword ptr [rsp+88h] 87 00007FFC28EE4A03 mov rax,qword ptr [rsp+78h]
99 00007FFC28EE4850 mov rax,qword ptr [rax+8] 88 00007FFC28EE4A08 mov rax,qword ptr [rax+8]
100 00007FFC28EE4854 mov qword ptr [rsp+60h],rcx 89 00007FFC28EE4A0C mov qword ptr [rsp+48h],rcx
101 00007FFC28EE4859 cmp qword ptr [rsp+60h],rax 90 00007FFC28EE4A11 cmp qword ptr [rsp+48h],rax
102 00007FFC28EE485E jae 00007FFC28EE486C 91 00007FFC28EE4A16 jae 00007FFC28EE4A24
103 00007FFC28EE4860 mov rax,qword ptr [rsp+60h] 92 00007FFC28EE4A18 mov rax,qword ptr [rsp+48h]
104 00007FFC28EE4865 mov qword ptr [rsp+60h],rax 93 00007FFC28EE4A1D mov qword ptr [rsp+48h],rax
105 00007FFC28EE486A jmp 00007FFC28EE4871 94 00007FFC28EE4A22 jmp 00007FFC28EE4A29
106 00007FFC28EE486C call 00007FFC88A16590 95 00007FFC28EE4A24 call 00007FFC88A16590
107 00007FFC28EE4871 mov rcx,qword ptr [rsp+88h] 96 00007FFC28EE4A29 mov rdx,qword ptr [rsp+78h]
108 00007FFC28EE4879 mov rax,qword ptr [rsp+60h] 97 00007FFC28EE4A2E mov rcx,qword ptr [rsp+48h]
98 00007FFC28EE4A33 movzx eax,byte ptr [rsp+70h]
109 00007FFC28EE487E lea rax,[rcx+rax+10h] 99 00007FFC28EE4A38 mov byte ptr [rdx+rcx+10h],al
100 for (int i = -1; ++i < 8; value >>= 8)
110 00007FFC28EE4883 mov qword ptr [rsp+68h],rax 101 00007FFC28EE4A3C mov rax,qword ptr [rsp+70h]
102 00007FFC28EE4A41 sar rax,8
111 00007FFC28EE4888 mov rax,qword ptr [rsp+68h] 103 00007FFC28EE4A45 mov qword ptr [rsp+70h],rax
112 00007FFC28EE488D movzx ecx,byte ptr [rax] 104 00007FFC28EE4A4A mov eax,dword ptr [rsp+24h]
113 00007FFC28EE4890 or ecx,80h 105 00007FFC28EE4A4E inc eax
114 00007FFC28EE4896 mov rax,qword ptr [rsp+68h] 106 00007FFC28EE4A50 mov dword ptr [rsp+50h],eax
107 00007FFC28EE4A54 mov eax,dword ptr [rsp+50h]
115 00007FFC28EE489B mov byte ptr [rax],cl 108 00007FFC28EE4A58 mov dword ptr [rsp+24h],eax
109 00007FFC28EE4A5C cmp dword ptr [rsp+50h],8
110 00007FFC28EE4A61 jl 00007FFC28EE49F3
111 }
------------------------------------------------------------------------
116 } = 112 }
------------------------------------------------------------------------
117 00007FFC28EE489D jmp 00007FFC28EE489F <> 113 00007FFC28EE4A63 jmp 00007FFC28EE4A65
118 00007FFC28EE489F nop 114 00007FFC28EE4A65 nop
119 00007FFC28EE48A0 add rsp,78h 115 00007FFC28EE4A66 add rsp,68h
120 00007FFC28EE48A4 ret 116 00007FFC28EE4A6A ret
------------------------------------------------------------------------
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment