-
-
Save Lusamine/84e3d5a5183abcf340538b9dac68eb06 to your computer and use it in GitHub Desktop.
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
unsigned __int8 __fastcall select_from_table(__int64 a1, unsigned int total_entries) | |
{ | |
__int64 v2; // x8 | |
__int64 v3; // x9 | |
unsigned __int64 v4; // x8 | |
unsigned __int64 v5; // x9 | |
unsigned __int64 v6; // x9 | |
__int64 s0; // x10 | |
__int64 s1; // x11 | |
__int64 v9; // x12 | |
int v10; // w8 | |
__int64 v11; // x10 | |
unsigned int rand; // w8 | |
if ( total_entries < 2 ) | |
return 0; | |
v2 = __clz(total_entries); | |
v3 = 31LL; | |
if ( ((0x7FFFFFFFu >> v2) & total_entries) != 0 ) | |
v3 = 32LL; | |
v4 = v3 - v2; | |
v5 = v4 >> 6; | |
if ( (v4 & 0x3F) != 0 ) | |
++v5; | |
if ( v5 > v4 ) | |
LODWORD(v6) = 0; | |
else | |
v6 = 0xFFFFFFFFFFFFFFFFLL >> -(v4 / v5); | |
s0 = *(a1 + 112); | |
s1 = *(a1 + 120); | |
do | |
{ | |
v9 = s0 ^ s1; | |
v10 = s0 + s1; | |
v11 = s0 ^ s1 ^ __ROR8__(s0, 40); | |
s1 = __ROR8__(v9, 27); | |
rand = v10 & v6; | |
s0 = v11 ^ (v9 << 16); | |
} | |
while ( rand >= total_entries ); | |
*(a1 + 112) = s0; | |
*(a1 + 120) = s1; | |
return rand; | |
} | |
------ | |
.text:00000071008273D4 ; unsigned __int8 __fastcall select_from_table(__int64 a1, unsigned int total_entries) | |
.text:00000071008273D4 select_from_table ; CODE XREF: sub_710078103C+88↑p | |
.text:00000071008273D4 ; sub_71007C9178+124↑p ... | |
.text:00000071008273D4 CMP W1, #2 | |
.text:00000071008273D8 B.CC loc_710082744C | |
.text:00000071008273DC CLZ W8, W1 | |
.text:00000071008273E0 MOV W9, #0x7FFFFFFF | |
.text:00000071008273E4 LSR W9, W9, W8 | |
.text:00000071008273E8 TST W9, W1 | |
.text:00000071008273EC MOV W9, #0x1F | |
.text:00000071008273F0 CINC X9, X9, NE | |
.text:00000071008273F4 SUB X8, X9, X8 | |
.text:00000071008273F8 LSR X9, X8, #6 | |
.text:00000071008273FC TST X8, #0x3F | |
.text:0000007100827400 CINC X9, X9, NE | |
.text:0000007100827404 CMP X9, X8 | |
.text:0000007100827408 B.HI loc_7100827458 | |
.text:000000710082740C UDIV X8, X8, X9 | |
.text:0000007100827410 MOV X9, #0xFFFFFFFFFFFFFFFF | |
.text:0000007100827414 NEG X8, X8 | |
.text:0000007100827418 LSR X9, X9, X8 | |
.text:000000710082741C | |
.text:000000710082741C loc_710082741C ; CODE XREF: select_from_table+88↓j | |
.text:000000710082741C LDP X10, X11, [X0,#0x70] | |
.text:0000007100827420 | |
.text:0000007100827420 loc_7100827420 ; CODE XREF: select_from_table+68↓j | |
.text:0000007100827420 EOR X12, X10, X11 | |
.text:0000007100827424 ADD X8, X10, X11 | |
.text:0000007100827428 EOR X10, X12, X10,ROR#40 | |
.text:000000710082742C EXTR X11, X12, X12, #0x1B | |
.text:0000007100827430 AND X8, X8, X9 | |
.text:0000007100827434 CMP W8, W1 | |
.text:0000007100827438 EOR X10, X10, X12,LSL#16 | |
.text:000000710082743C B.CS loc_7100827420 | |
.text:0000007100827440 STP X10, X11, [X0,#0x70] | |
.text:0000007100827444 MOV W0, W8 | |
.text:0000007100827448 RET | |
.text:000000710082744C ; --------------------------------------------------------------------------- | |
.text:000000710082744C | |
.text:000000710082744C loc_710082744C ; CODE XREF: select_from_table+4↑j | |
.text:000000710082744C MOV W8, WZR | |
.text:0000007100827450 MOV W0, W8 | |
.text:0000007100827454 RET | |
.text:0000007100827458 ; --------------------------------------------------------------------------- | |
.text:0000007100827458 | |
.text:0000007100827458 loc_7100827458 ; CODE XREF: select_from_table+34↑j | |
.text:0000007100827458 MOV X9, XZR | |
.text:000000710082745C B loc_710082741C | |
.text:000000710082745C ; End of function select_from_table |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment