Created
July 22, 2014 15:18
-
-
Save jzebedee/d96d1f585508b8ec3660 to your computer and use it in GitHub Desktop.
old/new Write64 JIT
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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