-
-
Save anyfactor/5ad2fd078c4ad6a9e49783cf6aed33c8 to your computer and use it in GitHub Desktop.
Decompiled hello_word executable
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
/* This file was generated by the Hex-Rays decompiler version 8.2.0.221215. | |
Copyright (c) 2007-2021 Hex-Rays <info@hex-rays.com> | |
Detected compiler: Visual C++ | |
*/ | |
#include <windows.h> | |
#include <defs.h> | |
//------------------------------------------------------------------------- | |
// Function declarations | |
__int64 __fastcall sub_140001000(__int64 (**a1)(void)); | |
void sub_140001030(); | |
int __cdecl main(int argc, const char **argv, const char **envp); | |
__int64 __fastcall sub_1400010C0(__int64 (*a1)(void)); | |
__int64 __fastcall sub_1400010D0(_QWORD, _QWORD); // weak | |
__int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); // weak | |
__int64 __fastcall sub_1400010F0(void *Src, size_t Size); // idb | |
void __noreturn sub_140001100(void); // weak | |
__int64 __fastcall sub_140001110(unsigned __int64 a1, unsigned __int64 a2, __int64 a3, unsigned __int64 a4, __int64 a5); | |
unsigned __int64 sub_140001150(); | |
__int64 sub_140001160(); | |
unsigned __int64 sub_140001170(); | |
__int64 __fastcall sub_140001180(unsigned __int64 **a1, __int64 a2); | |
__int64 __fastcall sub_1400011E0(__int64 a1, __int64 *a2); | |
__int64 __fastcall sub_140001200(__int64 **a1, _QWORD *a2); | |
__int64 __fastcall sub_140001210(__int64 a1, __int64 *a2); | |
bool __fastcall sub_140001230(__int64 *a1, __int64 *a2); | |
bool __fastcall sub_140001240(__int64 *a1, unsigned int a2); | |
bool __fastcall sub_140001300(__int64 a1, unsigned int a2); | |
__int64 __fastcall sub_1400013C0(__int64 a1, unsigned int a2); | |
bool __fastcall sub_1400014C0(__int64 a1, __int128 *a2); | |
bool __fastcall sub_140001500(__int64 a1, __int128 *a2); | |
bool __fastcall sub_140001540(__int64 a1, __int128 *a2); | |
__int64 __fastcall sub_140001590(_BYTE **a1); | |
__int64 __fastcall sub_1400015B0(_QWORD **a1); | |
void sub_140001620(); | |
__int64 __fastcall sub_1400016C0(__int64 **a1); | |
void __noreturn sub_140001760(); | |
__int64 __fastcall sub_140001780(__int64 a1); | |
_BYTE *__fastcall sub_140001790(_QWORD *a1); | |
__int64 __fastcall sub_1400017D0(volatile signed __int64 *a1); | |
void __fastcall sub_1400017E0(_QWORD *a1); | |
__int64 __fastcall sub_1400017F0(__int64 a1); | |
void __fastcall sub_140001810(__int64 a1); | |
__int64 __fastcall sub_140001840(_QWORD *a1); | |
_BYTE *__fastcall sub_140001860(volatile signed __int64 **a1); | |
__int64 __fastcall sub_140001870(_QWORD *a1); | |
void __noreturn sub_140001930(); | |
void __fastcall sub_1400019F0(__int64 a1, char a2); | |
_BYTE *__fastcall sub_140001A30(_QWORD *a1); | |
__int64 __fastcall sub_140001A50(_QWORD *a1); | |
_BYTE *__fastcall sub_140001A80(__int64 a1); | |
__int64 __fastcall sub_140001AA0(__int64 a1); | |
void __fastcall sub_140001AD0(__int64 a1); | |
_QWORD *__fastcall sub_140001AE0(_QWORD *a1); | |
__int64 __fastcall sub_140001B00(__int64 a1); | |
_BYTE *__fastcall sub_140001BC0(_QWORD *a1); | |
_BYTE *__fastcall sub_140001BF0(__int64 a1); | |
__int64 __fastcall sub_140001C10(_QWORD *a1); | |
void __fastcall sub_140001CD0(unsigned __int64 a1, __int64 a2); | |
__int64 __fastcall sub_140001D30(__int64 a1, __int64 a2); | |
__int64 __fastcall sub_140001D50(__int64 a1); | |
_QWORD *__fastcall sub_140001E60(_QWORD *a1); | |
__int64 __fastcall sub_140001F40(unsigned int a1, _BYTE *a2, unsigned __int64 a3); | |
__int64 __fastcall sub_1400020C0(__int64 a1); | |
__int64 __fastcall sub_140002110(unsigned __int64 *a1, const __m128i *a2); | |
bool __fastcall sub_140002120(__int64 *a1, unsigned int a2); | |
bool __fastcall sub_1400021E0(__int64 **a1, unsigned int a2); | |
__int64 __fastcall sub_1400022A0(__int64 **a1, unsigned int a2); | |
__int64 __fastcall sub_1400022C0(__int64 *a1, unsigned int a2); | |
bool __fastcall sub_1400022E0(__int64 *a1, __int128 *a2); | |
bool __fastcall sub_140002330(__int64 *a1, __int128 *a2); | |
bool __fastcall sub_140002380(__int64 *a1, __int128 *a2); | |
bool __fastcall sub_1400023D0(__int64 *a1, __int128 *a2); | |
__int64 __fastcall sub_140002420(__int64 **a1, const void *a2, size_t a3); | |
bool __fastcall sub_140002480(__int64 *a1, unsigned __int8 *a2, unsigned __int64 a3); | |
__int64 __fastcall sub_140002490(__int64 a1, const void *a2, size_t a3); | |
bool __fastcall sub_1400024F0(__int64 **a1, __int64 a2); | |
__int64 __fastcall sub_140002500(_BYTE *Buf2, size_t Size, char *Buf1, unsigned __int64 a4); | |
__int64 __fastcall sub_140002D80(__int64 a1); | |
_BYTE *__fastcall sub_140002DF0(__int64 a1); | |
__int64 __fastcall sub_140002E50(__int64 a1, __int64 a2, __int64 a3); | |
__int64 __fastcall sub_140002E60(__int64 a1); | |
_BYTE *__fastcall sub_140002E70(__int64 *a1, unsigned int a2); | |
__int64 __fastcall sub_140002F90(__int64 *a1, __int64 a2, __int64 a3, __int64 a4); | |
__int64 __fastcall sub_140003020(unsigned __int64 *a1, __int64 a2); | |
__int64 __fastcall sub_1400030E0(__int64 *a1, __int64 a2); | |
unsigned __int64 __fastcall sub_1400031A0(__int64 a1); | |
__int64 __fastcall sub_1400032B0(__int64 a1, __int64 *a2); | |
__int64 __fastcall sub_1400032D0(_QWORD *a1, _QWORD *a2); | |
void __fastcall sub_140003340(unsigned __int64 *a1, __int64 a2); | |
void __fastcall sub_1400034D0(__int64 a1, __int64 a2, __int64 a3, __int64 a4, int a5, int a6, int a7, int a8, int a9, int a10, __int64 a11); | |
void __noreturn sub_140003AF0(); | |
void __noreturn sub_140003BB0(); | |
char __fastcall sub_140003C70(__int64 a1, _QWORD *a2); | |
void sub_140003CA0(); | |
__int64 __fastcall sub_140003DE0(__int64 a1); | |
__int64 __fastcall sub_140004050(__int64 a1, __int64 a2, __int64 a3); | |
__int64 __fastcall sub_140004570(__int64 a1); | |
__int64 __fastcall sub_140004820(unsigned __int64 *a1, __int64 *a2); | |
_QWORD *__fastcall sub_140004D10(_QWORD *a1, __int64 *a2, const void *a3, size_t a4); | |
_QWORD *__fastcall sub_140004D80(_QWORD *a1, __int64 *a2, __int64 a3, __int64 a4); | |
char sub_140004E80(); | |
__int64 __fastcall sub_140004E90(__int64 *a1, const void *a2, size_t a3); | |
__int64 sub_140004EF0(); | |
_QWORD *__fastcall sub_140004F00(_QWORD *a1, unsigned __int8 *a2, unsigned __int8 *a3, unsigned __int64 a4); | |
__int64 __fastcall sub_140005010(__int64 a1); | |
void __fastcall sub_1400050F0(__int64 **a1); | |
__int64 __fastcall __far sub_140005310(); // weak | |
__int64 sub_140005500(); | |
void __fastcall sub_140005710(__int128 *a1); | |
_QWORD *__fastcall sub_140005870(_QWORD *a1, unsigned __int8 *a2, __int64 a3, __int64 a4); | |
char **__fastcall sub_1400058D0(unsigned __int8 *a1, unsigned __int8 *a2, unsigned __int64 a3); | |
char **__fastcall sub_140005AB0(unsigned __int8 *a1, unsigned __int8 *a2, unsigned __int64 a3); | |
char **__fastcall sub_140005C90(__int64 *a1, __int64 a2, unsigned __int64 a3); | |
char **__fastcall sub_140005EE0(unsigned __int8 *a1, __int64 a2, unsigned __int64 a3); | |
void sub_140006220(); | |
void sub_140006350(); | |
__int64 __fastcall sub_140006480(__int64 a1, const void *a2, size_t a3); | |
bool __fastcall sub_1400064E0(__int64 a1, unsigned __int8 *a2, unsigned __int64 a3); | |
bool __fastcall sub_1400065D0(__int64 *a1, __int64 a2); | |
__int128 *__fastcall sub_1400066C0(__int128 *a1, unsigned __int16 *a2, __int64 a3); | |
__int64 sub_140006930(); | |
_BYTE *__fastcall sub_140006A10(__int64 a1); | |
bool __fastcall sub_140006FC0(__int64 *a1); | |
char __fastcall sub_1400070E0(__int64 a1, __int64 a2); | |
__int64 __fastcall sub_1400072F0(__int64 a1, __int64 a2); | |
bool __fastcall sub_140007760(unsigned __int8 *a1, unsigned __int64 a2); | |
_BYTE *__fastcall sub_1400078F0(unsigned __int8 *a1, unsigned __int64 a2, unsigned __int8 *a3, unsigned __int64 a4); | |
__int64 __fastcall sub_140007D50(_BYTE **a1); | |
__int64 __fastcall sub_140007FB0(__int64 *a1); | |
__int64 __fastcall sub_1400080A0(__int64 a1); | |
void sub_1400080D0(); | |
void __fastcall sub_1400081F0(char *a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5, __int64 a6, __int64 a7, __int64 a8, int a9); | |
__int64 __fastcall sub_140008990(__int64 a1, __int64 *a2, __int64 a3); | |
void __fastcall sub_1400089B0(__int64 a1, __int64 a2); | |
_BYTE *__fastcall sub_140008AE0(__int64 a1, __int64 *a2); | |
void __fastcall __noreturn sub_140008DE0(__int64 *a1); | |
__int64 __fastcall sub_140008DF0(__int64 *a1, __int64 a2, char a3); | |
volatile signed __int64 *sub_140009090(); | |
__int64 __fastcall sub_140009200(volatile signed __int64 *a1); | |
void *__fastcall sub_1400094B0(__int64 *a1, unsigned int a2); | |
char __fastcall sub_1400095B0(__int64 a1, unsigned __int64 a2, __int64 *a3); | |
void __fastcall sub_140009770(__int64 a1); | |
char *__fastcall sub_1400098F0(SIZE_T a1, unsigned __int64 a2); | |
BOOL __fastcall sub_140009980(void *a1, __int64 a2, unsigned __int64 a3); | |
char *__fastcall sub_1400099A0(void *Src, size_t Size, unsigned __int64 a3, SIZE_T a4); | |
void sub_140009A70(); | |
void sub_140009BE0(); | |
void __fastcall sub_140009D50(__int64 a1); | |
void __fastcall sub_14000A220(__int64 a1, __int64 a2, __int64 a3); | |
void __fastcall __noreturn sub_14000A5B0(__int64 a1); | |
__int64 __fastcall sub_14000A630(__int128 *a1); | |
__int64 __fastcall sub_14000A740(__int64 a1); | |
_QWORD *__fastcall sub_14000A7E0(__int64 *a1); | |
__int64 __fastcall sub_14000A830(__int64 a1); | |
void __fastcall sub_14000A840(__int64 *a1); | |
void __fastcall sub_14000A940(__int64 a1, __int64 a2, __int64 a3, __int64 a4, char a5); | |
void __fastcall __noreturn sub_14000AD70(__int64 a1, __int64 a2); | |
char __fastcall sub_14000AE50(__int64 *a1, __int64 a2, __int64 *a3, __int64 a4, int a5, int a6, int a7, int a8); | |
__int64 sub_14000B610(); | |
char __fastcall sub_14000B830(__int64 a1, __int64 a2); | |
HMODULE sub_14000B930(); | |
__int64 __fastcall sub_14000B990(__int64 *a1, void *a2, void *Buffer, unsigned __int64 a4, PLARGE_INTEGER a5, __int64 a6); | |
char **__fastcall sub_14000BB40(__int64 a1, int a2); | |
__int64 __fastcall sub_14000BF60(__int64 a1, unsigned __int8 *a2, unsigned __int64 a3); | |
void __fastcall sub_14000C440(_QWORD *a1, DWORD a2, unsigned __int8 *a3, unsigned __int64 a4, unsigned __int8 *a5); | |
int __fastcall sub_14000C780(_QWORD *a1, void *a2, __int64 a3, unsigned __int64 a4); | |
_QWORD *__fastcall sub_14000C9D0(_QWORD *a1, unsigned __int8 *a2, unsigned __int8 *a3, unsigned __int64 a4); | |
_QWORD *__fastcall sub_14000C9F0(__int64 a1, __int64 a2); | |
__int64 __fastcall sub_14000CA80(__int64 a1, __int64 a2); | |
_QWORD *sub_14000CB10(); | |
void __fastcall TlsCallback_0(__int64 a1, int a2); | |
char __fastcall sub_14000CE30(int a1); | |
void __fastcall sub_14000D3F0(__int64 a1, __int64 a2, __int64 a3); | |
__int64 __fastcall sub_14000D5D0(__int64 a1, __int64 a2); | |
__int64 sub_14000D620(); | |
__int64 __fastcall sub_14000D640(__int64 a1, unsigned int a2, __int64 a3, unsigned int a4); | |
void sub_14000D6A0(); | |
__int64 __fastcall sub_14000D720(__int64 a1, __int64 a2, unsigned int a3, __int64 a4); | |
void sub_14000D790(); | |
__int64 __fastcall sub_14000D810(__int64 a1, __int64 a2, unsigned int a3, __int64 a4); | |
void sub_14000D880(); | |
__int64 __fastcall Handler(struct _EXCEPTION_POINTERS *ExceptionInfo); | |
__int64 __fastcall sub_14000DAB0(__int64 a1); | |
void __noreturn sub_14000DCE0(); | |
void __noreturn sub_14000DD10(); | |
PRUNTIME_FUNCTION __fastcall sub_14000DD20(__int64 a1, ULONG64 a2); | |
unsigned __int64 __fastcall sub_14000DD50(__int64 a1, ULONG64 a2); | |
char __fastcall sub_14000DD80(_QWORD *a1, __int64 *a2); | |
int __fastcall sub_14000DE70(__int64 a1, __int64 a2, __int64 a3); | |
__int64 __fastcall sub_14000E3A0(__int64 a1, __int64 a2, __int64 a3); | |
void sub_14000E7D0(); | |
_QWORD *__fastcall sub_14000E850(_QWORD *a1, __int64 a2); | |
void __fastcall __noreturn sub_14000E8E0(__int64 a1, __int64 a2); | |
__int64 __fastcall sub_14000E960(__int64 a1); | |
void __noreturn sub_14000E9C0(); | |
__int64 __fastcall sub_14000EA10(unsigned __int8 **a1); | |
__int64 __fastcall sub_14000EED0(unsigned __int8 **a1, __int64 a2); | |
char __fastcall sub_14000EF30(__int64 a1, __int64 *a2); | |
char __fastcall sub_14000EF50(__int64 *a1, __int64 *a2); | |
__int64 __fastcall sub_14000EFA0(__int64 a1, __int64 *a2); | |
char *__fastcall sub_14000EFC0(unsigned __int64 a1, char *a2, unsigned __int64 a3, __int64 a4); | |
char __fastcall sub_14000F010(__int64 *a1, _QWORD *a2); | |
char __fastcall sub_14000F090(__int64 *a1, unsigned int a2); | |
bool __fastcall sub_14000F170(__int64 *a1, __int128 *a2); | |
char __fastcall sub_14000F1C0(_QWORD **a1, __int64 a2, unsigned __int64 a3); | |
void __fastcall sub_14000F1F0(_QWORD *a1, __int64 a2); | |
unsigned __int64 __fastcall sub_14000F5C0(__int64 a1, _BYTE *a2); | |
__int64 __fastcall sub_14000F5E0(__int64 *a1, __int64 *a2); | |
char __fastcall sub_14000F7F0(__int64 a1, __int64 *a2); | |
__int64 __fastcall sub_1400103E0(char **a1, __int64 *a2); | |
__int64 __fastcall sub_140010A80(__int64 a1, __int64 a2); | |
_QWORD *__fastcall sub_140010C40(_QWORD *a1, __int64 a2); | |
char __fastcall sub_140010D20(__int64 a1, __int64 *a2); | |
char __fastcall sub_140010DE0(__int64 a1, __int64 *a2); | |
unsigned __int64 __fastcall sub_140010EC0(_QWORD *a1); | |
void __fastcall sub_140010F20(__int64 a1, __int64 a2); | |
__int64 __fastcall sub_140011120(__int64 a1); | |
char __fastcall sub_140011180(__int64 *a1, __int64 a2); | |
char __fastcall sub_140011330(__int64 *a1, __int64 a2); | |
char __fastcall sub_1400114E0(__int64 *a1); | |
__int64 __fastcall sub_140011680(_QWORD *a1, unsigned int a2); | |
__int64 __fastcall sub_140011850(__int64 a1, unsigned __int64 a2); | |
__int64 __fastcall sub_140011940(__int64 a1); | |
char __fastcall sub_140011C40(__int64 a1); | |
__int64 __fastcall sub_140011E70(__int64 *a1); | |
__int64 __fastcall sub_140011F00(__int64 *a1); | |
__int64 __fastcall sub_140011F90(__int64 *a1, __int64 a2); | |
__int64 __fastcall sub_140012020(__int64 *a1); | |
__int64 __fastcall sub_1400122E0(__int64 *a1, __int64 a2); | |
__int64 __fastcall sub_140012370(__int64 a1, unsigned int a2); | |
char __fastcall sub_140012AD0(_QWORD *a1); | |
__int64 __fastcall sub_140012C00(__int64 a1); | |
char __fastcall sub_140013160(__int64 *a1); | |
__int64 __fastcall sub_1400136A0(__int64 *a1); | |
__int64 __fastcall sub_140013900(__int64 *a1); | |
__int64 __fastcall sub_140013AF0(__int64 a1, __int64 a2); | |
__int64 __fastcall sub_1400142A0(__int64 a1, char a2); | |
__int64 __fastcall sub_140014480(__int64 a1); | |
__int64 *__fastcall sub_140014800(__int64 *a1, __int64 a2, __int64 a3); | |
__int128 *__fastcall sub_1400154F0(__int128 *a1, __int64 a2, __int64 a3); | |
__int64 __fastcall sub_140015540(__int64 a1); | |
char __fastcall sub_140015550(_QWORD *a1, _QWORD *a2); | |
__int64 __fastcall sub_140015780(__int64 a1, _QWORD *a2); | |
char __fastcall sub_1400157A0(__int64 a1, _QWORD *a2); | |
__int64 __fastcall sub_140015820(unsigned __int64 *a1, __int64 a2); | |
__int64 __fastcall sub_140015880(__int64 **a1, unsigned int a2); | |
bool __fastcall sub_1400158A0(__int64 *a1, __int128 *a2); | |
__int64 __fastcall sub_1400158F0(__int64 **a1, const void *a2, size_t a3); | |
__int64 __fastcall sub_140015950(__int64 *a1, __int64 a2); | |
__int64 __fastcall sub_140015A10(__int64 *a1, __int64 a2, __int64 a3, __int64 a4); | |
void __noreturn sub_140015AA0(); | |
void __noreturn sub_140015AF0(); | |
__int64 __fastcall sub_140015B00(__int64 a1, const void *a2, size_t a3); | |
void *__fastcall sub_140015C70(__int64 *a1); | |
void __fastcall sub_140015E30(__int64 *a1, _QWORD *a2); | |
void __fastcall sub_140016030(__int64 a1, __int64 a2, __int64 a3); | |
_BYTE *__fastcall sub_1400161A0(__int64 *a1, unsigned int a2); | |
__int64 __fastcall sub_1400162C0(__int64 a1, unsigned __int64 a2); | |
__int64 __fastcall sub_140016340(__int64 a1, _QWORD *a2); | |
void __noreturn sub_140016390(); | |
unsigned __int64 __fastcall sub_1400163B0(unsigned __int8 *a1, unsigned __int64 a2, unsigned int a3); | |
char __fastcall sub_1400165E0(unsigned __int64 *a1, __int64 *a2); | |
__int64 __fastcall sub_140016680(unsigned __int16 *a1); | |
__int64 __fastcall sub_140016690(unsigned int *a1); | |
__int64 __fastcall sub_140016770(__int64 a1, __int64 a2, __int64 a3); | |
bool __fastcall sub_140016790(__int64 a1, __int64 *a2); | |
__int64 __fastcall sub_140016820(__int64 a1); | |
// __int64 __fastcall _except_get_jumpbuf_sp(_QWORD); weak | |
__int64 __fastcall sub_140016840(__int64 a1); | |
__int64 __fastcall sub_140016850(__int64 a1); | |
__int64 __fastcall sub_140016860(__int64 *a1, __int64 *a2); | |
char __fastcall sub_1400169D0(__int64 *a1, __int64 a2, unsigned __int64 a3); | |
_BYTE *__fastcall sub_140016B60(_BYTE *a1, __int64 a2, unsigned __int64 a3, __int64 a4, __int64 a5); | |
char __fastcall sub_140016D20(_BYTE *a1); | |
__int64 *__fastcall sub_140016D90(__int64 *a1, __int64 a2, __int64 a3); | |
void __fastcall sub_140016EE0(_BYTE *a1, __int64 a2, __int64 a3); | |
_BYTE *__fastcall sub_140017010(_BYTE *a1, __int64 a2, __int64 a3); | |
char __fastcall sub_140017030(__int64 a1); | |
char __fastcall sub_140017060(__int64 *a1, unsigned int a2); | |
bool __fastcall sub_140017120(__int64 a1, __int128 *a2); | |
char __fastcall sub_140017160(__int64 **a1, __int64 a2, unsigned __int64 a3); | |
char __fastcall sub_140017170(__int64 **a1, unsigned int a2); | |
bool __fastcall sub_140017230(__int64 *a1, __int128 *a2); | |
__int64 __fastcall sub_140017280(__int64 a1); | |
bool __fastcall sub_140017290(__int64 *a1, __int64 *a2); | |
bool __fastcall sub_1400172A0(__int64 a1, __int64 a2, __int64 *a3); | |
__int64 __fastcall sub_1400174B0(__int64 a1, char a2, _BYTE *a3, unsigned __int64 a4, __int64 a5, __int64 a6); | |
char __fastcall sub_140017830(__int64 a1, __int64 a2, unsigned int a3, __int64 a4, __int64 a5); | |
__int64 __fastcall sub_140017890(__int64 *a1, unsigned __int8 *a2, unsigned __int64 a3); | |
__int64 __fastcall sub_140017BE0(_QWORD *a1); | |
bool __fastcall sub_140017C00(__int64 *a1, __int128 *a2); | |
char __fastcall sub_140017C40(__int64 a1); | |
char __fastcall sub_140017C50(__int64 a1); | |
char __fastcall sub_140017C60(__int64 a1); | |
__int64 __fastcall sub_140017C70(__int64 a1, _QWORD *a2, __int64 a3, __int64 a4); | |
__int64 __fastcall sub_140017CA0(_QWORD *a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5); | |
__int64 __fastcall sub_140017D60(_QWORD *a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5, __int64 a6, __int64 a7); | |
__int64 __fastcall sub_140017E50(__int64 a1, _QWORD *a2); | |
__int64 __fastcall sub_140017E90(_QWORD *a1); | |
char __fastcall sub_140017EB0(char *a1, unsigned __int64 a2, __int64 *a3); | |
__int64 __fastcall sub_1400183F0(unsigned __int8 *a1, unsigned __int64 a2, __int64 *a3); | |
char __fastcall sub_140018410(unsigned int *a1, __int64 *a2); | |
__int64 __fastcall sub_140018820(unsigned int *a1, __int64 *a2); | |
__int64 __fastcall sub_140018910(unsigned __int64 a1, const __m128i *a2); | |
__int64 __fastcall sub_140018A00(unsigned __int8 a1, __int64 a2, unsigned __int64 a3); | |
__int64 __fastcall sub_140018B20(unsigned __int8 a1, __int64 a2, unsigned __int64 a3); | |
void __fastcall __noreturn sub_140018C60(__int64 a1, __int64 a2, __int64 a3); | |
void __fastcall __noreturn sub_140018CE0(__int64 a1, __int64 a2, __int64 a3); | |
void __fastcall __noreturn sub_140018D60(__int64 a1, __int64 a2, __int64 a3); | |
__int64 __fastcall sub_140018DE0(__int64 a1, __int64 a2, unsigned __int64 a3); | |
unsigned __int64 __fastcall sub_140018FF0(_BYTE *a1, unsigned __int64 a2); | |
__int64 __fastcall sub_1400194E0(__int64 a1, __int64 a2, __int64 a3, _BYTE *a4, unsigned __int64 a5); | |
void __fastcall __noreturn sub_140019A60(char *a1, unsigned __int64 a2, unsigned __int64 a3, unsigned __int64 a4, __int64 a5); | |
char __fastcall sub_140019F10(int a1, _BYTE *a2, __int64 a3, __int64 a4, unsigned __int64 a5, unsigned __int8 *a6, __int64 a7); | |
char __fastcall sub_14001A050(unsigned int a1); | |
char __fastcall sub_14001A180(__int64 a1, _QWORD *a2); | |
__int64 __fastcall sub_14001A240(_QWORD, _QWORD, _QWORD); // weak | |
__int64 __fastcall sub_14001A250(__int64 a1, unsigned __int8 *a2, unsigned __int64 a3); | |
__int64 __fastcall sub_14001A310(unsigned __int8 *a1, __int64 a2); | |
__int64 __fastcall sub_14001A3B0(unsigned __int8 *a1, __int64 a2); | |
__int64 __fastcall sub_14001A450(unsigned int *a1, __int64 a2); | |
__int64 __fastcall sub_14001A4F0(unsigned __int64 *a1, __int64 a2); | |
__int64 __fastcall sub_14001A590(unsigned __int64 *a1, __int64 a2); | |
__int64 __fastcall sub_14001A630(unsigned __int8 *a1, __int64 a2); | |
__int64 __fastcall sub_14001A7D0(unsigned __int64 *a1, __int64 a2); | |
__int64 __fastcall sub_14001AA00(unsigned __int8 *a1, __int64 a2); | |
__int64 __fastcall sub_14001AAA0(unsigned int *a1, __int64 a2); | |
__int64 __fastcall sub_14001ABE0(unsigned int *a1, __int64 a2); | |
__int64 __fastcall sub_14001AD00(unsigned __int64 *a1, __int64 a2); | |
__int64 __fastcall sub_14001AE40(unsigned __int8 **a1, __int64 a2); | |
__int64 __fastcall sub_14001AE50(_BYTE **a1, _QWORD *a2); | |
__int64 __fastcall sub_14001AF40(_QWORD *a1); | |
__int64 __fastcall sub_14001AF60(unsigned __int8 **a1, _QWORD *a2); | |
bool __fastcall sub_14001AF90(__int64 **a1, __int64 *a2); | |
__int64 __fastcall sub_14001AFA0(__int64 a1, __int64 *a2); | |
__int64 __fastcall sub_14001AFC0(unsigned __int8 ***a1, __int64 *a2); | |
char __fastcall sub_14001AFE0(__int64 a1, _QWORD *a2); | |
bool __fastcall sub_14001B0D0(unsigned int a1); | |
char __fastcall sub_14001B110(int a1); | |
// BOOL __stdcall ReleaseMutex(HANDLE hMutex); | |
// HANDLE __stdcall GetCurrentThread(); | |
// PRUNTIME_FUNCTION __stdcall RtlLookupFunctionEntry(ULONG64 ControlPc, PULONG64 ImageBase, PUNWIND_HISTORY_TABLE HistoryTable); | |
// DWORD __stdcall WaitForSingleObjectEx(HANDLE hHandle, DWORD dwMilliseconds, BOOL bAlertable); | |
// HMODULE __stdcall LoadLibraryA(LPCSTR lpLibFileName); | |
// HANDLE __stdcall CreateMutexA(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCSTR lpName); | |
_QWORD *__fastcall sub_14001B580(_QWORD *a1, char a2); | |
__int64 sub_14001B7FC(); | |
__int64 __fastcall UserMathErrorFunction(struct _exception *a1); | |
void sub_14001B8BC(); | |
void *sub_14001B8D0(); | |
void *sub_14001B8D8(); | |
void *sub_14001B908(); | |
void *sub_14001B910(); | |
void sub_14001B918(); | |
void sub_14001BB34(); | |
void __fastcall sub_14001BB70(); | |
void __cdecl j_j_free(void *Block); | |
// void *__cdecl memcpy(void *, const void *Src, size_t Size); | |
// void *__cdecl memset(void *, int Val, size_t Size); | |
// void *__cdecl memmove(void *, const void *Src, size_t Size); | |
// int __cdecl memcmp(const void *Buf1, const void *Buf2, size_t Size); | |
// void __stdcall __noreturn CxxThrowException(void *pExceptionObject, _ThrowInfo *pThrowInfo); | |
bool __fastcall sub_14001BE80(_QWORD *_RCX, __int64 a2, int _R8D, char a4); | |
void __fastcall __noreturn sub_14001BFB0(__int64 a1, __int64 a2, __int128 *a3, __int64 a4); | |
__int64 __fastcall sub_14001C010(unsigned __int64 *a1, __int64 a2, __int64 a3); | |
__int64 __fastcall sub_14001C0D0(__int64 *a1, __int64 a2, __int64 a3); | |
void __noreturn sub_14001C190(); | |
__int64 __fastcall sub_14001C1E0(__int64 a1, unsigned __int8 *a2, unsigned __int64 a3); | |
signed __int64 sub_14001C260(); | |
signed __int64 __fastcall sub_14001C2D0(__int64 a1); | |
bool sub_14001C340(); | |
__int64 __fastcall sub_14001C360(__int64 a1); | |
signed __int64 __fastcall sub_14001C3B0(volatile signed __int64 *a1, char a2, __int64 a3, __int64 a4, __int64 a5); | |
__int64 __fastcall sub_14001CA70(__int64 *a1, __int64 a2, __int64 a3); | |
void __noreturn sub_14001CB30(); | |
void __fastcall __noreturn sub_14001CB40(__int64 a1, __int64 a2, __int64 a3); | |
void __fastcall __noreturn sub_14001CBB0(__int64 a1, __int64 a2); | |
void sub_14001CBF0(); | |
void __fastcall __noreturn sub_14001CC50(__int64 a1, __int64 a2, __int64 a3); | |
void __fastcall __noreturn sub_14001CCA0(__int64 a1, __int64 a2); | |
void __fastcall __noreturn sub_14001CD00(__int64 a1, __int64 a2, __int64 a3); | |
void __noreturn sub_14001CD80(); | |
void __fastcall __noreturn sub_14001CDA0(char a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5, __int128 *a6, __int64 a7); | |
void __fastcall __noreturn sub_14001CF90(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5); | |
void __fastcall __noreturn sub_14001D030(__int64 a1, __int64 a2, __int64 a3); | |
void __fastcall __noreturn sub_14001D040(__int64 a1, __int64 a2, __int64 a3); | |
void __fastcall __noreturn sub_14001D050(__int64 a1, __int64 a2, __int64 a3); | |
void __fastcall __noreturn sub_14001D060(__int64 a1); | |
void __fastcall __noreturn sub_14001D0B0(char *a1, unsigned __int64 a2, unsigned __int64 a3, unsigned __int64 a4, __int64 a5); | |
//------------------------------------------------------------------------- | |
// Data declarations | |
__int64 qword_14000DCB0[6] = | |
{ | |
5216575750185551243i64, | |
5188146772209636491i64, | |
88514020639883i64, | |
-8842808756379581952i64, | |
8433552465957975241i64, | |
-3691825797471737595i64 | |
}; // weak | |
// extern DWORD (__stdcall *GetLastError)(); | |
// extern PVOID (__stdcall *AddVectoredExceptionHandler)(ULONG First, PVECTORED_EXCEPTION_HANDLER Handler); | |
// extern BOOL (__stdcall *SetThreadStackGuarantee)(PULONG StackSizeInBytes); | |
// extern void (__stdcall *AcquireSRWLockExclusive)(PSRWLOCK SRWLock); | |
// extern HANDLE (__stdcall *GetCurrentProcess)(); | |
// extern FARPROC (__stdcall *GetProcAddress)(HMODULE hModule, LPCSTR lpProcName); | |
// extern void (__stdcall *SetLastError)(DWORD dwErrCode); | |
// extern DWORD (__stdcall *GetCurrentDirectoryW)(DWORD nBufferLength, LPWSTR lpBuffer); | |
// extern DWORD (__stdcall *GetEnvironmentVariableW)(LPCWSTR lpName, LPWSTR lpBuffer, DWORD nSize); | |
// extern HANDLE (__stdcall *GetStdHandle)(DWORD nStdHandle); | |
// extern DWORD (__stdcall *GetCurrentProcessId)(); | |
// extern DWORD (__stdcall *WaitForSingleObject)(HANDLE hHandle, DWORD dwMilliseconds); | |
// extern BOOLEAN (__stdcall *TryAcquireSRWLockExclusive)(PSRWLOCK SRWLock); | |
// extern BOOL (__stdcall *QueryPerformanceCounter)(LARGE_INTEGER *lpPerformanceCount); | |
// extern LPVOID (__stdcall *HeapAlloc)(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes); | |
// extern HANDLE (__stdcall *GetProcessHeap)(); | |
// extern BOOL (__stdcall *HeapFree)(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem); | |
// extern LPVOID (__stdcall *HeapReAlloc)(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes); | |
// extern HMODULE (__stdcall *GetModuleHandleA)(LPCSTR lpModuleName); | |
// extern BOOL (__stdcall *GetConsoleMode)(HANDLE hConsoleHandle, LPDWORD lpMode); | |
// extern HMODULE (__stdcall *GetModuleHandleW)(LPCWSTR lpModuleName); | |
// extern DWORD (__stdcall *FormatMessageW)(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, va_list *Arguments); | |
// extern int (__stdcall *MultiByteToWideChar)(UINT CodePage, DWORD dwFlags, LPCCH lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar); | |
// extern BOOL (__stdcall *WriteConsoleW)(HANDLE hConsoleOutput, const void *lpBuffer, DWORD nNumberOfCharsToWrite, LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved); | |
// extern LPVOID (__stdcall *TlsGetValue)(DWORD dwTlsIndex); | |
// extern BOOL (__stdcall *TlsSetValue)(DWORD dwTlsIndex, LPVOID lpTlsValue); | |
// extern void (__stdcall *GetSystemTimeAsFileTime)(LPFILETIME lpSystemTimeAsFileTime); | |
// extern void (__stdcall *ReleaseSRWLockExclusive)(PSRWLOCK SRWLock); | |
// extern void (__stdcall *AcquireSRWLockShared)(PSRWLOCK SRWLock); | |
// extern BOOL (__stdcall *CloseHandle)(HANDLE hObject); | |
// extern void (__stdcall *InitializeSListHead)(PSLIST_HEADER ListHead); | |
// extern DWORD (__stdcall *GetCurrentThreadId)(); | |
// extern ULONG (__stdcall *RtlNtStatusToDosError)(NTSTATUS Status); | |
// extern NTSTATUS (__stdcall *NtWriteFile)(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, PLARGE_INTEGER ByteOffset, PULONG Key); | |
char *off_14001E3B0 = "Hello, world!\n"; // weak | |
unsigned __int8 byte_14001E3C0[8] = { 40u, 41u, 0u, 0u, 0u, 0u, 0u, 0u }; // weak | |
__int64 (__fastcall *off_14001E3C8)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_14001E3F8)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_14001E428)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_14001E458)() = &nullsub_2; // weak | |
char *off_14001E4D8 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_14001E4F0 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_14001E508 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_14001E520 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
void *off_14001E588 = &unk_14001E538; // weak | |
char *off_14001E5E0 = "encode_utf8: need bytes to encode U+, but the buffer has "; // weak | |
void *off_14001E610 = &unk_14001E538; // weak | |
__int64 (__fastcall *off_14001E650)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_14001E670)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_14001E6C0)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_14001E6E0)() = &nullsub_2; // weak | |
void *off_14001E7A0 = (void *)0x14001E753i64; // weak | |
__int64 (__fastcall *off_14001E858)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_14001E878)() = &nullsub_2; // weak | |
char *off_14001E898 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
void *off_14001E8D0 = (void *)0x14001E8B4i64; // weak | |
char *off_14001E978 = "initialization or cleanup bug"; // weak | |
char *off_14001E9B0 = "drop of the panic payload panicked"; // weak | |
_UNKNOWN unk_14001E9C0; // weak | |
_UNKNOWN unk_14001E9CB; // weak | |
void *off_14001EA30 = &unk_14001EA11; // weak | |
void *off_14001EAC8 = &unk_14001EA48; // weak | |
char *off_14001EB20 = "an irrecoverable error occurred while synchronizing threads"; // weak | |
char *off_14001EB68 = "failed to generate unique thread ID: bitspace exhausted"; // weak | |
void *off_14001EB78 = &unk_14001EA48; // weak | |
char *off_14001EBD8 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
_UNKNOWN unk_14001EC30; // weak | |
_UNKNOWN unk_14001EC43; // weak | |
_UNKNOWN unk_14001EC4E; // weak | |
_UNKNOWN unk_14001EC5B; // weak | |
_UNKNOWN unk_14001EC71; // weak | |
_UNKNOWN unk_14001EC7C; // weak | |
_UNKNOWN unk_14001EC91; // weak | |
_UNKNOWN unk_14001ECA7; // weak | |
_UNKNOWN unk_14001ECB7; // weak | |
_UNKNOWN unk_14001ECC5; // weak | |
_UNKNOWN unk_14001EE04; // weak | |
_UNKNOWN unk_14001EEB7; // weak | |
char *off_14001EF30 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_14001EFD8 = "failed printing to : "; // weak | |
void *off_14001F030 = (void *)0x14001F016i64; // weak | |
char *off_14001F070 = "advancing io slices beyond their length"; // weak | |
void *off_14001F080 = (void *)0x14001F016i64; // weak | |
void *off_14001F098 = (void *)0x14001F016i64; // weak | |
char *off_14001F0D0 = "failed to write whole buffer"; // weak | |
void *off_14001F1B8 = &unk_14001F1A0; // weak | |
char *off_14001F1E8 = "library\\std\\src\\path.rs"; // weak | |
char *off_14001F208 = "library\\std\\src\\path.rs"; // weak | |
char *off_14001F220 = "library\\std\\src\\path.rs"; // weak | |
char *off_14001F238 = "library\\std\\src\\path.rs"; // weak | |
char *off_14001F250 = "library\\std\\src\\path.rs"; // weak | |
char *off_14001F268 = "library\\std\\src\\path.rs"; // weak | |
char *off_14001F280 = "library\\std\\src\\path.rs"; // weak | |
char *off_14001F298 = "library\\std\\src\\path.rs"; // weak | |
char *off_14001F2B0 = "library\\std\\src\\path.rs"; // weak | |
char *off_14001F2C8 = "library\\std\\src\\path.rs"; // weak | |
char *off_14001F2E0 = "library\\std\\src\\path.rs"; // weak | |
char *off_14001F340 = "library\\std\\src\\sync\\once.rs"; // weak | |
__int64 (__fastcall *off_14001F358)() = &nullsub_2; // weak | |
char *off_14001F380 = "library\\std\\src\\sync\\once.rs"; // weak | |
__int64 (__fastcall *off_14001F398)() = &nullsub_2; // weak | |
char *off_14001F3C0 = "library\\std\\src\\sync\\once.rs"; // weak | |
void *off_14001F420 = (void *)0x14001F3FEi64; // weak | |
char *off_14001F450 = "stack backtrace:\n"; // weak | |
char *off_14001F580 = "library\\std\\src\\sys_common\\thread_info.rs"; // weak | |
char *off_14001F5D8 = "assertion failed: thread_info.is_none()"; // weak | |
char *off_14001F610 = "library\\std\\src\\sys_common\\wtf8.rs"; // weak | |
unsigned __int8 byte_14001F628[8] = { 239u, 191u, 189u, 0u, 0u, 0u, 0u, 0u }; // weak | |
char *off_14001F630 = "library\\std\\src\\sys_common\\wtf8.rs"; // weak | |
char *off_14001F670 = "memory allocation of bytes failed"; // weak | |
void *off_14001F6A8 = &unk_14001F690; // weak | |
char *off_14001F6D0 = "memory allocation of bytes failed"; // weak | |
char *off_14001F710 = "Rust panics must be rethrown"; // weak | |
char *off_14001F748 = "Rust cannot catch foreign exceptions"; // weak | |
void *off_14001F830 = &unk_14001F758; // weak | |
char *off_14001F868 = "thread '' panicked at '', "; // weak | |
char *off_14001F8F8 = "note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n"; // weak | |
void *off_14001F908 = &unk_14001F758; // weak | |
void *off_14001F920 = &unk_14001F758; // weak | |
__int64 (__fastcall *off_14001F9A0)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_14001FB38)() = &nullsub_2; // weak | |
char *off_14001FB98 = "library\\std\\src\\..\\..\\backtrace\\src\\symbolize\\mod.rs"; // weak | |
char *off_14001FBB8 = " "; // weak | |
_UNKNOWN unk_14001FBC8; // weak | |
char *off_14001FBD0 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_14001FBF8 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
_UNKNOWN unk_14001FC18; // weak | |
void *off_14001FC20 = (void *)0x14001F526i64; // weak | |
void *off_14001FC40 = &unk_14001FC30; // weak | |
void *off_14001FC58 = &unk_14001FC50; // weak | |
void *off_14001FC68 = (void *)0x14001E8C9i64; // weak | |
char *off_14001FCC0 = "library\\std\\src\\..\\..\\backtrace\\src\\dbghelp.rs"; // weak | |
char *off_14001FCD8 = "library\\std\\src\\..\\..\\backtrace\\src\\dbghelp.rs"; // weak | |
char *off_14001FD80 = "I/O error: operation failed to complete synchronously"; // weak | |
char *off_14001FDB8 = "advancing IoSlice beyond its length"; // weak | |
char *off_14001FDF0 = "library\\std\\src\\sys\\windows\\io.rs"; // weak | |
char *off_14001FE90 = "OS Error (FormatMessageW() returned invalid UTF-16)"; // weak | |
char *off_14001FED8 = "OS Error (FormatMessageW() returned invalid UTF-16)"; // weak | |
char *off_14001FF30 = "library\\std\\src\\sys\\windows\\path.rs"; // weak | |
char *off_14001FF48 = "library\\std\\src\\sys\\windows\\path.rs"; // weak | |
char *off_14001FF60 = "library\\std\\src\\sys\\windows\\path.rs"; // weak | |
char *off_140020020 = "Unexpected number of bytes for incomplete UTF-8 codepoint."; // weak | |
void *off_140020030 = &unk_14001FFC0; // weak | |
char *off_140020098 = "Windows stdio in console mode does not support writing non-UTF-8 byte sequences"; // weak | |
unsigned __int8 byte_1400200B0[256] = | |
{ | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
4u, | |
4u, | |
4u, | |
4u, | |
4u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u | |
}; // weak | |
void *off_1400201B0 = &unk_14001FFC0; // weak | |
void *off_1400201C8 = &unk_14001FFC0; // weak | |
void *off_1400201E0 = &unk_14001FFC0; // weak | |
void *off_1400201F8 = &unk_14001FFC0; // weak | |
void *off_140020210 = &unk_14001FFC0; // weak | |
char *off_140020250 = "Unexpected error in MultiByteToWideChar"; // weak | |
void *off_140020260 = &unk_14001FFC0; // weak | |
void *off_140020278 = &unk_14001FFC0; // weak | |
void *off_140020290 = &unk_14001FFC0; // weak | |
void *off_1400202A8 = &unk_14001FFC0; // weak | |
_UNKNOWN unk_140020308; // weak | |
char *off_140020338 = "Unable to create keyed event handle: error "; // weak | |
char *off_1400203B8 = "library\\std\\src\\sys\\windows\\mod.rs"; // weak | |
char *off_1400203D0 = "library\\std\\src\\sys\\windows\\mod.rs"; // weak | |
char *off_140020520 = "failed to reserve stack space for exception handling"; // weak | |
char *off_1400205E8 = "failed to install exception handler"; // weak | |
char *off_140020680 = "Once instance has previously been poisoned"; // weak | |
void *off_1400206D8 = &unk_140020698; // weak | |
void *off_140020728 = &unk_1400206F0; // weak | |
char *off_1400207E8 = "library\\std\\src\\..\\..\\backtrace\\src\\dbghelp.rs"; // weak | |
char *off_140020888 = "Rust panics cannot be copied"; // weak | |
void *off_140020898 = (void *)0x14002082Bi64; // weak | |
unsigned __int8 byte_1400208B0[8] = { 40u, 41u, 0u, 0u, 0u, 0u, 0u, 0u }; // weak | |
__int64 (__fastcall *off_1400208B8)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_1400208E8)() = &nullsub_2; // weak | |
_UNKNOWN unk_140020908; // weak | |
void *off_140020958 = &unk_140020908; // weak | |
char *off_1400209C0 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_1400209D8 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_1400209F0 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
__int64 (__fastcall *off_140020A08)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_140020A28)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_140020A78)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_140020A98)() = &nullsub_2; // weak | |
char *off_140020AB8 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_140020AD0 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_140020B58 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020B70 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020B88 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020BA0 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020BB8 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020BD0 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020BE8 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
unsigned __int8 byte_140020C00[8] = { 58u, 58u, 0u, 0u, 0u, 0u, 0u, 0u }; // weak | |
char *off_140020C08 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020C20 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020C40 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020C58 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020C70 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020C88 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020CA0 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020CC8 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020CE0 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020CF8 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020D28 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020D70 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\legacy.rs"; // weak | |
char *off_140020DF8 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
char *off_140020E10 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
char *off_140020E28 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
char *off_140020E40 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
char *off_140020E98 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
char *off_140020EC8 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
char *off_140020EF0 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
_UNKNOWN unk_140020F08; // weak | |
char *off_140020F30 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
char *off_140020F48 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
void *off_140020FD0 = &unk_140020F60; // weak | |
char *off_140021010 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
char *off_140021068 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
char *off_140021080 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
char *off_140021098 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
char *off_1400210B0 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
unsigned __int8 byte_1400210C8[25] = | |
{ | |
123u, | |
114u, | |
101u, | |
99u, | |
117u, | |
114u, | |
115u, | |
105u, | |
111u, | |
110u, | |
32u, | |
108u, | |
105u, | |
109u, | |
105u, | |
116u, | |
32u, | |
114u, | |
101u, | |
97u, | |
99u, | |
104u, | |
101u, | |
100u, | |
125u | |
}; // weak | |
char *off_1400210F8 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
char *off_140021160 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
unsigned __int8 byte_140021178[3] = { 32u, 61u, 32u }; // weak | |
unsigned __int8 byte_14002117B[3] = { 32u, 123u, 32u }; // weak | |
_UNKNOWN unk_14002117E; // weak | |
_UNKNOWN unk_140021180; // weak | |
_UNKNOWN unk_140021184; // weak | |
_UNKNOWN unk_140021189; // weak | |
char *off_140021190 = "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\rustc-demangle-0.1.21\\src\\v0.rs"; // weak | |
_BYTE byte_1400211A8[6] = { 46, 108, 108, 118, 109, 46 }; // weak | |
void *off_140021218 = &unk_1400211AE; // weak | |
void *off_140021230 = &unk_1400211AE; // weak | |
void *off_140021248 = &unk_140020908; // weak | |
void *off_140021290 = &unk_1400211AE; // weak | |
_QWORD qword_1400212D0[26] = | |
{ | |
2i64, | |
4i64, | |
4i64, | |
3i64, | |
3i64, | |
3i64, | |
4i64, | |
2i64, | |
5i64, | |
5i64, | |
4i64, | |
3i64, | |
3i64, | |
4i64, | |
4i64, | |
1i64, | |
4i64, | |
4i64, | |
3i64, | |
3i64, | |
2i64, | |
3i64, | |
4i64, | |
3i64, | |
3i64, | |
1i64 | |
}; // weak | |
void *off_1400213A0 = (void *)0x140021059i64; // weak | |
__int64 (__fastcall *off_140021470)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_1400214A0)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_1400214C0)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_140021510)() = &nullsub_2; // weak | |
char *off_140021560 = "capacity overflow"; // weak | |
void *off_140021570 = &unk_140021530; // weak | |
void *off_1400215D8 = &unk_140021588; // weak | |
char *off_140021678 = "library\\alloc\\src\\sync.rs"; // weak | |
_UNKNOWN unk_140021690; // weak | |
__int64 (__fastcall *off_140021698)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_1400216B8)() = &nullsub_2; // weak | |
__int128 xmmword_1400216E0 = 49087i64; // weak | |
__int128 xmmword_1400216F0 = 0x10000000000000001i64; // weak | |
__int128 xmmword_140021700 = 0x1010101010101010101010101010101i64; // weak | |
__int128 xmmword_140021710 = 0xFFFD05E2FFFD141FFFFD315EFFFD48C6i64; // weak | |
__int128 xmmword_140021720 = 0x80000000800000008000000080000000i64; // weak | |
__int128 xmmword_140021730 = 0x800005E280000C1F8000000E80000006i64; // weak | |
char *off_1400217B0 = "from_str_radix_int: must lie in the range `[2, 36]` - found "; // weak | |
char *off_1400217E0 = "library\\core\\src\\num\\mod.rs"; // weak | |
_UNKNOWN unk_1400217F8; // weak | |
void *off_140021800 = &unk_1400217F9; // weak | |
char *off_140021820 = "from_str_radix_int: must lie in the range `[2, 36]` - found "; // weak | |
_UNKNOWN unk_140021831; // weak | |
char *off_140021838 = "from_str_radix_int: must lie in the range `[2, 36]` - found "; // weak | |
_UNKNOWN unk_140021868; // weak | |
void *off_140021878 = &unk_140021874; // weak | |
__int64 (__fastcall *off_140021898)() = &nullsub_2; // weak | |
char *off_140021928 = "index out of bounds: the len is but the index is "; // weak | |
void *off_1400219B8 = (void *)0x140021979i64; // weak | |
void *off_140021A00 = (void *)0x140021979i64; // weak | |
_UNKNOWN unk_140021A40; // weak | |
char *off_140021A48 = "from_str_radix_int: must lie in the range `[2, 36]` - found "; // weak | |
__int64 (__fastcall *off_140021A68)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_140021AB0)() = &nullsub_2; // weak | |
void *off_140021AF0 = (void *)0x140021AD1i64; // weak | |
char a0x000102030405[203] = "0x00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899"; // weak | |
__int64 (__fastcall *off_140021BD8)() = &nullsub_2; // weak | |
char *off_140021C28 = "library\\core\\src\\fmt\\mod.rs"; // weak | |
char *off_140021C40 = "library\\core\\src\\fmt\\mod.rs"; // weak | |
void *off_140021C78 = &unk_140021C58; // weak | |
void *off_140021C90 = &unk_140021C58; // weak | |
void *off_140021CA8 = &unk_140021C58; // weak | |
char *off_140021CF8 = "range start index out of range for slice of length "; // weak | |
void *off_140021D28 = &unk_140021D18; // weak | |
char *off_140021D70 = "slice index starts at but ends at "; // weak | |
unsigned __int8 byte_140021D90[256] = | |
{ | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
2u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
3u, | |
4u, | |
4u, | |
4u, | |
4u, | |
4u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u, | |
0u | |
}; // weak | |
char *off_140021EC0 = "attempted to index str up to maximum usize"; // weak | |
char *off_140021EF0 = "library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_140021F08 = "library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_140021F20 = "library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_140021F38 = "library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_140021F50 = "library\\core\\src\\str\\pattern.rs"; // weak | |
char *off_140021F68 = "library\\core\\src\\str\\pattern.rs"; // weak | |
void *off_140021FA8 = (void *)0x140021F85i64; // weak | |
char *off_140022000 = "begin <= end ( <= ) when slicing `"; // weak | |
void *off_140022078 = (void *)0x140021F85i64; // weak | |
char *off_1400220E8 = "library\\core\\src\\str\\mod.rs"; // weak | |
char *off_140022128 = "library\\core\\src\\unicode\\printable.rs"; // weak | |
char *off_140022140 = "library\\core\\src\\unicode\\printable.rs"; // weak | |
_BYTE byte_140022158[80] = | |
{ | |
0, | |
1, | |
3, | |
5, | |
5, | |
6, | |
6, | |
2, | |
7, | |
6, | |
8, | |
7, | |
9, | |
17, | |
10, | |
28, | |
11, | |
25, | |
12, | |
26, | |
13, | |
16, | |
14, | |
12, | |
15, | |
4, | |
16, | |
3, | |
18, | |
18, | |
19, | |
9, | |
22, | |
1, | |
23, | |
4, | |
24, | |
1, | |
25, | |
3, | |
26, | |
7, | |
27, | |
1, | |
28, | |
2, | |
31, | |
22, | |
32, | |
3, | |
43, | |
3, | |
45, | |
11, | |
46, | |
1, | |
48, | |
3, | |
49, | |
2, | |
50, | |
1, | |
-89, | |
2, | |
-87, | |
2, | |
-86, | |
4, | |
-85, | |
8, | |
-6, | |
2, | |
-5, | |
5, | |
-3, | |
2, | |
-2, | |
3, | |
-1, | |
9 | |
}; // weak | |
_UNKNOWN unk_1400221A8; // weak | |
unsigned __int8 byte_1400222C7[303] = | |
{ | |
0u, | |
32u, | |
95u, | |
34u, | |
130u, | |
223u, | |
4u, | |
130u, | |
68u, | |
8u, | |
27u, | |
4u, | |
6u, | |
17u, | |
129u, | |
172u, | |
14u, | |
128u, | |
171u, | |
5u, | |
31u, | |
9u, | |
129u, | |
27u, | |
3u, | |
25u, | |
8u, | |
1u, | |
4u, | |
47u, | |
4u, | |
52u, | |
4u, | |
7u, | |
3u, | |
1u, | |
7u, | |
6u, | |
7u, | |
17u, | |
10u, | |
80u, | |
15u, | |
18u, | |
7u, | |
85u, | |
7u, | |
3u, | |
4u, | |
28u, | |
10u, | |
9u, | |
3u, | |
8u, | |
3u, | |
7u, | |
3u, | |
2u, | |
3u, | |
3u, | |
3u, | |
12u, | |
4u, | |
5u, | |
3u, | |
11u, | |
6u, | |
1u, | |
14u, | |
21u, | |
5u, | |
78u, | |
7u, | |
27u, | |
7u, | |
87u, | |
7u, | |
2u, | |
6u, | |
23u, | |
12u, | |
80u, | |
4u, | |
67u, | |
3u, | |
45u, | |
3u, | |
1u, | |
4u, | |
17u, | |
6u, | |
15u, | |
12u, | |
58u, | |
4u, | |
29u, | |
37u, | |
95u, | |
32u, | |
109u, | |
4u, | |
106u, | |
37u, | |
128u, | |
200u, | |
5u, | |
130u, | |
176u, | |
3u, | |
26u, | |
6u, | |
130u, | |
253u, | |
3u, | |
89u, | |
7u, | |
22u, | |
9u, | |
24u, | |
9u, | |
20u, | |
12u, | |
20u, | |
12u, | |
106u, | |
6u, | |
10u, | |
6u, | |
26u, | |
6u, | |
89u, | |
7u, | |
43u, | |
5u, | |
70u, | |
10u, | |
44u, | |
4u, | |
12u, | |
4u, | |
1u, | |
3u, | |
49u, | |
11u, | |
44u, | |
4u, | |
26u, | |
6u, | |
11u, | |
3u, | |
128u, | |
172u, | |
6u, | |
10u, | |
6u, | |
47u, | |
49u, | |
77u, | |
3u, | |
128u, | |
164u, | |
8u, | |
60u, | |
3u, | |
15u, | |
3u, | |
60u, | |
7u, | |
56u, | |
8u, | |
43u, | |
5u, | |
130u, | |
255u, | |
17u, | |
24u, | |
8u, | |
47u, | |
17u, | |
45u, | |
3u, | |
33u, | |
15u, | |
33u, | |
15u, | |
128u, | |
140u, | |
4u, | |
130u, | |
151u, | |
25u, | |
11u, | |
21u, | |
136u, | |
148u, | |
5u, | |
47u, | |
5u, | |
59u, | |
7u, | |
2u, | |
14u, | |
24u, | |
9u, | |
128u, | |
190u, | |
34u, | |
116u, | |
12u, | |
128u, | |
214u, | |
26u, | |
12u, | |
5u, | |
128u, | |
255u, | |
5u, | |
128u, | |
223u, | |
12u, | |
242u, | |
157u, | |
3u, | |
55u, | |
9u, | |
129u, | |
92u, | |
20u, | |
128u, | |
184u, | |
8u, | |
128u, | |
203u, | |
5u, | |
10u, | |
24u, | |
59u, | |
3u, | |
10u, | |
6u, | |
56u, | |
8u, | |
70u, | |
8u, | |
12u, | |
6u, | |
116u, | |
11u, | |
30u, | |
3u, | |
90u, | |
4u, | |
89u, | |
9u, | |
128u, | |
131u, | |
24u, | |
28u, | |
10u, | |
22u, | |
9u, | |
76u, | |
4u, | |
128u, | |
138u, | |
6u, | |
171u, | |
164u, | |
12u, | |
23u, | |
4u, | |
49u, | |
161u, | |
4u, | |
129u, | |
218u, | |
38u, | |
7u, | |
12u, | |
5u, | |
5u, | |
128u, | |
166u, | |
16u, | |
129u, | |
245u, | |
7u, | |
1u, | |
32u, | |
42u, | |
6u, | |
76u, | |
4u, | |
128u, | |
141u, | |
4u, | |
128u, | |
190u, | |
3u, | |
27u, | |
3u, | |
15u, | |
13u | |
}; // weak | |
_BYTE byte_1400223F6[88] = | |
{ | |
0, | |
6, | |
1, | |
1, | |
3, | |
1, | |
4, | |
2, | |
5, | |
7, | |
7, | |
2, | |
8, | |
8, | |
9, | |
2, | |
10, | |
5, | |
11, | |
2, | |
14, | |
4, | |
16, | |
1, | |
17, | |
2, | |
18, | |
5, | |
19, | |
17, | |
20, | |
1, | |
21, | |
2, | |
23, | |
2, | |
25, | |
13, | |
28, | |
5, | |
29, | |
8, | |
31, | |
1, | |
36, | |
1, | |
106, | |
4, | |
107, | |
2, | |
-81, | |
3, | |
-79, | |
2, | |
-68, | |
2, | |
-49, | |
2, | |
-47, | |
2, | |
-44, | |
12, | |
-43, | |
9, | |
-42, | |
2, | |
-41, | |
2, | |
-38, | |
1, | |
-32, | |
5, | |
-31, | |
2, | |
-25, | |
4, | |
-24, | |
2, | |
-18, | |
32, | |
-16, | |
4, | |
-8, | |
2, | |
-6, | |
3, | |
-5, | |
1 | |
}; // weak | |
_UNKNOWN unk_14002244E; // weak | |
unsigned __int8 byte_140022512[450] = | |
{ | |
94u, | |
34u, | |
123u, | |
5u, | |
3u, | |
4u, | |
45u, | |
3u, | |
102u, | |
3u, | |
1u, | |
47u, | |
46u, | |
128u, | |
130u, | |
29u, | |
3u, | |
49u, | |
15u, | |
28u, | |
4u, | |
36u, | |
9u, | |
30u, | |
5u, | |
43u, | |
5u, | |
68u, | |
4u, | |
14u, | |
42u, | |
128u, | |
170u, | |
6u, | |
36u, | |
4u, | |
36u, | |
4u, | |
40u, | |
8u, | |
52u, | |
11u, | |
78u, | |
67u, | |
129u, | |
55u, | |
9u, | |
22u, | |
10u, | |
8u, | |
24u, | |
59u, | |
69u, | |
57u, | |
3u, | |
99u, | |
8u, | |
9u, | |
48u, | |
22u, | |
5u, | |
33u, | |
3u, | |
27u, | |
5u, | |
1u, | |
64u, | |
56u, | |
4u, | |
75u, | |
5u, | |
47u, | |
4u, | |
10u, | |
7u, | |
9u, | |
7u, | |
64u, | |
32u, | |
39u, | |
4u, | |
12u, | |
9u, | |
54u, | |
3u, | |
58u, | |
5u, | |
26u, | |
7u, | |
4u, | |
12u, | |
7u, | |
80u, | |
73u, | |
55u, | |
51u, | |
13u, | |
51u, | |
7u, | |
46u, | |
8u, | |
10u, | |
129u, | |
38u, | |
82u, | |
75u, | |
43u, | |
8u, | |
42u, | |
22u, | |
26u, | |
38u, | |
28u, | |
20u, | |
23u, | |
9u, | |
78u, | |
4u, | |
36u, | |
9u, | |
68u, | |
13u, | |
25u, | |
7u, | |
10u, | |
6u, | |
72u, | |
8u, | |
39u, | |
9u, | |
117u, | |
11u, | |
66u, | |
62u, | |
42u, | |
6u, | |
59u, | |
5u, | |
10u, | |
6u, | |
81u, | |
6u, | |
1u, | |
5u, | |
16u, | |
3u, | |
5u, | |
128u, | |
139u, | |
98u, | |
30u, | |
72u, | |
8u, | |
10u, | |
128u, | |
166u, | |
94u, | |
34u, | |
69u, | |
11u, | |
10u, | |
6u, | |
13u, | |
19u, | |
58u, | |
6u, | |
10u, | |
54u, | |
44u, | |
4u, | |
23u, | |
128u, | |
185u, | |
60u, | |
100u, | |
83u, | |
12u, | |
72u, | |
9u, | |
10u, | |
70u, | |
69u, | |
27u, | |
72u, | |
8u, | |
83u, | |
13u, | |
73u, | |
7u, | |
10u, | |
128u, | |
246u, | |
70u, | |
10u, | |
29u, | |
3u, | |
71u, | |
73u, | |
55u, | |
3u, | |
14u, | |
8u, | |
10u, | |
6u, | |
57u, | |
7u, | |
10u, | |
129u, | |
54u, | |
25u, | |
7u, | |
59u, | |
3u, | |
28u, | |
86u, | |
1u, | |
15u, | |
50u, | |
13u, | |
131u, | |
155u, | |
102u, | |
117u, | |
11u, | |
128u, | |
196u, | |
138u, | |
76u, | |
99u, | |
13u, | |
132u, | |
48u, | |
16u, | |
22u, | |
143u, | |
170u, | |
130u, | |
71u, | |
161u, | |
185u, | |
130u, | |
57u, | |
7u, | |
42u, | |
4u, | |
92u, | |
6u, | |
38u, | |
10u, | |
70u, | |
10u, | |
40u, | |
5u, | |
19u, | |
130u, | |
176u, | |
91u, | |
101u, | |
75u, | |
4u, | |
57u, | |
7u, | |
17u, | |
64u, | |
5u, | |
11u, | |
2u, | |
14u, | |
151u, | |
248u, | |
8u, | |
132u, | |
214u, | |
42u, | |
9u, | |
162u, | |
231u, | |
129u, | |
51u, | |
15u, | |
1u, | |
29u, | |
6u, | |
14u, | |
4u, | |
8u, | |
129u, | |
140u, | |
137u, | |
4u, | |
107u, | |
5u, | |
13u, | |
3u, | |
9u, | |
7u, | |
16u, | |
146u, | |
96u, | |
71u, | |
9u, | |
116u, | |
60u, | |
128u, | |
246u, | |
10u, | |
115u, | |
8u, | |
112u, | |
21u, | |
70u, | |
122u, | |
20u, | |
12u, | |
20u, | |
12u, | |
87u, | |
9u, | |
25u, | |
128u, | |
135u, | |
129u, | |
71u, | |
3u, | |
133u, | |
66u, | |
15u, | |
21u, | |
132u, | |
80u, | |
31u, | |
6u, | |
6u, | |
128u, | |
213u, | |
43u, | |
5u, | |
62u, | |
33u, | |
1u, | |
112u, | |
45u, | |
3u, | |
26u, | |
4u, | |
2u, | |
129u, | |
64u, | |
31u, | |
17u, | |
58u, | |
5u, | |
1u, | |
129u, | |
208u, | |
42u, | |
130u, | |
230u, | |
128u, | |
247u, | |
41u, | |
76u, | |
4u, | |
10u, | |
4u, | |
2u, | |
131u, | |
17u, | |
68u, | |
76u, | |
61u, | |
128u, | |
194u, | |
60u, | |
6u, | |
1u, | |
4u, | |
85u, | |
5u, | |
27u, | |
52u, | |
2u, | |
129u, | |
14u, | |
44u, | |
4u, | |
100u, | |
12u, | |
86u, | |
10u, | |
128u, | |
174u, | |
56u, | |
29u, | |
13u, | |
44u, | |
4u, | |
9u, | |
7u, | |
2u, | |
14u, | |
6u, | |
128u, | |
154u, | |
131u, | |
216u, | |
4u, | |
17u, | |
3u, | |
13u, | |
3u, | |
119u, | |
4u, | |
95u, | |
6u, | |
12u, | |
4u, | |
1u, | |
15u, | |
12u, | |
4u, | |
56u, | |
8u, | |
10u, | |
6u, | |
40u, | |
8u, | |
34u, | |
78u, | |
129u, | |
84u, | |
12u, | |
29u, | |
3u, | |
9u, | |
7u, | |
54u, | |
8u, | |
14u, | |
4u, | |
9u, | |
7u, | |
9u, | |
7u, | |
128u, | |
203u, | |
37u, | |
10u, | |
132u, | |
6u | |
}; // weak | |
__int64 (__fastcall *off_140022700)() = &nullsub_2; // weak | |
_UNKNOWN unk_140022720; // weak | |
__int64 (__fastcall *off_140022740)() = &nullsub_2; // weak | |
__int64 (__fastcall *off_1400227B0)() = &nullsub_2; // weak | |
char *off_1400227D0 = "library\\core\\src\\unicode\\unicode_data.rs"; // weak | |
char *off_1400227E8 = "library\\core\\src\\unicode\\unicode_data.rs"; // weak | |
unsigned int dword_140022800[33] = | |
{ | |
768u, | |
2098307u, | |
6292881u, | |
10490717u, | |
522196754u, | |
526393356u, | |
731917551u, | |
740306986u, | |
752920175u, | |
761309186u, | |
778107678u, | |
908131840u, | |
912326558u, | |
920715773u, | |
924912129u, | |
937495844u, | |
962662059u, | |
966858799u, | |
1214323760u, | |
1285627635u, | |
1348547648u, | |
1369533168u, | |
1377922895u, | |
1386331293u, | |
1398918912u, | |
1403113829u, | |
1411504640u, | |
1440866304u, | |
1466032814u, | |
1495393516u, | |
1503783120u, | |
1508769824u, | |
1518273008u | |
}; // weak | |
unsigned __int8 byte_140022884[727] = | |
{ | |
0u, | |
112u, | |
0u, | |
7u, | |
0u, | |
45u, | |
1u, | |
1u, | |
1u, | |
2u, | |
1u, | |
2u, | |
1u, | |
1u, | |
72u, | |
11u, | |
48u, | |
21u, | |
16u, | |
1u, | |
101u, | |
7u, | |
2u, | |
6u, | |
2u, | |
2u, | |
1u, | |
4u, | |
35u, | |
1u, | |
30u, | |
27u, | |
91u, | |
11u, | |
58u, | |
9u, | |
9u, | |
1u, | |
24u, | |
4u, | |
1u, | |
9u, | |
1u, | |
3u, | |
1u, | |
5u, | |
43u, | |
3u, | |
60u, | |
8u, | |
42u, | |
24u, | |
1u, | |
32u, | |
55u, | |
1u, | |
1u, | |
1u, | |
4u, | |
8u, | |
4u, | |
1u, | |
3u, | |
7u, | |
10u, | |
2u, | |
29u, | |
1u, | |
58u, | |
1u, | |
1u, | |
1u, | |
2u, | |
4u, | |
8u, | |
1u, | |
9u, | |
1u, | |
10u, | |
2u, | |
26u, | |
1u, | |
2u, | |
2u, | |
57u, | |
1u, | |
4u, | |
2u, | |
4u, | |
2u, | |
2u, | |
3u, | |
3u, | |
1u, | |
30u, | |
2u, | |
3u, | |
1u, | |
11u, | |
2u, | |
57u, | |
1u, | |
4u, | |
5u, | |
1u, | |
2u, | |
4u, | |
1u, | |
20u, | |
2u, | |
22u, | |
6u, | |
1u, | |
1u, | |
58u, | |
1u, | |
1u, | |
2u, | |
1u, | |
4u, | |
8u, | |
1u, | |
7u, | |
3u, | |
10u, | |
2u, | |
30u, | |
1u, | |
59u, | |
1u, | |
1u, | |
1u, | |
12u, | |
1u, | |
9u, | |
1u, | |
40u, | |
1u, | |
3u, | |
1u, | |
55u, | |
1u, | |
1u, | |
3u, | |
5u, | |
3u, | |
1u, | |
4u, | |
7u, | |
2u, | |
11u, | |
2u, | |
29u, | |
1u, | |
58u, | |
1u, | |
2u, | |
1u, | |
2u, | |
1u, | |
3u, | |
1u, | |
5u, | |
2u, | |
7u, | |
2u, | |
11u, | |
2u, | |
28u, | |
2u, | |
57u, | |
2u, | |
1u, | |
1u, | |
2u, | |
4u, | |
8u, | |
1u, | |
9u, | |
1u, | |
10u, | |
2u, | |
29u, | |
1u, | |
72u, | |
1u, | |
4u, | |
1u, | |
2u, | |
3u, | |
1u, | |
1u, | |
8u, | |
1u, | |
81u, | |
1u, | |
2u, | |
7u, | |
12u, | |
8u, | |
98u, | |
1u, | |
2u, | |
9u, | |
11u, | |
7u, | |
73u, | |
2u, | |
27u, | |
1u, | |
1u, | |
1u, | |
1u, | |
1u, | |
55u, | |
14u, | |
1u, | |
5u, | |
1u, | |
2u, | |
5u, | |
11u, | |
1u, | |
36u, | |
9u, | |
1u, | |
102u, | |
4u, | |
1u, | |
6u, | |
1u, | |
2u, | |
2u, | |
2u, | |
25u, | |
2u, | |
4u, | |
3u, | |
16u, | |
4u, | |
13u, | |
1u, | |
2u, | |
2u, | |
6u, | |
1u, | |
15u, | |
1u, | |
0u, | |
3u, | |
0u, | |
3u, | |
29u, | |
2u, | |
30u, | |
2u, | |
30u, | |
2u, | |
64u, | |
2u, | |
1u, | |
7u, | |
8u, | |
1u, | |
2u, | |
11u, | |
9u, | |
1u, | |
45u, | |
3u, | |
1u, | |
1u, | |
117u, | |
2u, | |
34u, | |
1u, | |
118u, | |
3u, | |
4u, | |
2u, | |
9u, | |
1u, | |
6u, | |
3u, | |
219u, | |
2u, | |
2u, | |
1u, | |
58u, | |
1u, | |
1u, | |
7u, | |
1u, | |
1u, | |
1u, | |
1u, | |
2u, | |
8u, | |
6u, | |
10u, | |
2u, | |
1u, | |
48u, | |
31u, | |
49u, | |
4u, | |
48u, | |
7u, | |
1u, | |
1u, | |
5u, | |
1u, | |
40u, | |
9u, | |
12u, | |
2u, | |
32u, | |
4u, | |
2u, | |
2u, | |
1u, | |
3u, | |
56u, | |
1u, | |
1u, | |
2u, | |
3u, | |
1u, | |
1u, | |
3u, | |
58u, | |
8u, | |
2u, | |
2u, | |
152u, | |
3u, | |
1u, | |
13u, | |
1u, | |
7u, | |
4u, | |
1u, | |
6u, | |
1u, | |
3u, | |
2u, | |
198u, | |
64u, | |
0u, | |
1u, | |
195u, | |
33u, | |
0u, | |
3u, | |
141u, | |
1u, | |
96u, | |
32u, | |
0u, | |
6u, | |
105u, | |
2u, | |
0u, | |
4u, | |
1u, | |
10u, | |
32u, | |
2u, | |
80u, | |
2u, | |
0u, | |
1u, | |
3u, | |
1u, | |
4u, | |
1u, | |
25u, | |
2u, | |
5u, | |
1u, | |
151u, | |
2u, | |
26u, | |
18u, | |
13u, | |
1u, | |
38u, | |
8u, | |
25u, | |
11u, | |
46u, | |
3u, | |
48u, | |
1u, | |
2u, | |
4u, | |
2u, | |
2u, | |
39u, | |
1u, | |
67u, | |
6u, | |
2u, | |
2u, | |
2u, | |
2u, | |
12u, | |
1u, | |
8u, | |
1u, | |
47u, | |
1u, | |
51u, | |
1u, | |
1u, | |
3u, | |
2u, | |
2u, | |
5u, | |
2u, | |
1u, | |
1u, | |
42u, | |
2u, | |
8u, | |
1u, | |
238u, | |
1u, | |
2u, | |
1u, | |
4u, | |
1u, | |
0u, | |
1u, | |
0u, | |
16u, | |
16u, | |
16u, | |
0u, | |
2u, | |
0u, | |
1u, | |
226u, | |
1u, | |
149u, | |
5u, | |
0u, | |
3u, | |
1u, | |
2u, | |
5u, | |
4u, | |
40u, | |
3u, | |
4u, | |
1u, | |
165u, | |
2u, | |
0u, | |
4u, | |
0u, | |
2u, | |
80u, | |
3u, | |
70u, | |
11u, | |
49u, | |
4u, | |
123u, | |
1u, | |
54u, | |
15u, | |
41u, | |
1u, | |
2u, | |
2u, | |
10u, | |
3u, | |
49u, | |
4u, | |
2u, | |
2u, | |
7u, | |
1u, | |
61u, | |
3u, | |
36u, | |
5u, | |
1u, | |
8u, | |
62u, | |
1u, | |
12u, | |
2u, | |
52u, | |
9u, | |
10u, | |
4u, | |
2u, | |
1u, | |
95u, | |
3u, | |
2u, | |
1u, | |
1u, | |
2u, | |
6u, | |
1u, | |
2u, | |
1u, | |
157u, | |
1u, | |
3u, | |
8u, | |
21u, | |
2u, | |
57u, | |
2u, | |
1u, | |
1u, | |
1u, | |
1u, | |
22u, | |
1u, | |
14u, | |
7u, | |
3u, | |
5u, | |
195u, | |
8u, | |
2u, | |
3u, | |
1u, | |
1u, | |
23u, | |
1u, | |
81u, | |
1u, | |
2u, | |
6u, | |
1u, | |
1u, | |
2u, | |
1u, | |
1u, | |
2u, | |
1u, | |
2u, | |
235u, | |
1u, | |
2u, | |
4u, | |
6u, | |
2u, | |
1u, | |
2u, | |
27u, | |
2u, | |
85u, | |
8u, | |
2u, | |
1u, | |
1u, | |
2u, | |
106u, | |
1u, | |
1u, | |
1u, | |
2u, | |
6u, | |
1u, | |
1u, | |
101u, | |
3u, | |
2u, | |
4u, | |
1u, | |
5u, | |
0u, | |
9u, | |
1u, | |
2u, | |
245u, | |
1u, | |
10u, | |
2u, | |
1u, | |
1u, | |
4u, | |
1u, | |
144u, | |
4u, | |
2u, | |
2u, | |
4u, | |
1u, | |
32u, | |
10u, | |
40u, | |
6u, | |
2u, | |
4u, | |
8u, | |
1u, | |
9u, | |
6u, | |
2u, | |
3u, | |
46u, | |
13u, | |
1u, | |
2u, | |
0u, | |
7u, | |
1u, | |
6u, | |
1u, | |
1u, | |
82u, | |
22u, | |
2u, | |
7u, | |
1u, | |
2u, | |
1u, | |
2u, | |
122u, | |
6u, | |
3u, | |
1u, | |
1u, | |
2u, | |
1u, | |
7u, | |
1u, | |
1u, | |
72u, | |
2u, | |
3u, | |
1u, | |
1u, | |
1u, | |
0u, | |
2u, | |
11u, | |
2u, | |
52u, | |
5u, | |
5u, | |
1u, | |
1u, | |
1u, | |
0u, | |
1u, | |
6u, | |
15u, | |
0u, | |
5u, | |
59u, | |
7u, | |
0u, | |
1u, | |
63u, | |
4u, | |
81u, | |
1u, | |
0u, | |
2u, | |
0u, | |
46u, | |
2u, | |
23u, | |
0u, | |
1u, | |
1u, | |
3u, | |
4u, | |
5u, | |
8u, | |
8u, | |
2u, | |
7u, | |
30u, | |
4u, | |
148u, | |
3u, | |
0u, | |
55u, | |
4u, | |
50u, | |
8u, | |
1u, | |
14u, | |
1u, | |
22u, | |
5u, | |
1u, | |
15u, | |
0u, | |
7u, | |
1u, | |
17u, | |
2u, | |
7u, | |
1u, | |
2u, | |
1u, | |
5u, | |
100u, | |
1u, | |
160u, | |
7u, | |
0u, | |
1u, | |
61u, | |
4u, | |
0u, | |
4u, | |
0u, | |
7u, | |
109u, | |
7u, | |
0u, | |
96u, | |
128u, | |
240u, | |
0u | |
}; // weak | |
_QWORD qword_140022C68[5] = { 5i64, 12i64, 11i64, 11i64, 4i64 }; // weak | |
void *off_140022C90 = &unk_140022724; // weak | |
void *type_info::`vftable' = &sub_14001B580; // weak | |
void (*qword_140023368[2])(void) = { NULL, NULL }; // weak | |
void (*qword_140023378)(void) = NULL; // weak | |
char byte_140027000 = '\x01'; // weak | |
__int64 qword_140027030 = -1i64; // weak | |
__int64 (__fastcall *off_140027038)(_QWORD, _QWORD) = &sub_14000D5D0; // weak | |
__int64 (__fastcall *off_140027040)(_QWORD, _QWORD, _QWORD, _QWORD) = &sub_14000D640; // weak | |
__int64 (__fastcall *off_140027048)(_QWORD, _QWORD, _QWORD, _QWORD) = &sub_14000D720; // weak | |
__int64 (__fastcall *off_140027050)(_QWORD, _QWORD, _QWORD, _QWORD) = &sub_14000D810; // weak | |
_UNKNOWN unk_140027058; // weak | |
int dword_14002705C = 0; // weak | |
_UNKNOWN unk_140027060; // weak | |
int dword_140027064[5] = { 0, 0, -1, 0, 24 }; // weak | |
int dword_140027078 = 0; // weak | |
void **off_140027080 = &type_info::`vftable'; // weak | |
void *off_1400270A0 = &unk_140022B5B; // weak | |
__int64 qword_1400270D8 = -47936899621427i64; // weak | |
uintptr_t _security_cookie = 47936899621426ui64; | |
char byte_140027120 = '\0'; // weak | |
char byte_140027130 = '\0'; // weak | |
RTL_SRWLOCK SRWLock = { NULL }; // idb | |
__int64 qword_140027140 = 0i64; // weak | |
__int64 qword_140027148 = 0i64; // weak | |
int dword_140027170 = 0; // weak | |
__int64 qword_140027178 = 0i64; // weak | |
__int64 qword_140027180 = 0i64; // weak | |
RTL_SRWLOCK stru_140027188 = { NULL }; // idb | |
__int64 qword_140027198 = 0i64; // weak | |
RTL_SRWLOCK stru_1400271A0 = { NULL }; // idb | |
__int64 qword_1400271B0 = 0i64; // weak | |
__int64 qword_1400271C0 = 0i64; // weak | |
HANDLE hMutex = NULL; // idb | |
char byte_1400271D0 = '\0'; // weak | |
HANDLE hHeap = NULL; // idb | |
__int64 qword_1400271E8 = 0i64; // weak | |
__int64 (*qword_1400271F0)(void) = NULL; // weak | |
__int64 qword_1400271F8 = 0i64; // weak | |
__int64 qword_140027200; // weak | |
__int64 (__fastcall *qword_140027208)(_QWORD); // weak | |
HMODULE hModule; // idb | |
__int64 qword_140027218; // weak | |
__int64 qword_140027220; // weak | |
__int64 qword_140027228; // weak | |
__int64 qword_140027238; // weak | |
__int64 qword_140027240; // weak | |
__int64 qword_140027250; // weak | |
__int64 qword_140027258; // weak | |
_ThrowInfo pThrowInfo; // idb | |
int TlsIndex; // weak | |
union _SLIST_HEADER stru_1400272C0; // weak | |
_UNKNOWN unk_1400272D0; // weak | |
_UNKNOWN unk_1400272D8; // weak | |
int dword_1400272E0; // weak | |
_UNKNOWN unk_1400272E8; // weak | |
_UNKNOWN unk_1400272F0; // weak | |
//----- (0000000140001000) ---------------------------------------------------- | |
__int64 __fastcall sub_140001000(__int64 (**a1)(void)) | |
{ | |
sub_1400010C0(*a1); | |
return 0i64; | |
} | |
//----- (0000000140001030) ---------------------------------------------------- | |
void sub_140001030() | |
{ | |
__int128 v0; // [rsp+28h] [rbp-30h] BYREF | |
char **v1; // [rsp+38h] [rbp-20h] | |
__int64 v2; // [rsp+40h] [rbp-18h] | |
const char *v3; // [rsp+48h] [rbp-10h] | |
__int64 v4; // [rsp+50h] [rbp-8h] | |
v1 = &off_14001E3B0; | |
v2 = 1i64; | |
*(_QWORD *)&v0 = 0i64; | |
v3 = "Hello, world!\n"; | |
v4 = 0i64; | |
sub_140005710(&v0); | |
} | |
// 14001E3B0: using guessed type char *off_14001E3B0; | |
//----- (0000000140001080) ---------------------------------------------------- | |
#error "1400010A7: call analysis failed (funcsize=12)" | |
//----- (00000001400010C0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400010C0(__int64 (*a1)(void)) | |
{ | |
return a1(); | |
} | |
//----- (0000000140001110) ---------------------------------------------------- | |
__int64 __fastcall sub_140001110(unsigned __int64 a1, unsigned __int64 a2, __int64 a3, unsigned __int64 a4, __int64 a5) | |
{ | |
if ( a2 < a1 ) | |
sub_14001D050(a1, a2, a5); | |
if ( a2 > a4 ) | |
sub_14001D040(a2, a4, a5); | |
return a1 + a3; | |
} | |
//----- (0000000140001150) ---------------------------------------------------- | |
unsigned __int64 sub_140001150() | |
{ | |
return 0xC1A2C89CCD1E7BC1ui64; | |
} | |
//----- (0000000140001160) ---------------------------------------------------- | |
__int64 sub_140001160() | |
{ | |
return 0x69B4CA757552BE31i64; | |
} | |
//----- (0000000140001170) ---------------------------------------------------- | |
unsigned __int64 sub_140001170() | |
{ | |
return 0xC09296C9DDEE01BEui64; | |
} | |
//----- (0000000140001180) ---------------------------------------------------- | |
__int64 __fastcall sub_140001180(unsigned __int64 **a1, __int64 a2) | |
{ | |
unsigned __int64 *v3; // rdi | |
v3 = *a1; | |
if ( sub_140017C50(a2) ) | |
return sub_14001A4F0(v3, a2); | |
if ( sub_140017C60(a2) ) | |
return sub_14001A590(v3, a2); | |
return sub_14001AD00(v3, a2); | |
} | |
//----- (00000001400011E0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400011E0(__int64 a1, __int64 *a2) | |
{ | |
return sub_140017890(a2, byte_14001E3C0, 2ui64); | |
} | |
// 14001E3C0: using guessed type unsigned __int8 byte_14001E3C0[8]; | |
//----- (0000000140001200) ---------------------------------------------------- | |
__int64 __fastcall sub_140001200(__int64 **a1, _QWORD *a2) | |
{ | |
return sub_140016340(**a1, a2); | |
} | |
//----- (0000000140001210) ---------------------------------------------------- | |
__int64 __fastcall sub_140001210(__int64 a1, __int64 *a2) | |
{ | |
return sub_1400183F0(*(unsigned __int8 **)a1, *(_QWORD *)(a1 + 8), a2); | |
} | |
//----- (0000000140001230) ---------------------------------------------------- | |
bool __fastcall sub_140001230(__int64 *a1, __int64 *a2) | |
{ | |
return sub_140016790(*a1, a2); | |
} | |
//----- (0000000140001240) ---------------------------------------------------- | |
bool __fastcall sub_140001240(__int64 *a1, unsigned int a2) | |
{ | |
int v3; // [rsp+24h] [rbp-4h] BYREF | |
v3 = 0; | |
if ( a2 >= 0x80 ) | |
{ | |
if ( a2 >= 0x800 ) | |
{ | |
if ( a2 > 0xFFFF ) | |
{ | |
LOBYTE(v3) = (a2 >> 18) & 7 | 0xF0; | |
BYTE1(v3) = (a2 >> 12) & 0x3F | 0x80; | |
BYTE2(v3) = (a2 >> 6) & 0x3F | 0x80; | |
HIBYTE(v3) = a2 & 0x3F | 0x80; | |
} | |
else | |
{ | |
LOBYTE(v3) = (a2 >> 12) | 0xE0; | |
BYTE1(v3) = (a2 >> 6) & 0x3F | 0x80; | |
BYTE2(v3) = a2 & 0x3F | 0x80; | |
} | |
} | |
else | |
{ | |
LOBYTE(v3) = (a2 >> 6) | 0xC0; | |
BYTE1(v3) = a2 & 0x3F | 0x80; | |
} | |
} | |
else | |
{ | |
LOBYTE(v3) = a2; | |
} | |
return sub_1400065D0(a1, (__int64)&v3); | |
} | |
//----- (0000000140001300) ---------------------------------------------------- | |
bool __fastcall sub_140001300(__int64 a1, unsigned int a2) | |
{ | |
unsigned __int64 v2; // r8 | |
int v4; // [rsp+24h] [rbp-4h] BYREF | |
v4 = 0; | |
if ( a2 >= 0x80 ) | |
{ | |
if ( a2 >= 0x800 ) | |
{ | |
if ( a2 > 0xFFFF ) | |
{ | |
LOBYTE(v4) = (a2 >> 18) & 7 | 0xF0; | |
BYTE1(v4) = (a2 >> 12) & 0x3F | 0x80; | |
BYTE2(v4) = (a2 >> 6) & 0x3F | 0x80; | |
HIBYTE(v4) = a2 & 0x3F | 0x80; | |
v2 = 4i64; | |
} | |
else | |
{ | |
LOBYTE(v4) = (a2 >> 12) | 0xE0; | |
BYTE1(v4) = (a2 >> 6) & 0x3F | 0x80; | |
BYTE2(v4) = a2 & 0x3F | 0x80; | |
v2 = 3i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(v4) = (a2 >> 6) | 0xC0; | |
BYTE1(v4) = a2 & 0x3F | 0x80; | |
v2 = 2i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(v4) = a2; | |
v2 = 1i64; | |
} | |
return sub_1400064E0(a1, (unsigned __int8 *)&v4, v2); | |
} | |
//----- (00000001400013C0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400013C0(__int64 a1, unsigned int a2) | |
{ | |
size_t v2; // rsi | |
_QWORD *v3; // rdi | |
__int64 v4; // rbx | |
int Src; // [rsp+2Ch] [rbp-1Ch] BYREF | |
Src = 0; | |
if ( a2 >= 0x80 ) | |
{ | |
if ( a2 >= 0x800 ) | |
{ | |
if ( a2 > 0xFFFF ) | |
{ | |
LOBYTE(Src) = (a2 >> 18) & 7 | 0xF0; | |
BYTE1(Src) = (a2 >> 12) & 0x3F | 0x80; | |
BYTE2(Src) = (a2 >> 6) & 0x3F | 0x80; | |
HIBYTE(Src) = a2 & 0x3F | 0x80; | |
v2 = 4i64; | |
} | |
else | |
{ | |
LOBYTE(Src) = (a2 >> 12) | 0xE0; | |
BYTE1(Src) = (a2 >> 6) & 0x3F | 0x80; | |
BYTE2(Src) = a2 & 0x3F | 0x80; | |
v2 = 3i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(Src) = (a2 >> 6) | 0xC0; | |
BYTE1(Src) = a2 & 0x3F | 0x80; | |
v2 = 2i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(Src) = a2; | |
v2 = 1i64; | |
} | |
v3 = *(_QWORD **)(a1 + 8); | |
v4 = v3[2]; | |
if ( *v3 - v4 < v2 ) | |
{ | |
sub_14001C0D0(*(__int64 **)(a1 + 8), v3[2], v2); | |
v4 = v3[2]; | |
} | |
memcpy((void *)(v4 + v3[1]), &Src, v2); | |
v3[2] = v2 + v4; | |
return 0i64; | |
} | |
//----- (00000001400014C0) ---------------------------------------------------- | |
bool __fastcall sub_1400014C0(__int64 a1, __int128 *a2) | |
{ | |
__int128 v2; // xmm0 | |
__int128 v3; // xmm1 | |
__int64 v5; // [rsp+28h] [rbp-40h] BYREF | |
__int128 v6[3]; // [rsp+30h] [rbp-38h] BYREF | |
v5 = a1; | |
v2 = *a2; | |
v3 = a2[1]; | |
v6[2] = a2[2]; | |
v6[1] = v3; | |
v6[0] = v2; | |
return sub_1400172A0((__int64)&v5, (__int64)&off_14001E3C8, (__int64 *)v6); | |
} | |
// 14001E3C8: using guessed type __int64 (__fastcall *off_14001E3C8)(); | |
//----- (0000000140001500) ---------------------------------------------------- | |
bool __fastcall sub_140001500(__int64 a1, __int128 *a2) | |
{ | |
__int128 v2; // xmm0 | |
__int128 v3; // xmm1 | |
__int64 v5; // [rsp+28h] [rbp-40h] BYREF | |
__int128 v6[3]; // [rsp+30h] [rbp-38h] BYREF | |
v5 = a1; | |
v2 = *a2; | |
v3 = a2[1]; | |
v6[2] = a2[2]; | |
v6[1] = v3; | |
v6[0] = v2; | |
return sub_1400172A0((__int64)&v5, (__int64)&off_14001E3F8, (__int64 *)v6); | |
} | |
// 14001E3F8: using guessed type __int64 (__fastcall *off_14001E3F8)(); | |
//----- (0000000140001540) ---------------------------------------------------- | |
bool __fastcall sub_140001540(__int64 a1, __int128 *a2) | |
{ | |
__int128 v2; // xmm0 | |
__int128 v3; // xmm1 | |
__int64 v5; // [rsp+28h] [rbp-40h] BYREF | |
__int128 v6[3]; // [rsp+30h] [rbp-38h] BYREF | |
v5 = a1; | |
v2 = *a2; | |
v3 = a2[1]; | |
v6[2] = a2[2]; | |
v6[1] = v3; | |
v6[0] = v2; | |
return sub_1400172A0((__int64)&v5, (__int64)&off_14001E458, (__int64 *)v6); | |
} | |
// 14001E458: using guessed type __int64 (__fastcall *off_14001E458)(); | |
//----- (0000000140001590) ---------------------------------------------------- | |
__int64 __fastcall sub_140001590(_BYTE **a1) | |
{ | |
_BYTE *v2; // [rsp+20h] [rbp-8h] BYREF | |
v2 = *a1; | |
return sub_140007D50(&v2); | |
} | |
//----- (00000001400015B0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400015B0(_QWORD **a1) | |
{ | |
_QWORD *v1; // rdx | |
_BYTE *v2; // rcx | |
__int64 result; // rax | |
v1 = *a1; | |
v2 = (_BYTE *)**a1; | |
result = v1[1]; | |
*v1 = 0i64; | |
if ( !v2 ) | |
sub_14001CC50( | |
(__int64)"called `Option::unwrap()` on a `None` valueinternal error: entered unreachable code/rustc/90c541806f23a12" | |
"7002de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
43i64, | |
(__int64)&off_14001F3C0); | |
*v2 = 1; | |
*(_OWORD *)(result + 16) = 0i64; | |
*(_OWORD *)result = 0i64; | |
*(_QWORD *)(result + 32) = 1i64; | |
*(_QWORD *)(result + 40) = 0i64; | |
*(_DWORD *)(result + 48) = 0; | |
*(_WORD *)(result + 52) = 0; | |
*(_DWORD *)(result + 56) = 0; | |
return result; | |
} | |
// 14001F3C0: using guessed type char *off_14001F3C0; | |
//----- (0000000140001620) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
void sub_140001620() | |
{ | |
JUMPOUT(0x140001662i64); | |
} | |
// 140001695: positive sp value 68 has been found | |
// 14000165E: control flows out of bounds to 140001662 | |
//----- (00000001400016C0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400016C0(__int64 **a1) | |
{ | |
__int64 v1; // rsi | |
__int64 result; // rax | |
v1 = **a1; | |
**a1 = 0i64; | |
if ( !v1 ) | |
sub_14001CC50( | |
(__int64)"called `Option::unwrap()` on a `None` valueinternal error: entered unreachable code/rustc/90c541806f23a12" | |
"7002de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
43i64, | |
(__int64)&off_14001F3C0); | |
result = sub_1400010D0(1024i64, 1i64); | |
if ( !result ) | |
sub_14001CB30(); | |
*(_OWORD *)v1 = 0i64; | |
*(_QWORD *)(v1 + 16) = 0i64; | |
*(_QWORD *)(v1 + 24) = 1024i64; | |
*(_QWORD *)(v1 + 32) = result; | |
*(_QWORD *)(v1 + 40) = 0i64; | |
*(_DWORD *)(v1 + 48) = 0; | |
*(_WORD *)(v1 + 52) = 0; | |
*(_DWORD *)(v1 + 56) = 0; | |
return result; | |
} | |
// 1400010D0: using guessed type __int64 __fastcall sub_1400010D0(_QWORD, _QWORD); | |
// 14001F3C0: using guessed type char *off_14001F3C0; | |
//----- (0000000140001760) ---------------------------------------------------- | |
void __noreturn sub_140001760() | |
{ | |
sub_140003AF0(); | |
} | |
//----- (0000000140001780) ---------------------------------------------------- | |
__int64 __fastcall sub_140001780(__int64 a1) | |
{ | |
__int64 result; // rax | |
if ( !_InterlockedDecrement64((volatile signed __int64 *)a1) ) | |
return sub_140002D80(a1); | |
return result; | |
} | |
//----- (0000000140001790) ---------------------------------------------------- | |
_BYTE *__fastcall sub_140001790(_QWORD *a1) | |
{ | |
_BYTE *result; // rax | |
__int64 v2; // rdx | |
__int64 v3; // rdx | |
result = (_BYTE *)a1[2]; | |
if ( result ) | |
{ | |
v2 = a1[1]; | |
if ( v2 ) | |
return (_BYTE *)sub_1400010E0(a1[2], v2, 1i64); | |
} | |
else | |
{ | |
result = (_BYTE *)*a1; | |
*(_BYTE *)*a1 = 0; | |
v3 = a1[1]; | |
if ( v3 ) | |
return (_BYTE *)sub_1400010E0(*a1, v3, 1i64); | |
} | |
return result; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (00000001400017D0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400017D0(volatile signed __int64 *a1) | |
{ | |
__int64 result; // rax | |
if ( !_InterlockedDecrement64(a1) && a1 != (volatile signed __int64 *)-1i64 && !_InterlockedDecrement64(a1 + 1) ) | |
return sub_1400010E0(a1, 48i64, 8i64); | |
return result; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (00000001400017E0) ---------------------------------------------------- | |
void __fastcall sub_1400017E0(_QWORD *a1) | |
{ | |
++*a1; | |
} | |
//----- (00000001400017F0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400017F0(__int64 a1) | |
{ | |
__int64 result; // rax | |
if ( a1 ) | |
{ | |
if ( !_InterlockedDecrement64((volatile signed __int64 *)a1) ) | |
return sub_140002D80(a1); | |
} | |
return result; | |
} | |
//----- (0000000140001810) ---------------------------------------------------- | |
void __fastcall sub_140001810(__int64 a1) | |
{ | |
if ( (*(_DWORD *)(a1 + 56))-- == 1 ) | |
{ | |
*(_QWORD *)(a1 + 8) = 0i64; | |
ReleaseSRWLockExclusive((PSRWLOCK)a1); | |
} | |
} | |
//----- (0000000140001840) ---------------------------------------------------- | |
__int64 __fastcall sub_140001840(_QWORD *a1) | |
{ | |
__int64 result; // rax | |
if ( *a1 ) | |
return sub_1400010E0(a1[1], *a1, 1i64); | |
return result; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140001860) ---------------------------------------------------- | |
_BYTE *__fastcall sub_140001860(volatile signed __int64 **a1) | |
{ | |
volatile signed __int64 *v1; // rcx | |
_BYTE *result; // rax | |
v1 = *a1; | |
if ( !_InterlockedDecrement64(v1) ) | |
return sub_140002DF0((__int64)v1); | |
return result; | |
} | |
//----- (0000000140001870) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
__int64 __fastcall sub_140001870(_QWORD *a1) | |
{ | |
__int64 result; // rax | |
result = *a1 & 3i64; | |
if ( (_DWORD)result == 1 ) | |
JUMPOUT(0x1400018A4i64); | |
return result; | |
} | |
// 1400018DB: positive sp value 48 has been found | |
// 1400018A0: control flows out of bounds to 1400018A4 | |
//----- (0000000140001930) ---------------------------------------------------- | |
void __noreturn sub_140001930() | |
{ | |
__int64 v0; // rax | |
__int64 v1[8]; // [rsp+28h] [rbp-70h] BYREF | |
__int64 v2[6]; // [rsp+68h] [rbp-30h] BYREF | |
v2[2] = (__int64)&off_14001EB20; | |
v2[3] = 1i64; | |
v2[0] = 0i64; | |
v2[4] = (__int64)"/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v2[5] = 0i64; | |
v1[0] = (__int64)v2; | |
v1[1] = (__int64)sub_140017290; | |
v1[4] = (__int64)&off_14001E8D0; | |
v1[5] = 2i64; | |
v1[2] = 0i64; | |
v1[6] = (__int64)v1; | |
v1[7] = 1i64; | |
sub_140006220(); | |
sub_140001B00(v0); | |
__fastfail(7u); | |
} | |
// 1400019D9: variable 'v0' is possibly undefined | |
// 14001E8D0: using guessed type void *off_14001E8D0; | |
// 14001EB20: using guessed type char *off_14001EB20; | |
//----- (00000001400019F0) ---------------------------------------------------- | |
void __fastcall sub_1400019F0(__int64 a1, char a2) | |
{ | |
if ( !a2 && 2 * qword_1400271C0 && !sub_14001C340() ) | |
*(_BYTE *)(a1 + 8) = 1; | |
ReleaseSRWLockExclusive((PSRWLOCK)a1); | |
} | |
// 1400271C0: using guessed type __int64 qword_1400271C0; | |
//----- (0000000140001A30) ---------------------------------------------------- | |
_BYTE *__fastcall sub_140001A30(_QWORD *a1) | |
{ | |
_BYTE *result; // rax | |
__int64 v2; // rdx | |
result = (_BYTE *)*a1; | |
*(_BYTE *)*a1 = 0; | |
v2 = a1[1]; | |
if ( v2 ) | |
return (_BYTE *)sub_1400010E0(*a1, v2, 1i64); | |
return result; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140001A50) ---------------------------------------------------- | |
__int64 __fastcall sub_140001A50(_QWORD *a1) | |
{ | |
__int64 result; // rax | |
if ( *a1 ) | |
return sub_1400010E0(a1[1], 2i64 * *a1, 2i64); | |
return result; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140001A80) ---------------------------------------------------- | |
_BYTE *__fastcall sub_140001A80(__int64 a1) | |
{ | |
_BYTE *result; // rax | |
if ( a1 ) | |
{ | |
if ( !_InterlockedDecrement64((volatile signed __int64 *)a1) ) | |
return sub_140002DF0(a1); | |
} | |
return result; | |
} | |
//----- (0000000140001AA0) ---------------------------------------------------- | |
__int64 __fastcall sub_140001AA0(__int64 a1) | |
{ | |
__int64 result; // rax | |
if ( *(_BYTE *)(a1 + 24) != 2 ) | |
{ | |
if ( *(_QWORD *)a1 ) | |
return sub_1400010E0(*(_QWORD *)(a1 + 8), *(_QWORD *)a1, 1i64); | |
} | |
return result; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140001AD0) ---------------------------------------------------- | |
void __fastcall sub_140001AD0(__int64 a1) | |
{ | |
++*(_QWORD *)(a1 + 16); | |
} | |
//----- (0000000140001AE0) ---------------------------------------------------- | |
_QWORD *__fastcall sub_140001AE0(_QWORD *a1) | |
{ | |
_QWORD *result; // rax | |
__int64 v2; // rcx | |
result = a1; | |
v2 = a1[1]; | |
if ( v2 ) | |
{ | |
if ( *result ) | |
return (_QWORD *)sub_1400010E0(v2, *result, 1i64); | |
} | |
return result; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140001B00) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
__int64 __fastcall sub_140001B00(__int64 a1) | |
{ | |
__int64 result; // rax | |
if ( a1 ) | |
{ | |
result = a1 & 3; | |
if ( (_DWORD)result == 1 ) | |
JUMPOUT(0x140001B39i64); | |
} | |
return result; | |
} | |
// 140001B70: positive sp value 48 has been found | |
// 140001B35: control flows out of bounds to 140001B39 | |
//----- (0000000140001BC0) ---------------------------------------------------- | |
_BYTE *__fastcall sub_140001BC0(_QWORD *a1) | |
{ | |
_BYTE *result; // rax | |
__int64 v2; // rdx | |
result = (_BYTE *)*a1; | |
if ( *a1 ) | |
{ | |
*result = 0; | |
v2 = a1[1]; | |
if ( v2 ) | |
return (_BYTE *)sub_1400010E0(*a1, v2, 1i64); | |
} | |
return result; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140001BF0) ---------------------------------------------------- | |
_BYTE *__fastcall sub_140001BF0(__int64 a1) | |
{ | |
_BYTE *result; // rax | |
if ( !_InterlockedDecrement64((volatile signed __int64 *)a1) ) | |
return sub_140002DF0(a1); | |
return result; | |
} | |
//----- (0000000140001C10) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
__int64 __fastcall sub_140001C10(_QWORD *a1) | |
{ | |
__int64 result; // rax | |
if ( *a1 ) | |
{ | |
result = *a1 & 3i64; | |
if ( (_DWORD)result == 1 ) | |
JUMPOUT(0x140001C49i64); | |
} | |
return result; | |
} | |
// 140001C80: positive sp value 48 has been found | |
// 140001C45: control flows out of bounds to 140001C49 | |
//----- (0000000140001CD0) ---------------------------------------------------- | |
void __fastcall sub_140001CD0(unsigned __int64 a1, __int64 a2) | |
{ | |
unsigned __int64 v3; // rdx | |
size_t v4; // rdi | |
if ( a1 ) | |
{ | |
v3 = *(_QWORD *)(a2 + 16); | |
v4 = v3 - a1; | |
if ( v3 < a1 ) | |
sub_14001D040(a1, v3, (__int64)&off_14001E7A0); | |
*(_QWORD *)(a2 + 16) = 0i64; | |
if ( v3 != a1 ) | |
{ | |
memmove(*(void **)(a2 + 8), (const void *)(*(_QWORD *)(a2 + 8) + a1), v4); | |
*(_QWORD *)(a2 + 16) = v4; | |
} | |
} | |
} | |
// 14001E7A0: using guessed type void *off_14001E7A0; | |
//----- (0000000140001D30) ---------------------------------------------------- | |
__int64 __fastcall sub_140001D30(__int64 a1, __int64 a2) | |
{ | |
__int64 result; // rax | |
if ( a1 ) | |
return sub_1400010E0(a2, 2 * a1, 2i64); | |
return result; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140001D50) ---------------------------------------------------- | |
__int64 __fastcall sub_140001D50(__int64 a1) | |
{ | |
__int64 result; // rax | |
if ( !*(_BYTE *)(a1 + 29) ) | |
JUMPOUT(0x140001D69i64); | |
if ( *(_QWORD *)a1 ) | |
return sub_1400010E0(*(_QWORD *)(a1 + 8), *(_QWORD *)a1, 1i64); | |
return result; | |
} | |
// 140001D67: control flows out of bounds to 140001D69 | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140001E60) ---------------------------------------------------- | |
_QWORD *__fastcall sub_140001E60(_QWORD *a1) | |
{ | |
_QWORD *result; // rax | |
__int64 v2; // rcx | |
result = a1; | |
v2 = a1[1]; | |
if ( v2 ) | |
{ | |
if ( *result ) | |
return (_QWORD *)sub_1400010E0(v2, 2i64 * *result, 2i64); | |
} | |
else | |
{ | |
result = (_QWORD *)(*result & 3i64); | |
if ( (_DWORD)result == 1 ) | |
JUMPOUT(0x140001EB3i64); | |
} | |
return result; | |
} | |
// 140001EAF: control flows out of bounds to 140001EB3 | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140001F40) ---------------------------------------------------- | |
__int64 __fastcall sub_140001F40(unsigned int a1, _BYTE *a2, unsigned __int64 a3) | |
{ | |
unsigned __int64 v3; // rcx | |
__int64 result; // rax | |
unsigned int v5; // [rsp+24h] [rbp-74h] BYREF | |
__int64 v6; // [rsp+28h] [rbp-70h] BYREF | |
unsigned __int64 v7; // [rsp+30h] [rbp-68h] BYREF | |
__int64 v8[6]; // [rsp+38h] [rbp-60h] BYREF | |
__int64 v9[6]; // [rsp+68h] [rbp-30h] BYREF | |
v5 = a1; | |
if ( a1 < 0x80 ) | |
{ | |
*a2 = a1; | |
v3 = 1i64; | |
goto LABEL_10; | |
} | |
if ( a1 < 0x800 ) | |
{ | |
result = a1 >> 6; | |
LOBYTE(result) = result | 0xC0; | |
*a2 = result; | |
a2[1] = a1 & 0x3F | 0x80; | |
v3 = 2i64; | |
goto LABEL_10; | |
} | |
if ( a1 < 0x10000 ) | |
{ | |
v6 = 3i64; | |
if ( a3 > 2 ) | |
{ | |
*a2 = (a1 >> 12) | 0xE0; | |
result = a1 >> 6; | |
LOBYTE(result) = result & 0x3F | 0x80; | |
a2[1] = result; | |
a2[2] = a1 & 0x3F | 0x80; | |
v3 = 3i64; | |
goto LABEL_10; | |
} | |
LABEL_12: | |
v7 = a3; | |
v8[0] = (__int64)&v6; | |
v8[1] = (__int64)sub_14001AD00; | |
v8[2] = (__int64)&v5; | |
v8[3] = (__int64)sub_14001A450; | |
v8[4] = (__int64)&v7; | |
v8[5] = (__int64)sub_14001AD00; | |
v9[2] = (__int64)&off_14001E5E0; | |
v9[3] = 3i64; | |
v9[0] = 0i64; | |
v9[4] = (__int64)v8; | |
v9[5] = 3i64; | |
sub_14001CBB0((__int64)v9, (__int64)&off_14001E610); | |
} | |
v6 = 4i64; | |
if ( a3 < 4 ) | |
goto LABEL_12; | |
*a2 = (a1 >> 18) & 7 | 0xF0; | |
a2[1] = (a1 >> 12) & 0x3F | 0x80; | |
result = a1 >> 6; | |
LOBYTE(result) = result & 0x3F | 0x80; | |
a2[2] = result; | |
a2[3] = a1 & 0x3F | 0x80; | |
v3 = 4i64; | |
LABEL_10: | |
if ( v3 > a3 ) | |
sub_14001D040(v3, a3, (__int64)&off_14001E588); | |
return result; | |
} | |
// 14001E588: using guessed type void *off_14001E588; | |
// 14001E5E0: using guessed type char *off_14001E5E0; | |
// 14001E610: using guessed type void *off_14001E610; | |
//----- (00000001400020C0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400020C0(__int64 a1) | |
{ | |
__int128 v2; // [rsp+30h] [rbp-18h] BYREF | |
if ( *(_QWORD *)a1 ) | |
{ | |
v2 = *(_OWORD *)(a1 + 8); | |
sub_14001CF90( | |
(__int64)"called `Result::unwrap()` on an `Err` value", | |
43i64, | |
(__int64)&v2, | |
(__int64)&off_14001E6C0, | |
(__int64)&off_140020210); | |
} | |
return *(_QWORD *)(a1 + 8); | |
} | |
// 14001E6C0: using guessed type __int64 (__fastcall *off_14001E6C0)(); | |
// 140020210: using guessed type void *off_140020210; | |
// 1400020C0: using guessed type __int128 var_18; | |
//----- (0000000140002110) ---------------------------------------------------- | |
__int64 __fastcall sub_140002110(unsigned __int64 *a1, const __m128i *a2) | |
{ | |
return sub_140018910(*a1, a2); | |
} | |
//----- (0000000140002120) ---------------------------------------------------- | |
bool __fastcall sub_140002120(__int64 *a1, unsigned int a2) | |
{ | |
__int64 v2; // rcx | |
unsigned __int64 v3; // r8 | |
int v5; // [rsp+24h] [rbp-4h] BYREF | |
v2 = *a1; | |
v5 = 0; | |
if ( a2 >= 0x80 ) | |
{ | |
if ( a2 >= 0x800 ) | |
{ | |
if ( a2 > 0xFFFF ) | |
{ | |
LOBYTE(v5) = (a2 >> 18) & 7 | 0xF0; | |
BYTE1(v5) = (a2 >> 12) & 0x3F | 0x80; | |
BYTE2(v5) = (a2 >> 6) & 0x3F | 0x80; | |
HIBYTE(v5) = a2 & 0x3F | 0x80; | |
v3 = 4i64; | |
} | |
else | |
{ | |
LOBYTE(v5) = (a2 >> 12) | 0xE0; | |
BYTE1(v5) = (a2 >> 6) & 0x3F | 0x80; | |
BYTE2(v5) = a2 & 0x3F | 0x80; | |
v3 = 3i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(v5) = (a2 >> 6) | 0xC0; | |
BYTE1(v5) = a2 & 0x3F | 0x80; | |
v3 = 2i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(v5) = a2; | |
v3 = 1i64; | |
} | |
return sub_1400064E0(v2, (unsigned __int8 *)&v5, v3); | |
} | |
//----- (00000001400021E0) ---------------------------------------------------- | |
bool __fastcall sub_1400021E0(__int64 **a1, unsigned int a2) | |
{ | |
__int64 *v2; // rcx | |
int v4; // [rsp+24h] [rbp-4h] BYREF | |
v2 = *a1; | |
v4 = 0; | |
if ( a2 >= 0x80 ) | |
{ | |
if ( a2 >= 0x800 ) | |
{ | |
if ( a2 > 0xFFFF ) | |
{ | |
LOBYTE(v4) = (a2 >> 18) & 7 | 0xF0; | |
BYTE1(v4) = (a2 >> 12) & 0x3F | 0x80; | |
BYTE2(v4) = (a2 >> 6) & 0x3F | 0x80; | |
HIBYTE(v4) = a2 & 0x3F | 0x80; | |
} | |
else | |
{ | |
LOBYTE(v4) = (a2 >> 12) | 0xE0; | |
BYTE1(v4) = (a2 >> 6) & 0x3F | 0x80; | |
BYTE2(v4) = a2 & 0x3F | 0x80; | |
} | |
} | |
else | |
{ | |
LOBYTE(v4) = (a2 >> 6) | 0xC0; | |
BYTE1(v4) = a2 & 0x3F | 0x80; | |
} | |
} | |
else | |
{ | |
LOBYTE(v4) = a2; | |
} | |
return sub_1400065D0(v2, (__int64)&v4); | |
} | |
//----- (00000001400022A0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400022A0(__int64 **a1, unsigned int a2) | |
{ | |
sub_140002E70(*a1, a2); | |
return 0i64; | |
} | |
//----- (00000001400022C0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400022C0(__int64 *a1, unsigned int a2) | |
{ | |
sub_1400013C0(*a1, a2); | |
return 0i64; | |
} | |
//----- (00000001400022E0) ---------------------------------------------------- | |
bool __fastcall sub_1400022E0(__int64 *a1, __int128 *a2) | |
{ | |
__int64 v2; // rax | |
__int128 v3; // xmm0 | |
__int128 v4; // xmm1 | |
__int64 v6; // [rsp+28h] [rbp-40h] BYREF | |
__int128 v7[3]; // [rsp+30h] [rbp-38h] BYREF | |
v2 = *a1; | |
v3 = *a2; | |
v4 = a2[1]; | |
v7[2] = a2[2]; | |
v7[1] = v4; | |
v7[0] = v3; | |
v6 = v2; | |
return sub_1400172A0((__int64)&v6, (__int64)&off_14001E428, (__int64 *)v7); | |
} | |
// 14001E428: using guessed type __int64 (__fastcall *off_14001E428)(); | |
//----- (0000000140002330) ---------------------------------------------------- | |
bool __fastcall sub_140002330(__int64 *a1, __int128 *a2) | |
{ | |
__int64 v2; // rax | |
__int128 v3; // xmm0 | |
__int128 v4; // xmm1 | |
__int64 v6; // [rsp+28h] [rbp-40h] BYREF | |
__int128 v7[3]; // [rsp+30h] [rbp-38h] BYREF | |
v2 = *a1; | |
v3 = *a2; | |
v4 = a2[1]; | |
v7[2] = a2[2]; | |
v7[1] = v4; | |
v7[0] = v3; | |
v6 = v2; | |
return sub_1400172A0((__int64)&v6, (__int64)&off_14001E3C8, (__int64 *)v7); | |
} | |
// 14001E3C8: using guessed type __int64 (__fastcall *off_14001E3C8)(); | |
//----- (0000000140002380) ---------------------------------------------------- | |
bool __fastcall sub_140002380(__int64 *a1, __int128 *a2) | |
{ | |
__int64 v2; // rax | |
__int128 v3; // xmm0 | |
__int128 v4; // xmm1 | |
__int64 v6; // [rsp+28h] [rbp-40h] BYREF | |
__int128 v7[3]; // [rsp+30h] [rbp-38h] BYREF | |
v2 = *a1; | |
v3 = *a2; | |
v4 = a2[1]; | |
v7[2] = a2[2]; | |
v7[1] = v4; | |
v7[0] = v3; | |
v6 = v2; | |
return sub_1400172A0((__int64)&v6, (__int64)&off_14001E3F8, (__int64 *)v7); | |
} | |
// 14001E3F8: using guessed type __int64 (__fastcall *off_14001E3F8)(); | |
//----- (00000001400023D0) ---------------------------------------------------- | |
bool __fastcall sub_1400023D0(__int64 *a1, __int128 *a2) | |
{ | |
__int64 v2; // rax | |
__int128 v3; // xmm0 | |
__int128 v4; // xmm1 | |
__int64 v6; // [rsp+28h] [rbp-40h] BYREF | |
__int128 v7[3]; // [rsp+30h] [rbp-38h] BYREF | |
v2 = *a1; | |
v3 = *a2; | |
v4 = a2[1]; | |
v7[2] = a2[2]; | |
v7[1] = v4; | |
v7[0] = v3; | |
v6 = v2; | |
return sub_1400172A0((__int64)&v6, (__int64)&off_14001E458, (__int64 *)v7); | |
} | |
// 14001E458: using guessed type __int64 (__fastcall *off_14001E458)(); | |
//----- (0000000140002420) ---------------------------------------------------- | |
__int64 __fastcall sub_140002420(__int64 **a1, const void *a2, size_t a3) | |
{ | |
__int64 *v5; // rdi | |
__int64 v6; // r14 | |
v5 = *a1; | |
v6 = (*a1)[2]; | |
if ( **a1 - v6 < a3 ) | |
{ | |
sub_14001C0D0(*a1, v6, a3); | |
v6 = v5[2]; | |
} | |
memcpy((void *)(v6 + v5[1]), a2, a3); | |
v5[2] = a3 + v6; | |
return 0i64; | |
} | |
//----- (0000000140002480) ---------------------------------------------------- | |
bool __fastcall sub_140002480(__int64 *a1, unsigned __int8 *a2, unsigned __int64 a3) | |
{ | |
return sub_1400064E0(*a1, a2, a3); | |
} | |
//----- (0000000140002490) ---------------------------------------------------- | |
__int64 __fastcall sub_140002490(__int64 a1, const void *a2, size_t a3) | |
{ | |
_QWORD *v5; // rdi | |
__int64 v6; // r14 | |
v5 = *(_QWORD **)(*(_QWORD *)a1 + 8i64); | |
v6 = v5[2]; | |
if ( *v5 - v6 < a3 ) | |
{ | |
sub_14001C0D0(*(__int64 **)(*(_QWORD *)a1 + 8i64), v5[2], a3); | |
v6 = v5[2]; | |
} | |
memcpy((void *)(v6 + v5[1]), a2, a3); | |
v5[2] = a3 + v6; | |
return 0i64; | |
} | |
//----- (00000001400024F0) ---------------------------------------------------- | |
bool __fastcall sub_1400024F0(__int64 **a1, __int64 a2) | |
{ | |
return sub_1400065D0(*a1, a2); | |
} | |
//----- (0000000140002500) ---------------------------------------------------- | |
__int64 __fastcall sub_140002500(_BYTE *Buf2, size_t Size, char *Buf1, unsigned __int64 a4) | |
{ | |
__int64 v4; // rdi | |
unsigned __int8 v9; // al | |
__m128i v10; // xmm0 | |
__m128i v11; // xmm6 | |
unsigned __int8 v12; // cl | |
__int64 v13; // r15 | |
unsigned __int64 v14; // rdx | |
unsigned __int64 v15; // r8 | |
char *v16; // rbx | |
size_t v17; // rsi | |
int v18; // eax | |
unsigned __int64 v19; // rbx | |
__int64 v20; // r11 | |
unsigned __int64 v21; // r9 | |
unsigned __int64 v22; // rsi | |
__m128i v23; // xmm0 | |
__m128i v24; // xmm0 | |
__m128i v25; // xmm7 | |
size_t v26; // r13 | |
char *v27; // rbp | |
__int64 v28; // r12 | |
__m128i v29; // xmm12 | |
__m128i v30; // xmm10 | |
__m128i v31; // xmm8 | |
__m128i v32; // xmm13 | |
__m128i v33; // xmm11 | |
__m128i v34; // xmm9 | |
int v35; // r8d | |
int v36; // r8d | |
int v37; // r8d | |
int v38; // r8d | |
unsigned __int64 v39; // rax | |
unsigned __int64 v40; // rax | |
char v41; // r9 | |
size_t v42; // r14 | |
int v43; // r8d | |
int v44; // eax | |
__int64 v45; // rsi | |
int v46; // r8d | |
unsigned __int64 v47; // r9 | |
unsigned __int64 v48; // rbp | |
unsigned __int64 v49; // r15 | |
bool v50; // zf | |
unsigned __int64 v51; // r9 | |
unsigned __int64 v52; // r8 | |
__int64 v53; // r15 | |
unsigned __int64 v54; // r9 | |
unsigned __int64 v55; // rbx | |
__int64 v56; // r14 | |
unsigned __int64 v57; // r12 | |
unsigned __int64 v58; // r15 | |
__int64 v59; // r11 | |
__int64 v60; // r9 | |
__int64 v61; // rdi | |
char *v62; // r10 | |
char v63; // bp | |
unsigned __int64 v64; // r9 | |
unsigned __int64 v65; // r10 | |
char v66; // r11 | |
bool v67; // bl | |
int v68; // eax | |
char v69; // r11 | |
unsigned int v70; // r9d | |
int v71; // r10d | |
int v72; // esi | |
int v73; // r9d | |
__int64 v75; // rax | |
unsigned __int64 v76; // r11 | |
unsigned __int64 v77; // r15 | |
__int64 v78; // rcx | |
size_t v79; // [rsp+30h] [rbp-148h] | |
char *v80; // [rsp+40h] [rbp-138h] BYREF | |
unsigned __int64 v81; // [rsp+48h] [rbp-130h] | |
_BYTE *v82; // [rsp+50h] [rbp-128h] | |
unsigned __int64 v83; // [rsp+58h] [rbp-120h] | |
__int64 v84; // [rsp+60h] [rbp-118h] | |
unsigned __int64 v85; // [rsp+68h] [rbp-110h] | |
__int64 v86; // [rsp+78h] [rbp-100h] | |
__int64 v87; // [rsp+80h] [rbp-F8h] | |
__int64 v88; // [rsp+88h] [rbp-F0h] | |
unsigned __int64 v89; // [rsp+98h] [rbp-E0h] | |
__int64 v90; // [rsp+A8h] [rbp-D0h] | |
if ( Size >= a4 ) | |
{ | |
if ( Size != a4 ) | |
goto LABEL_103; | |
LOBYTE(v4) = memcmp(Buf2, Buf1, Size) == 0; | |
return (unsigned int)v4; | |
} | |
v9 = *Buf2; | |
if ( Size == 2 ) | |
{ | |
if ( a4 < 0x11 ) | |
goto LABEL_14; | |
v10 = _mm_cvtsi32_si128(v9); | |
v11 = _mm_shuffle_epi32(_mm_shufflelo_epi16(_mm_unpacklo_epi8(v10, v10), 0), 0); | |
v12 = Buf2[1]; | |
v13 = 1i64; | |
goto LABEL_25; | |
} | |
v14 = 0i64; | |
if ( Size >= 4 ) | |
v14 = Size - 4; | |
v15 = Size - 1; | |
do | |
{ | |
if ( v14 >= v15 + 1 ) | |
{ | |
sub_1400194E0((__int64)&v80, (__int64)Buf1, a4, Buf2, Size); | |
if ( v84 ) | |
{ | |
v19 = v89; | |
if ( v89 != -1i64 ) | |
{ | |
v20 = v88; | |
v21 = v83 + v88 - 1; | |
if ( v21 >= v81 ) | |
goto LABEL_103; | |
v22 = v83 - 1; | |
v4 = v87; | |
while ( 1 ) | |
{ | |
while ( !_bittest64(&v4, (unsigned __int8)v80[v21]) ) | |
{ | |
v20 += v83; | |
LABEL_51: | |
v19 = 0i64; | |
v21 = v22 + v20; | |
if ( v22 + v20 >= v81 ) | |
goto LABEL_103; | |
} | |
v47 = v19; | |
if ( v85 > v19 ) | |
v47 = v85; | |
v48 = v47; | |
while ( v48 < v83 ) | |
{ | |
if ( v20 + v48 >= v81 ) | |
{ | |
v76 = v47 + v20; | |
if ( v81 > v76 ) | |
v76 = v81; | |
sub_14001CD00(v76, v81, (__int64)&off_14001E4F0); | |
} | |
v49 = v48 + 1; | |
v50 = v82[v48] == (unsigned __int8)v80[v20 + v48]; | |
++v48; | |
if ( !v50 ) | |
{ | |
v20 = v49 + v20 - v85; | |
goto LABEL_51; | |
} | |
} | |
v51 = v85; | |
do | |
{ | |
if ( v19 >= v51 ) | |
goto LABEL_89; | |
if ( --v51 >= v83 ) | |
{ | |
v78 = v51; | |
goto LABEL_123; | |
} | |
if ( v51 + v20 >= v81 ) | |
sub_14001CD00(v51 + v20, v81, (__int64)&off_14001E520); | |
} | |
while ( v82[v51] == v80[v51 + v20] ); | |
v20 += v86; | |
v19 = v83 - v86; | |
v21 = v22 + v20; | |
if ( v22 + v20 >= v81 ) | |
goto LABEL_103; | |
} | |
} | |
v53 = v88; | |
v54 = v83 + v88 - 1; | |
if ( v54 >= v81 ) | |
goto LABEL_103; | |
v55 = v83 - 1; | |
v56 = v87; | |
v90 = v86; | |
v57 = v85 - 1; | |
while ( !_bittest64(&v56, (unsigned __int8)v80[v54]) ) | |
{ | |
v58 = v83 + v53; | |
LABEL_75: | |
v59 = v58; | |
LABEL_76: | |
v54 = v55 + v59; | |
LODWORD(v4) = 0; | |
v53 = v59; | |
if ( v55 + v59 >= v81 ) | |
return (unsigned int)v4; | |
} | |
v60 = 0i64; | |
v61 = v53; | |
v62 = &v82[v85]; | |
while ( v85 + v60 < v83 ) | |
{ | |
if ( v85 + v61 >= v81 ) | |
{ | |
v77 = v85 + v53; | |
if ( v81 > v77 ) | |
v77 = v81; | |
sub_14001CD00(v77, v81, (__int64)&off_14001E4F0); | |
} | |
v63 = *v62++; | |
v59 = v61 + 1; | |
++v60; | |
v50 = v63 == v80[v85 + v61++]; | |
if ( !v50 ) | |
goto LABEL_76; | |
} | |
v64 = v57 + v53; | |
v4 = (__int64)&v82[v85 - 1]; | |
v65 = 1 - v85; | |
while ( v65 != 1 ) | |
{ | |
if ( v57 >= v83 ) | |
{ | |
v78 = -(__int64)v65; | |
LABEL_123: | |
sub_14001CD00(v78, v83, (__int64)&off_14001E508); | |
} | |
if ( v64 >= v81 ) | |
sub_14001CD00(v64, v81, (__int64)&off_14001E520); | |
v66 = *(_BYTE *)v4; | |
++v65; | |
--v4; | |
v50 = v66 == v80[v64--]; | |
if ( !v50 ) | |
{ | |
v58 = v90 + v53; | |
goto LABEL_75; | |
} | |
} | |
goto LABEL_89; | |
} | |
if ( BYTE2(v86) ) | |
goto LABEL_103; | |
v52 = v85; | |
if ( v85 ) | |
{ | |
if ( v81 <= v85 ) | |
{ | |
if ( v81 != v85 ) | |
goto LABEL_111; | |
} | |
else if ( v80[v85] < -64 ) | |
{ | |
goto LABEL_111; | |
} | |
} | |
if ( v85 == v81 ) | |
{ | |
LOBYTE(v4) = 1; | |
if ( !(_BYTE)v86 ) | |
LABEL_103: | |
LODWORD(v4) = 0; | |
return (unsigned int)v4; | |
} | |
v69 = v80[v85]; | |
v70 = (unsigned __int8)v69; | |
if ( v69 < 0 ) | |
{ | |
v71 = v69 & 0x1F; | |
v72 = v80[v85 + 1] & 0x3F; | |
if ( (unsigned __int8)v69 < 0xE0u ) | |
{ | |
v70 = v72 | (v71 << 6); | |
} | |
else | |
{ | |
v73 = (v72 << 6) | v80[v85 + 2] & 0x3F; | |
if ( (unsigned __int8)v69 < 0xF0u ) | |
v70 = (v71 << 12) | v73; | |
else | |
v70 = ((v69 & 7) << 18) | (v73 << 6) | v80[v85 + 3] & 0x3F; | |
} | |
} | |
LOBYTE(v4) = 1; | |
if ( (_BYTE)v86 ) | |
return (unsigned int)v4; | |
if ( v70 == 1114112 ) | |
goto LABEL_103; | |
v75 = 1i64; | |
if ( v70 >= 0x80 ) | |
{ | |
v75 = 2i64; | |
if ( v70 >= 0x800 ) | |
v75 = 4i64 - (v70 < 0x10000); | |
} | |
v52 = v75 + v85; | |
if ( !(v75 + v85) ) | |
return (unsigned int)v4; | |
if ( v81 <= v52 ) | |
{ | |
if ( v81 == v52 ) | |
return (unsigned int)v4; | |
} | |
else if ( v80[v52] >= -64 ) | |
{ | |
return (unsigned int)v4; | |
} | |
LABEL_111: | |
sub_14001D0B0(v80, v81, v52, v81, (__int64)&off_14001E898); | |
} | |
v13 = v15; | |
if ( v15 >= Size ) | |
sub_14001CD00(v15, Size, (__int64)&off_14001E4D8); | |
v12 = Buf2[v15--]; | |
} | |
while ( v12 == v9 ); | |
if ( Size + 15 > a4 ) | |
{ | |
LABEL_14: | |
if ( Size > a4 ) | |
goto LABEL_103; | |
if ( memcmp(Buf1, Buf2, Size) ) | |
{ | |
v16 = Buf1 + 1; | |
v17 = a4 - 1; | |
do | |
{ | |
LOBYTE(v4) = v17 >= Size; | |
if ( v17 < Size ) | |
break; | |
v18 = memcmp(v16++, Buf2, Size); | |
--v17; | |
} | |
while ( v18 ); | |
return (unsigned int)v4; | |
} | |
LABEL_89: | |
LOBYTE(v4) = 1; | |
return (unsigned int)v4; | |
} | |
v23 = _mm_cvtsi32_si128(v9); | |
v11 = _mm_shuffle_epi32(_mm_shufflelo_epi16(_mm_unpacklo_epi8(v23, v23), 0), 0); | |
LABEL_25: | |
v24 = _mm_cvtsi32_si128(v12); | |
v25 = _mm_shuffle_epi32(_mm_shufflelo_epi16(_mm_unpacklo_epi8(v24, v24), 0), 0); | |
v80 = Buf1; | |
v81 = a4; | |
v82 = Buf2 + 1; | |
v79 = Size - 1; | |
v83 = Size - 1; | |
if ( Size + 63 < a4 ) | |
{ | |
v26 = Size + 127; | |
v27 = &Buf1[v13 + 48]; | |
LODWORD(v4) = 0; | |
v28 = 0i64; | |
while ( 1 ) | |
{ | |
v29 = _mm_loadu_si128((const __m128i *)&Buf1[v28 + 16]); | |
v30 = _mm_loadu_si128((const __m128i *)&Buf1[v28 + 32]); | |
v31 = _mm_loadu_si128((const __m128i *)&Buf1[v28 + 48]); | |
v32 = _mm_loadu_si128((const __m128i *)&v27[v28 - 32]); | |
v33 = _mm_loadu_si128((const __m128i *)&v27[v28 - 16]); | |
v34 = _mm_loadu_si128((const __m128i *)&v27[v28]); | |
v35 = _mm_movemask_epi8( | |
_mm_and_si128( | |
_mm_cmpeq_epi8(_mm_loadu_si128((const __m128i *)&Buf1[v13 + v28]), v25), | |
_mm_cmpeq_epi8(_mm_loadu_si128((const __m128i *)&Buf1[v28]), v11))); | |
if ( v35 ) | |
LOBYTE(v4) = sub_14001BE80(&v80, v28, v35, v4 & 1) | v4 & 1; | |
v36 = _mm_movemask_epi8(_mm_and_si128(_mm_cmpeq_epi8(v32, v25), _mm_cmpeq_epi8(v29, v11))); | |
if ( (_WORD)v36 ) | |
LOBYTE(v4) = sub_14001BE80(&v80, v28 + 16, v36, v4 & 1) | v4 & 1; | |
v37 = _mm_movemask_epi8(_mm_and_si128(_mm_cmpeq_epi8(v33, v25), _mm_cmpeq_epi8(v30, v11))); | |
if ( (_WORD)v37 ) | |
LOBYTE(v4) = sub_14001BE80(&v80, v28 + 32, v37, v4 & 1) | v4 & 1; | |
v38 = _mm_movemask_epi8(_mm_and_si128(_mm_cmpeq_epi8(v34, v25), _mm_cmpeq_epi8(v31, v11))); | |
if ( (_WORD)v38 ) | |
{ | |
LOBYTE(v4) = sub_14001BE80(&v80, v28 + 48, v38, v4 & 1) | v4 & 1; | |
v40 = v28 + v26; | |
v28 += 64i64; | |
if ( v40 >= a4 ) | |
goto LABEL_40; | |
} | |
else | |
{ | |
v39 = v28 + v26; | |
v28 += 64i64; | |
if ( v39 >= a4 ) | |
goto LABEL_40; | |
} | |
if ( (v4 & 1) != 0 ) | |
goto LABEL_40; | |
} | |
} | |
v28 = 0i64; | |
LODWORD(v4) = 0; | |
LABEL_40: | |
v41 = v4 & 1; | |
if ( Size + v28 + 15 < a4 && !v41 ) | |
{ | |
v42 = Size + 31; | |
do | |
{ | |
v43 = _mm_movemask_epi8( | |
_mm_and_si128( | |
_mm_cmpeq_epi8(_mm_loadu_si128((const __m128i *)&Buf1[v13 + v28]), v25), | |
_mm_cmpeq_epi8(_mm_loadu_si128((const __m128i *)&Buf1[v28]), v11))); | |
if ( v43 ) | |
{ | |
LOBYTE(v44) = sub_14001BE80(&v80, v28, v43, 0); | |
LODWORD(v4) = v44; | |
} | |
v41 = v4 & 1; | |
if ( v42 + v28 >= a4 ) | |
break; | |
v28 += 16i64; | |
} | |
while ( !v41 ); | |
} | |
v45 = a4 - v79; | |
v46 = _mm_movemask_epi8( | |
_mm_and_si128( | |
_mm_cmpeq_epi8(_mm_loadu_si128((const __m128i *)&Buf1[v45 - 16 + v13]), v25), | |
_mm_cmpeq_epi8(_mm_loadu_si128((const __m128i *)&Buf1[v45 - 16]), v11))); | |
if ( v46 ) | |
{ | |
v67 = v41 != 0; | |
LOBYTE(v68) = sub_14001BE80(&v80, v45 - 16, v46, v41); | |
LODWORD(v4) = v68; | |
LOBYTE(v4) = v67 | v68; | |
} | |
LOBYTE(v4) = v4 & 1; | |
return (unsigned int)v4; | |
} | |
// 14000292C: variable 'v44' is possibly undefined | |
// 140002B7B: variable 'v68' is possibly undefined | |
// 140002C34: variable 'v4' is possibly undefined | |
// 14001E4D8: using guessed type char *off_14001E4D8; | |
// 14001E4F0: using guessed type char *off_14001E4F0; | |
// 14001E508: using guessed type char *off_14001E508; | |
// 14001E520: using guessed type char *off_14001E520; | |
// 14001E898: using guessed type char *off_14001E898; | |
//----- (0000000140002D80) ---------------------------------------------------- | |
__int64 __fastcall sub_140002D80(__int64 a1) | |
{ | |
__int64 v2; // rdx | |
__int64 result; // rax | |
v2 = *(_QWORD *)(a1 + 32); | |
if ( v2 ) | |
result = sub_1400010E0(*(_QWORD *)(a1 + 40), v2, 1i64); | |
if ( a1 != -1 && !_InterlockedDecrement64((volatile signed __int64 *)(a1 + 8)) ) | |
return sub_1400010E0(a1, 56i64, 8i64); | |
return result; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140002DF0) ---------------------------------------------------- | |
_BYTE *__fastcall sub_140002DF0(__int64 a1) | |
{ | |
_BYTE *result; // rax | |
__int64 v3; // rdx | |
result = *(_BYTE **)(a1 + 16); | |
if ( result ) | |
{ | |
*result = 0; | |
v3 = *(_QWORD *)(a1 + 24); | |
if ( v3 ) | |
result = (_BYTE *)sub_1400010E0(*(_QWORD *)(a1 + 16), v3, 1i64); | |
} | |
if ( a1 != -1 && !_InterlockedDecrement64((volatile signed __int64 *)(a1 + 8)) ) | |
return (_BYTE *)sub_1400010E0(a1, 48i64, 8i64); | |
return result; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140002E50) ---------------------------------------------------- | |
__int64 __fastcall sub_140002E50(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
__int64 result; // rax | |
if ( a2 ) | |
return sub_1400010E0(a1, a2, a3); | |
return result; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140002E60) ---------------------------------------------------- | |
__int64 __fastcall sub_140002E60(__int64 a1) | |
{ | |
return sub_1400010E0(a1, 24i64, 8i64); | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140002E70) ---------------------------------------------------- | |
_BYTE *__fastcall sub_140002E70(__int64 *a1, unsigned int a2) | |
{ | |
char v2; // di | |
__int64 v4; // rdx | |
_BYTE *result; // rax | |
size_t v6; // rdi | |
__int64 v7; // rbx | |
int Src; // [rsp+2Ch] [rbp-1Ch] BYREF | |
v2 = a2; | |
if ( a2 > 0x7F ) | |
{ | |
Src = 0; | |
if ( a2 >= 0x800 ) | |
{ | |
if ( a2 > 0xFFFF ) | |
{ | |
LOBYTE(Src) = (a2 >> 18) & 7 | 0xF0; | |
BYTE1(Src) = (a2 >> 12) & 0x3F | 0x80; | |
BYTE2(Src) = (a2 >> 6) & 0x3F | 0x80; | |
HIBYTE(Src) = a2 & 0x3F | 0x80; | |
v6 = 4i64; | |
} | |
else | |
{ | |
LOBYTE(Src) = (a2 >> 12) | 0xE0; | |
BYTE1(Src) = (a2 >> 6) & 0x3F | 0x80; | |
BYTE2(Src) = a2 & 0x3F | 0x80; | |
v6 = 3i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(Src) = (a2 >> 6) | 0xC0; | |
BYTE1(Src) = a2 & 0x3F | 0x80; | |
v6 = 2i64; | |
} | |
v7 = a1[2]; | |
if ( *a1 - v7 < v6 ) | |
{ | |
sub_14001C0D0(a1, a1[2], v6); | |
v7 = a1[2]; | |
} | |
result = memcpy((void *)(v7 + a1[1]), &Src, v6); | |
a1[2] = v6 + v7; | |
} | |
else | |
{ | |
v4 = a1[2]; | |
if ( v4 == *a1 ) | |
{ | |
sub_1400030E0(a1, v4); | |
v4 = a1[2]; | |
} | |
result = (_BYTE *)a1[1]; | |
result[v4] = v2; | |
a1[2] = v4 + 1; | |
} | |
return result; | |
} | |
//----- (0000000140002F90) ---------------------------------------------------- | |
__int64 __fastcall sub_140002F90(__int64 *a1, __int64 a2, __int64 a3, __int64 a4) | |
{ | |
size_t v7; // rdx | |
__int64 v8; // rax | |
__int64 result; // rax | |
if ( !a3 ) | |
{ | |
a1[1] = a2; | |
a1[2] = 0i64; | |
goto LABEL_10; | |
} | |
if ( *(_QWORD *)(a4 + 16) && (v7 = *(_QWORD *)(a4 + 8)) != 0 ) | |
{ | |
v8 = sub_1400010F0(*(void **)a4, v7); | |
if ( !v8 ) | |
{ | |
LABEL_5: | |
a1[1] = a2; | |
a1[2] = a3; | |
LABEL_10: | |
result = 1i64; | |
goto LABEL_11; | |
} | |
} | |
else if ( a2 ) | |
{ | |
v8 = sub_1400010D0(a2, a3); | |
if ( !v8 ) | |
goto LABEL_5; | |
} | |
else | |
{ | |
v8 = a3; | |
} | |
a1[1] = v8; | |
a1[2] = a2; | |
result = 0i64; | |
LABEL_11: | |
*a1 = result; | |
return result; | |
} | |
// 140003015: conditional instruction was optimized away because r8.8!=0 | |
// 1400010D0: using guessed type __int64 __fastcall sub_1400010D0(_QWORD, _QWORD); | |
//----- (0000000140003020) ---------------------------------------------------- | |
__int64 __fastcall sub_140003020(unsigned __int64 *a1, __int64 a2) | |
{ | |
unsigned __int64 v2; // rdx | |
unsigned __int64 v4; // rcx | |
unsigned __int64 v5; // rdi | |
__int64 result; // rax | |
__int64 v7[2]; // [rsp+28h] [rbp-40h] BYREF | |
__int64 v8; // [rsp+38h] [rbp-30h] | |
__int64 v9[2]; // [rsp+40h] [rbp-28h] BYREF | |
__int64 v10; // [rsp+50h] [rbp-18h] | |
v2 = a2 + 1; | |
if ( !v2 ) | |
LABEL_12: | |
sub_140015AA0(); | |
v4 = *a1; | |
if ( 2 * v4 > v2 ) | |
v2 = 2 * v4; | |
v5 = 4i64; | |
if ( v2 >= 5 ) | |
v5 = v2; | |
if ( v4 ) | |
{ | |
v7[0] = a1[1]; | |
v7[1] = 2 * v4; | |
v8 = 2i64; | |
} | |
else | |
{ | |
v8 = 0i64; | |
} | |
result = sub_140002F90(v9, 2 * v5, 2i64 * (v5 >> 62 == 0), (__int64)v7); | |
if ( v9[0] ) | |
{ | |
result = 0x8000000000000001ui64; | |
if ( v10 != 0x8000000000000001ui64 ) | |
{ | |
if ( v10 ) | |
sub_14001CB30(); | |
goto LABEL_12; | |
} | |
} | |
else | |
{ | |
a1[1] = v9[1]; | |
*a1 = v5; | |
} | |
return result; | |
} | |
//----- (00000001400030E0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400030E0(__int64 *a1, __int64 a2) | |
{ | |
unsigned __int64 v2; // rdx | |
__int64 v4; // rax | |
unsigned __int64 v5; // rcx | |
__int64 v6; // rdi | |
__int64 result; // rax | |
__int64 v8[2]; // [rsp+28h] [rbp-40h] BYREF | |
__int64 v9; // [rsp+38h] [rbp-30h] | |
__int64 v10[2]; // [rsp+40h] [rbp-28h] BYREF | |
__int64 v11; // [rsp+50h] [rbp-18h] | |
v2 = a2 + 1; | |
if ( !v2 ) | |
LABEL_12: | |
sub_140015AA0(); | |
v4 = *a1; | |
v5 = 2 * *a1; | |
if ( v5 > v2 ) | |
v2 = v5; | |
v6 = 8i64; | |
if ( v2 >= 9 ) | |
v6 = v2; | |
if ( v4 ) | |
{ | |
v8[0] = a1[1]; | |
v8[1] = v4; | |
v9 = 1i64; | |
} | |
else | |
{ | |
v9 = 0i64; | |
} | |
result = sub_140002F90(v10, v6, v6 >= 0, (__int64)v8); | |
if ( v10[0] ) | |
{ | |
result = 0x8000000000000001ui64; | |
if ( v11 != 0x8000000000000001ui64 ) | |
{ | |
if ( v11 ) | |
sub_14001CB30(); | |
goto LABEL_12; | |
} | |
} | |
else | |
{ | |
a1[1] = v10[1]; | |
*a1 = v6; | |
} | |
return result; | |
} | |
//----- (00000001400031A0) ---------------------------------------------------- | |
unsigned __int64 __fastcall sub_1400031A0(__int64 a1) | |
{ | |
unsigned __int64 v1; // rcx | |
__int64 v2; // rax | |
unsigned __int64 v3; // rsi | |
unsigned __int64 result; // rax | |
__int64 v5[2]; // [rsp+20h] [rbp-38h] BYREF | |
__int64 v6; // [rsp+30h] [rbp-28h] | |
__int64 v7[2]; // [rsp+38h] [rbp-20h] BYREF | |
__int64 v8; // [rsp+48h] [rbp-10h] | |
v1 = a1 + 1; | |
if ( !v1 ) | |
LABEL_14: | |
sub_140015AA0(); | |
v2 = *(_QWORD *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 40i64); | |
if ( 2 * v2 > v1 ) | |
v1 = 2 * v2; | |
v3 = 4i64; | |
if ( v1 >= 5 ) | |
v3 = v1; | |
if ( v2 ) | |
{ | |
v5[0] = *(_QWORD *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 48i64); | |
v5[1] = 16 * v2; | |
v6 = 8i64; | |
} | |
else | |
{ | |
v6 = 0i64; | |
} | |
sub_140002F90(v7, 16 * v3, 8i64 * (v3 >> 59 == 0), (__int64)v5); | |
if ( !v7[0] ) | |
{ | |
result = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
*(_QWORD *)(result + 48) = v7[1]; | |
*(_QWORD *)(result + 40) = v3; | |
return result; | |
} | |
result = 0x8000000000000001ui64; | |
if ( v8 != 0x8000000000000001ui64 ) | |
{ | |
if ( v8 ) | |
sub_14001CB30(); | |
goto LABEL_14; | |
} | |
return result; | |
} | |
// 140027270: using guessed type int TlsIndex; | |
//----- (00000001400032B0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400032B0(__int64 a1, __int64 *a2) | |
{ | |
return sub_1400183F0(*(unsigned __int8 **)(a1 + 8), *(_QWORD *)(a1 + 16), a2); | |
} | |
//----- (00000001400032D0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400032D0(_QWORD *a1, _QWORD *a2) | |
{ | |
_QWORD *v3; // [rsp+30h] [rbp-8h] BYREF | |
if ( *a1 ) | |
{ | |
v3 = a1; | |
return sub_140017CA0(a2, (__int64)"ErrOk", 3i64, (__int64)&v3, (__int64)&off_14001E858); | |
} | |
else | |
{ | |
v3 = a1; | |
return sub_140017CA0(a2, (__int64)"Ok", 2i64, (__int64)&v3, (__int64)&off_14001E878); | |
} | |
} | |
// 14001E858: using guessed type __int64 (__fastcall *off_14001E858)(); | |
// 14001E878: using guessed type __int64 (__fastcall *off_14001E878)(); | |
//----- (0000000140003340) ---------------------------------------------------- | |
void __fastcall sub_140003340(unsigned __int64 *a1, __int64 a2) | |
{ | |
unsigned int v4; // r15d | |
char *v5; // rcx | |
char v6; // dl | |
int v7; // eax | |
int v8; // r8d | |
int v9; // r15d | |
__int16 v10; // bp | |
__int64 v11; // rbx | |
__int64 v12; // r8 | |
bool v13; // cf | |
unsigned __int64 v14; // r8 | |
unsigned int v15; // eax | |
__int16 v16; // r15 | |
for ( LOWORD(v4) = *(_WORD *)(a2 + 16); ; LOWORD(v4) = v10 ) | |
{ | |
if ( (_WORD)v4 ) | |
{ | |
*(_WORD *)(a2 + 16) = 0; | |
goto LABEL_12; | |
} | |
v5 = *(char **)(a2 + 8); | |
if ( v5 == *(char **)a2 ) | |
break; | |
*(_QWORD *)(a2 + 8) = v5 + 1; | |
v6 = *v5; | |
LOWORD(v4) = (unsigned __int8)*v5; | |
if ( *v5 < 0 ) | |
{ | |
v7 = v4 & 0x1F; | |
*(_QWORD *)(a2 + 8) = v5 + 2; | |
v8 = v5[1] & 0x3F; | |
if ( (unsigned __int8)v4 <= 0xDFu ) | |
{ | |
LOWORD(v4) = v8 | ((_WORD)v7 << 6); | |
} | |
else | |
{ | |
*(_QWORD *)(a2 + 8) = v5 + 3; | |
v9 = (v8 << 6) | v5[2] & 0x3F; | |
if ( (unsigned __int8)v6 < 0xF0u ) | |
{ | |
v4 = (v7 << 12) | v9; | |
if ( v4 > 0xFFFF ) | |
{ | |
LABEL_17: | |
v15 = ((v4 + 16711680) >> 10) | 0xD800; | |
v16 = v4 & 0x3FF | 0xDC00; | |
*(_WORD *)(a2 + 16) = v16; | |
v10 = v16; | |
LOWORD(v4) = v15; | |
v11 = a1[2]; | |
if ( v11 != *a1 ) | |
goto LABEL_2; | |
goto LABEL_13; | |
} | |
} | |
else | |
{ | |
*(_QWORD *)(a2 + 8) = v5 + 4; | |
v4 = ((v7 & 7) << 18) | (v9 << 6) | v5[3] & 0x3F; | |
if ( v4 > 0xFFFF ) | |
goto LABEL_17; | |
} | |
} | |
} | |
LABEL_12: | |
v10 = 0; | |
v11 = a1[2]; | |
if ( v11 != *a1 ) | |
goto LABEL_2; | |
LABEL_13: | |
v12 = *(_QWORD *)a2 - *(_QWORD *)(a2 + 8); | |
v13 = __CFADD__(v12, 3i64); | |
v14 = v12 + 3; | |
if ( v13 ) | |
v14 = -1i64; | |
sub_14001C010(a1, v11, (v14 >> 2) - (v10 == 0) + 2); | |
LABEL_2: | |
*(_WORD *)(a1[1] + 2 * v11) = v4; | |
a1[2] = v11 + 1; | |
} | |
} | |
//----- (00000001400034D0) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
void __fastcall sub_1400034D0( | |
__int64 a1, | |
__int64 a2, | |
__int64 a3, | |
__int64 a4, | |
int a5, | |
int a6, | |
int a7, | |
int a8, | |
int a9, | |
int a10, | |
__int64 a11) | |
{ | |
ULONG StackSizeInBytes[2]; // [rsp+448h] [rbp+30h] BYREF | |
char **v12; // [rsp+458h] [rbp+40h] | |
__int64 v13; // [rsp+460h] [rbp+48h] | |
const char *v14; // [rsp+468h] [rbp+50h] | |
__int64 v15; // [rsp+470h] [rbp+58h] | |
__int64 v16; // [rsp+488h] [rbp+70h] | |
__int64 v17; // [rsp+490h] [rbp+78h] | |
__int64 v18; // [rsp+4A0h] [rbp+88h] | |
v18 = -2i64; | |
v17 = a2; | |
v16 = a1; | |
if ( AddVectoredExceptionHandler(0, (PVECTORED_EXCEPTION_HANDLER)Handler) ) | |
{ | |
StackSizeInBytes[0] = 20480; | |
if ( SetThreadStackGuarantee(StackSizeInBytes) || GetLastError() == 120 ) | |
JUMPOUT(0x140003534i64); | |
v12 = &off_140020520; | |
v13 = 1i64; | |
*(_QWORD *)StackSizeInBytes = 0i64; | |
v14 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v15 = 0i64; | |
JUMPOUT(0x1400036FDi64); | |
} | |
v12 = &off_1400205E8; | |
v13 = 1i64; | |
*(_QWORD *)StackSizeInBytes = 0i64; | |
v14 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v15 = 0i64; | |
JUMPOUT(0x140003615i64); | |
} | |
// 1400035E6: positive sp value 148 has been found | |
// 14000352E: control flows out of bounds to 140003534 | |
// 14000360D: control flows out of bounds to 140003615 | |
// 1400036F5: control flows out of bounds to 1400036FD | |
// 140020520: using guessed type char *off_140020520; | |
// 1400205E8: using guessed type char *off_1400205E8; | |
//----- (0000000140003AF0) ---------------------------------------------------- | |
void __noreturn sub_140003AF0() | |
{ | |
__int64 v0; // rax | |
__int64 v1[8]; // [rsp+28h] [rbp-70h] BYREF | |
__int64 v2[6]; // [rsp+68h] [rbp-30h] BYREF | |
v2[2] = (__int64)&off_14001E978; | |
v2[3] = 1i64; | |
v2[0] = 0i64; | |
v2[4] = (__int64)"/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v2[5] = 0i64; | |
v1[0] = (__int64)v2; | |
v1[1] = (__int64)sub_140017290; | |
v1[4] = (__int64)&off_14001E8D0; | |
v1[5] = 2i64; | |
v1[2] = 0i64; | |
v1[6] = (__int64)v1; | |
v1[7] = 1i64; | |
sub_140006220(); | |
sub_140001B00(v0); | |
__fastfail(7u); | |
} | |
// 140003B99: variable 'v0' is possibly undefined | |
// 14001E8D0: using guessed type void *off_14001E8D0; | |
// 14001E978: using guessed type char *off_14001E978; | |
//----- (0000000140003BB0) ---------------------------------------------------- | |
void __noreturn sub_140003BB0() | |
{ | |
__int64 v0; // rax | |
__int64 v1[8]; // [rsp+28h] [rbp-70h] BYREF | |
__int64 v2[6]; // [rsp+68h] [rbp-30h] BYREF | |
v2[2] = (__int64)&off_14001E9B0; | |
v2[3] = 1i64; | |
v2[0] = 0i64; | |
v2[4] = (__int64)"/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v2[5] = 0i64; | |
v1[0] = (__int64)v2; | |
v1[1] = (__int64)sub_140017290; | |
v1[4] = (__int64)&off_14001E8D0; | |
v1[5] = 2i64; | |
v1[2] = 0i64; | |
v1[6] = (__int64)v1; | |
v1[7] = 1i64; | |
sub_140006220(); | |
sub_140001B00(v0); | |
__fastfail(7u); | |
} | |
// 140003C59: variable 'v0' is possibly undefined | |
// 14001E8D0: using guessed type void *off_14001E8D0; | |
// 14001E9B0: using guessed type char *off_14001E9B0; | |
//----- (0000000140003C70) ---------------------------------------------------- | |
char __fastcall sub_140003C70(__int64 a1, _QWORD *a2) | |
{ | |
char v3[24]; // [rsp+20h] [rbp-18h] BYREF | |
sub_140017C70((__int64)v3, a2, (__int64)&unk_14001E9C0, 11i64); | |
return sub_140016D20(v3); | |
} | |
//----- (0000000140003CA0) ---------------------------------------------------- | |
void sub_140003CA0() | |
{ | |
JUMPOUT(0x140003CC9i64); | |
} | |
// 140003CC5: control flows out of bounds to 140003CC9 | |
//----- (0000000140003DE0) ---------------------------------------------------- | |
__int64 __fastcall sub_140003DE0(__int64 a1) | |
{ | |
__int64 v1; // r8 | |
WCHAR *p_Buffer; // r12 | |
unsigned __int64 v3; // rsi | |
unsigned __int64 i; // r15 | |
DWORD CurrentDirectoryW; // r14d | |
unsigned __int64 v6; // r15 | |
__int128 v7; // xmm0 | |
__int64 v8; // rsi | |
__int64 v10; // rax | |
WCHAR Buffer; // [rsp+28h] [rbp-58h] BYREF | |
__int128 v12[2]; // [rsp+428h] [rbp+3A8h] BYREF | |
__int64 v13; // [rsp+448h] [rbp+3C8h] | |
__int64 v14; // [rsp+450h] [rbp+3D0h] | |
__int64 v15; // [rsp+458h] [rbp+3D8h] | |
__int64 v16; // [rsp+460h] [rbp+3E0h] | |
__int64 v17; // [rsp+468h] [rbp+3E8h] | |
__int64 v18; // [rsp+470h] [rbp+3F0h] | |
v18 = -2i64; | |
v16 = a1; | |
v13 = 0i64; | |
v14 = 2i64; | |
v15 = 0i64; | |
v1 = 512i64; | |
v17 = 2i64; | |
LABEL_4: | |
while ( 2 ) | |
{ | |
p_Buffer = &Buffer; | |
v3 = 512i64; | |
for ( i = v1; ; i = 0i64 ) | |
{ | |
SetLastError(0); | |
CurrentDirectoryW = GetCurrentDirectoryW(i, p_Buffer); | |
if ( !CurrentDirectoryW && GetLastError() ) | |
{ | |
LODWORD(v10) = GetLastError(); | |
v8 = v16; | |
*(_QWORD *)v16 = (v10 << 32) | 2; | |
*(_BYTE *)(v8 + 24) = 2; | |
return v8; | |
} | |
v1 = CurrentDirectoryW; | |
if ( i != CurrentDirectoryW ) | |
break; | |
if ( GetLastError() != 122 ) | |
sub_14001CC50( | |
(__int64)"internal error: entered unreachable code/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
40i64, | |
(__int64)&off_1400203B8); | |
v6 = 2 * i; | |
if ( v6 >= 0xFFFFFFFF ) | |
v6 = 0xFFFFFFFFi64; | |
v1 = v6; | |
if ( v6 < 0x201 ) | |
goto LABEL_4; | |
LABEL_5: | |
if ( v1 ) | |
JUMPOUT(0x140003E8Bi64); | |
v15 = 0i64; | |
p_Buffer = (WCHAR *)v17; | |
v3 = 0i64; | |
} | |
if ( i < CurrentDirectoryW ) | |
{ | |
if ( CurrentDirectoryW < 0x201ui64 ) | |
continue; | |
goto LABEL_5; | |
} | |
break; | |
} | |
if ( v3 < CurrentDirectoryW ) | |
sub_14001D040(CurrentDirectoryW, v3, (__int64)&off_1400203D0); | |
sub_1400066C0(v12, p_Buffer, CurrentDirectoryW); | |
v7 = v12[0]; | |
v8 = v16; | |
*(_OWORD *)(v16 + 16) = v12[1]; | |
*(_OWORD *)v8 = v7; | |
return v8; | |
} | |
// 140003E89: control flows out of bounds to 140003E8B | |
// 140003FAE: variable 'v10' is possibly undefined | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
// 1400203B8: using guessed type char *off_1400203B8; | |
// 1400203D0: using guessed type char *off_1400203D0; | |
//----- (0000000140004050) ---------------------------------------------------- | |
__int64 __fastcall sub_140004050(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
const WCHAR *v4; // rdi | |
unsigned __int64 v5; // r8 | |
unsigned __int64 v6; // r14 | |
unsigned __int64 v7; // r13 | |
WCHAR *v8; // r12 | |
unsigned __int64 v9; // rsi | |
unsigned __int64 i; // rbx | |
const WCHAR *v11; // r15 | |
DWORD EnvironmentVariableW; // edi | |
bool v13; // cf | |
unsigned __int64 v14; // rbx | |
unsigned __int64 v16; // r14 | |
__int64 v17; // [rsp+0h] [rbp-80h] BYREF | |
WCHAR Buffer[4]; // [rsp+20h] [rbp-60h] BYREF | |
LPCWSTR lpName; // [rsp+28h] [rbp-58h] | |
__int64 v20; // [rsp+30h] [rbp-50h] | |
__int64 v21; // [rsp+438h] [rbp+3B8h] | |
LPCWSTR v22; // [rsp+440h] [rbp+3C0h] | |
__int64 v23; // [rsp+448h] [rbp+3C8h] | |
__int64 v24; // [rsp+470h] [rbp+3F0h] | |
__int64 v25; // [rsp+478h] [rbp+3F8h] | |
__int64 v26; // [rsp+480h] [rbp+400h] | |
unsigned __int64 v27; // [rsp+488h] [rbp+408h] | |
__int64 v28; // [rsp+490h] [rbp+410h] | |
__int64 v29; // [rsp+4A0h] [rbp+420h] | |
unsigned __int64 v30; // [rsp+4A8h] [rbp+428h] | |
__int64 v31; // [rsp+4B0h] [rbp+430h] | |
v31 = -2i64; | |
sub_14000D3F0((__int64)(&v17 + 4), a2, a3); | |
v4 = lpName; | |
if ( lpName ) | |
{ | |
v28 = a1; | |
v24 = *(_QWORD *)Buffer; | |
v21 = *(_QWORD *)Buffer; | |
v22 = lpName; | |
v23 = v20; | |
v25 = 0i64; | |
v26 = 2i64; | |
v27 = 0i64; | |
v5 = 512i64; | |
v29 = 2i64; | |
v30 = 0i64; | |
v6 = 0i64; | |
v7 = 0i64; | |
LABEL_5: | |
v8 = Buffer; | |
v9 = 512i64; | |
for ( i = v5; ; i = v7 ) | |
{ | |
SetLastError(0); | |
v11 = v4; | |
EnvironmentVariableW = GetEnvironmentVariableW(v4, v8, i); | |
if ( !EnvironmentVariableW ) | |
{ | |
if ( GetLastError() ) | |
break; | |
} | |
v5 = EnvironmentVariableW; | |
v13 = i < EnvironmentVariableW; | |
if ( i == EnvironmentVariableW ) | |
{ | |
if ( GetLastError() != 122 ) | |
JUMPOUT(0x1400043E0i64); | |
v4 = v11; | |
v14 = 2 * i; | |
if ( v14 >= 0xFFFFFFFF ) | |
v14 = 0xFFFFFFFFi64; | |
v5 = v14; | |
if ( v14 < 0x201 ) | |
goto LABEL_5; | |
} | |
else | |
{ | |
v4 = v11; | |
if ( !v13 ) | |
{ | |
if ( v9 >= v5 ) | |
JUMPOUT(0x14000427Ci64); | |
sub_14001D040(v5, v9, (__int64)&off_1400203D0); | |
} | |
if ( v5 < 0x201 ) | |
goto LABEL_5; | |
} | |
v13 = v6 - v7 < v5 - v7; | |
v6 = v30; | |
if ( v13 ) | |
JUMPOUT(0x140004142i64); | |
v7 = 0xFFFFFFFFi64; | |
if ( v30 < 0xFFFFFFFF ) | |
v7 = v30; | |
v27 = v7; | |
v8 = (WCHAR *)v29; | |
v9 = v7; | |
} | |
v16 = ((unsigned __int64)GetLastError() << 32) | 2; | |
if ( v30 ) | |
sub_1400010E0(v29, 2 * v30, 2i64); | |
a1 = v28; | |
*(_BYTE *)(v28 + 24) = 2; | |
if ( (v16 & 3) == 1 ) | |
{ | |
v30 = v16 - 1; | |
JUMPOUT(0x140004312i64); | |
} | |
if ( v24 ) | |
sub_1400010E0(v11, 2 * v24, 2i64); | |
} | |
else | |
{ | |
if ( (Buffer[0] & 3) == 1 ) | |
{ | |
v30 = *(_QWORD *)Buffer - 1i64; | |
v29 = *(_QWORD *)Buffer; | |
JUMPOUT(0x14000422Ei64); | |
} | |
*(_BYTE *)(a1 + 24) = 2; | |
} | |
return a1; | |
} | |
// 140004140: control flows out of bounds to 140004142 | |
// 14000422A: control flows out of bounds to 14000422E | |
// 140004276: control flows out of bounds to 14000427C | |
// 14000430E: control flows out of bounds to 140004312 | |
// 1400041D9: control flows out of bounds to 1400043E0 | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
// 1400203D0: using guessed type char *off_1400203D0; | |
//----- (0000000140004570) ---------------------------------------------------- | |
__int64 __fastcall sub_140004570(__int64 a1) | |
{ | |
if ( *(_QWORD *)(a1 + 16) ) | |
{ | |
*(_BYTE *)(a1 + 29) = 1; | |
JUMPOUT(0x1400045D7i64); | |
} | |
return 0i64; | |
} | |
// 1400045D4: control flows out of bounds to 1400045D7 | |
//----- (0000000140004820) ---------------------------------------------------- | |
__int64 __fastcall sub_140004820(unsigned __int64 *a1, __int64 *a2) | |
{ | |
unsigned __int64 v3; // rdx | |
__int64 result; // rax | |
__int64 *v5; // rax | |
__int64 v6; // rcx | |
__int128 v7; // [rsp+20h] [rbp-60h] BYREF | |
char **v8; // [rsp+30h] [rbp-50h] | |
__int64 v9; // [rsp+38h] [rbp-48h] | |
__int64 **v10; // [rsp+40h] [rbp-40h] | |
__int64 v11; // [rsp+48h] [rbp-38h] | |
__int64 *v12; // [rsp+50h] [rbp-30h] BYREF | |
__int64 (__fastcall *v13)(__int64, __int64 *); // [rsp+58h] [rbp-28h] | |
int *v14; // [rsp+60h] [rbp-20h] | |
__int64 (__fastcall *v15)(unsigned int *, __int64); // [rsp+68h] [rbp-18h] | |
__int64 v16[3]; // [rsp+70h] [rbp-10h] BYREF | |
int v17; // [rsp+8Ch] [rbp+Ch] BYREF | |
__int64 v18; // [rsp+90h] [rbp+10h] | |
v18 = -2i64; | |
v3 = *a1; | |
switch ( *a1 & 3 ) | |
{ | |
case 0ui64: | |
result = sub_1400183F0(*(unsigned __int8 **)v3, *(_QWORD *)(v3 + 8), a2); | |
break; | |
case 1ui64: | |
result = (*(__int64 (__fastcall **)(_QWORD, __int64 *))(*(_QWORD *)(v3 + 7) + 32i64))(*(_QWORD *)(v3 - 1), a2); | |
break; | |
case 2ui64: | |
v17 = HIDWORD(*a1); | |
sub_14000BB40((__int64)v16, SHIDWORD(v3)); | |
v12 = v16; | |
v13 = sub_1400032B0; | |
v14 = &v17; | |
v15 = sub_14001AAA0; | |
v8 = &off_14001EF30; | |
v9 = 3i64; | |
*(_QWORD *)&v7 = 0i64; | |
v10 = &v12; | |
v11 = 2i64; | |
JUMPOUT(0x1400048EDi64); | |
case 3ui64: | |
switch ( HIDWORD(v3) ) | |
{ | |
case 0u: | |
JUMPOUT(0x140004930i64); | |
case 1u: | |
JUMPOUT(0x140004941i64); | |
case 2u: | |
JUMPOUT(0x140004952i64); | |
case 3u: | |
JUMPOUT(0x140004963i64); | |
case 4u: | |
JUMPOUT(0x140004974i64); | |
case 5u: | |
v5 = (__int64 *)&unk_14001EEB7; | |
goto LABEL_19; | |
case 6u: | |
JUMPOUT(0x140004991i64); | |
case 7u: | |
JUMPOUT(0x1400049A2i64); | |
case 8u: | |
JUMPOUT(0x1400049B3i64); | |
case 9u: | |
JUMPOUT(0x1400049C4i64); | |
case 0xAu: | |
JUMPOUT(0x1400049D5i64); | |
case 0xBu: | |
JUMPOUT(0x1400049E6i64); | |
case 0xCu: | |
JUMPOUT(0x1400049F7i64); | |
case 0xDu: | |
JUMPOUT(0x140004A08i64); | |
case 0xEu: | |
JUMPOUT(0x140004A19i64); | |
case 0xFu: | |
JUMPOUT(0x140004A2Ai64); | |
case 0x10u: | |
v5 = (__int64 *)&unk_14001EE04; | |
goto LABEL_19; | |
case 0x11u: | |
JUMPOUT(0x140004A47i64); | |
case 0x12u: | |
JUMPOUT(0x140004A58i64); | |
case 0x13u: | |
JUMPOUT(0x140004A69i64); | |
case 0x14u: | |
JUMPOUT(0x140004A7Ai64); | |
case 0x15u: | |
JUMPOUT(0x140004A8Bi64); | |
case 0x16u: | |
JUMPOUT(0x140004A9Ci64); | |
case 0x17u: | |
JUMPOUT(0x140004AADi64); | |
case 0x18u: | |
JUMPOUT(0x140004ABEi64); | |
case 0x19u: | |
JUMPOUT(0x140004ACFi64); | |
case 0x1Au: | |
JUMPOUT(0x140004AE0i64); | |
case 0x1Bu: | |
JUMPOUT(0x140004AF1i64); | |
case 0x1Cu: | |
JUMPOUT(0x140004B02i64); | |
case 0x1Du: | |
JUMPOUT(0x140004B13i64); | |
case 0x1Eu: | |
JUMPOUT(0x140004B24i64); | |
case 0x1Fu: | |
v5 = (__int64 *)&unk_14001ECC5; | |
v6 = 27i64; | |
goto LABEL_20; | |
case 0x20u: | |
v5 = (__int64 *)&unk_14001ECB7; | |
v6 = 14i64; | |
goto LABEL_20; | |
case 0x21u: | |
v5 = (__int64 *)&unk_14001ECA7; | |
v6 = 16i64; | |
goto LABEL_20; | |
case 0x22u: | |
v5 = (__int64 *)&unk_14001EC91; | |
v6 = 22i64; | |
goto LABEL_20; | |
case 0x23u: | |
v5 = (__int64 *)&unk_14001EC7C; | |
v6 = 21i64; | |
goto LABEL_20; | |
case 0x24u: | |
v5 = (__int64 *)&unk_14001EC71; | |
v6 = 11i64; | |
goto LABEL_20; | |
case 0x25u: | |
v5 = (__int64 *)&unk_14001EC5B; | |
v6 = 22i64; | |
goto LABEL_20; | |
case 0x26u: | |
v5 = (__int64 *)&unk_14001EC4E; | |
v6 = 13i64; | |
goto LABEL_20; | |
case 0x27u: | |
v5 = (__int64 *)&unk_14001EC43; | |
v6 = 11i64; | |
goto LABEL_20; | |
case 0x28u: | |
v5 = (__int64 *)&unk_14001EC30; | |
LABEL_19: | |
v6 = 19i64; | |
LABEL_20: | |
v12 = v5; | |
v13 = (__int64 (__fastcall *)(__int64, __int64 *))v6; | |
v16[0] = (__int64)&v12; | |
v16[1] = (__int64)sub_140001210; | |
v8 = &off_14001EBD8; | |
v9 = 1i64; | |
*(_QWORD *)&v7 = 0i64; | |
v10 = (__int64 **)v16; | |
v11 = 1i64; | |
LOBYTE(result) = sub_140017C00(a2, &v7); | |
result = (unsigned int)result; | |
break; | |
} | |
break; | |
} | |
return result; | |
} | |
// 1400048E5: control flows out of bounds to 1400048ED | |
// 14000492E: control flows out of bounds to 140004930 | |
// 14000492E: control flows out of bounds to 140004941 | |
// 14000492E: control flows out of bounds to 140004952 | |
// 14000492E: control flows out of bounds to 140004963 | |
// 14000492E: control flows out of bounds to 140004974 | |
// 14000492E: control flows out of bounds to 140004991 | |
// 14000492E: control flows out of bounds to 1400049A2 | |
// 14000492E: control flows out of bounds to 1400049B3 | |
// 14000492E: control flows out of bounds to 1400049C4 | |
// 14000492E: control flows out of bounds to 1400049D5 | |
// 14000492E: control flows out of bounds to 1400049E6 | |
// 14000492E: control flows out of bounds to 1400049F7 | |
// 14000492E: control flows out of bounds to 140004A08 | |
// 14000492E: control flows out of bounds to 140004A19 | |
// 14000492E: control flows out of bounds to 140004A2A | |
// 14000492E: control flows out of bounds to 140004A47 | |
// 14000492E: control flows out of bounds to 140004A58 | |
// 14000492E: control flows out of bounds to 140004A69 | |
// 14000492E: control flows out of bounds to 140004A7A | |
// 14000492E: control flows out of bounds to 140004A8B | |
// 14000492E: control flows out of bounds to 140004A9C | |
// 14000492E: control flows out of bounds to 140004AAD | |
// 14000492E: control flows out of bounds to 140004ABE | |
// 14000492E: control flows out of bounds to 140004ACF | |
// 14000492E: control flows out of bounds to 140004AE0 | |
// 14000492E: control flows out of bounds to 140004AF1 | |
// 14000492E: control flows out of bounds to 140004B02 | |
// 14000492E: control flows out of bounds to 140004B13 | |
// 14000492E: control flows out of bounds to 140004B24 | |
// 140004C13: variable 'result' is possibly undefined | |
// 14001EBD8: using guessed type char *off_14001EBD8; | |
// 14001EF30: using guessed type char *off_14001EF30; | |
//----- (0000000140004D10) ---------------------------------------------------- | |
_QWORD *__fastcall sub_140004D10(_QWORD *a1, __int64 *a2, const void *a3, size_t a4) | |
{ | |
__int64 v8; // r15 | |
v8 = a2[2]; | |
if ( *a2 - v8 < a4 ) | |
{ | |
sub_14001C0D0(a2, a2[2], a4); | |
v8 = a2[2]; | |
} | |
memcpy((void *)(v8 + a2[1]), a3, a4); | |
a2[2] = a4 + v8; | |
a1[1] = a4; | |
*a1 = 0i64; | |
return a1; | |
} | |
//----- (0000000140004D80) ---------------------------------------------------- | |
_QWORD *__fastcall sub_140004D80(_QWORD *a1, __int64 *a2, __int64 a3, __int64 a4) | |
{ | |
__int64 v7; // rbp | |
__int64 v8; // rax | |
unsigned __int64 v9; // rdi | |
__int64 v10; // rdx | |
__int64 v11; // r15 | |
__int64 v12; // rsi | |
const void *v13; // r13 | |
size_t v14; // r12 | |
_QWORD *v16; // [rsp+20h] [rbp-48h] | |
if ( a4 ) | |
{ | |
v7 = 16 * a4; | |
v8 = 0i64; | |
v9 = 0i64; | |
do | |
{ | |
v9 += *(unsigned int *)(a3 + v8); | |
v8 += 16i64; | |
} | |
while ( v7 != v8 ); | |
v10 = a2[2]; | |
if ( *a2 - v10 < v9 ) | |
sub_14001C0D0(a2, v10, v9); | |
v16 = a1; | |
v11 = a2[2]; | |
v12 = 0i64; | |
do | |
{ | |
v13 = *(const void **)(a3 + v12 + 8); | |
v14 = *(unsigned int *)(a3 + v12); | |
if ( *a2 - v11 < v14 ) | |
{ | |
sub_14001C0D0(a2, v11, *(unsigned int *)(a3 + v12)); | |
v11 = a2[2]; | |
} | |
memcpy((void *)(v11 + a2[1]), v13, v14); | |
v11 += v14; | |
a2[2] = v11; | |
v12 += 16i64; | |
} | |
while ( v7 != v12 ); | |
a1 = v16; | |
} | |
else | |
{ | |
v9 = 0i64; | |
} | |
a1[1] = v9; | |
*a1 = 0i64; | |
return a1; | |
} | |
// 140004DD5: conditional instruction was optimized away because r9.8!=0 | |
// 140004E70: conditional instruction was optimized away because r15.8!=0 | |
//----- (0000000140004E80) ---------------------------------------------------- | |
char sub_140004E80() | |
{ | |
return 1; | |
} | |
//----- (0000000140004E90) ---------------------------------------------------- | |
__int64 __fastcall sub_140004E90(__int64 *a1, const void *a2, size_t a3) | |
{ | |
__int64 v6; // r14 | |
v6 = a1[2]; | |
if ( *a1 - v6 < a3 ) | |
{ | |
sub_14001C0D0(a1, a1[2], a3); | |
v6 = a1[2]; | |
} | |
memcpy((void *)(v6 + a1[1]), a2, a3); | |
a1[2] = a3 + v6; | |
return 0i64; | |
} | |
//----- (0000000140004EF0) ---------------------------------------------------- | |
__int64 sub_140004EF0() | |
{ | |
return 0i64; | |
} | |
//----- (0000000140004F00) ---------------------------------------------------- | |
_QWORD *__fastcall sub_140004F00(_QWORD *a1, unsigned __int8 *a2, unsigned __int8 *a3, unsigned __int64 a4) | |
{ | |
__int64 v6; // rdx | |
__int64 v8; // [rsp+0h] [rbp-50h] BYREF | |
__int128 v9; // [rsp+28h] [rbp-28h] | |
__int64 v10; // [rsp+38h] [rbp-18h] | |
__int64 v11; // [rsp+40h] [rbp-10h] | |
__int64 v12; // [rsp+48h] [rbp-8h] | |
v12 = -2i64; | |
sub_14000C440(&v8 + 5, 0xFFFFFFF5, a3, a4, a2); | |
if ( (_QWORD)v9 && (v6 = *((_QWORD *)&v9 + 1), (*((_QWORD *)&v9 + 1) & 0xFFFFFFFF00000003ui64) == 0x600000002i64) ) | |
{ | |
a1[1] = a4; | |
*a1 = 0i64; | |
if ( (v6 & 3) == 1 ) | |
{ | |
v10 = v6 - 1; | |
v11 = v6; | |
JUMPOUT(0x140004F81i64); | |
} | |
} | |
else | |
{ | |
*(_OWORD *)a1 = v9; | |
} | |
return a1; | |
} | |
// 140004F7D: control flows out of bounds to 140004F81 | |
//----- (0000000140005010) ---------------------------------------------------- | |
__int64 __fastcall sub_140005010(__int64 a1) | |
{ | |
__int64 v1; // rdx | |
if ( !a1 ) | |
return 0i64; | |
v1 = a1; | |
if ( (a1 & 0xFFFFFFFF00000003ui64) == 0x600000002i64 ) | |
{ | |
if ( (a1 & 3) == 1 ) | |
JUMPOUT(0x140005061i64); | |
return 0i64; | |
} | |
return v1; | |
} | |
// 14000505D: control flows out of bounds to 140005061 | |
//----- (00000001400050F0) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
void __fastcall sub_1400050F0(__int64 **a1) | |
{ | |
__int64 v1; // rdi | |
v1 = **a1; | |
if ( *(_QWORD *)(v1 + 8) == *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 32i64 ) | |
{ | |
if ( *(_DWORD *)(v1 + 56) == -1 ) | |
sub_14001CB40( | |
(__int64)"lock count overflow in reentrant mutexlibrary\\std\\src\\sync\\remutex.rs", | |
38i64, | |
(__int64)&off_14001F420); | |
++*(_DWORD *)(v1 + 56); | |
} | |
else | |
{ | |
AcquireSRWLockExclusive((PSRWLOCK)v1); | |
*(_QWORD *)(v1 + 8) = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 32i64; | |
*(_DWORD *)(v1 + 56) = 1; | |
} | |
JUMPOUT(0x14000519Fi64); | |
} | |
// 14000524C: positive sp value 98 has been found | |
// 140005197: control flows out of bounds to 14000519F | |
// 14001F420: using guessed type void *off_14001F420; | |
// 140027270: using guessed type int TlsIndex; | |
//----- (0000000140005310) ---------------------------------------------------- | |
#error "140005310: function frame is wrong (funcsize=0)" | |
//----- (0000000140005500) ---------------------------------------------------- | |
__int64 sub_140005500() | |
{ | |
__int64 v0; // rax | |
RTL_SRWLOCK **v1; // rsi | |
RTL_SRWLOCK *v2; // rbx | |
if ( byte_140027130 ) | |
{ | |
v0 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
if ( *(_QWORD *)(v0 + 8) ) | |
{ | |
v1 = (RTL_SRWLOCK **)(v0 + 16); | |
} | |
else | |
{ | |
v1 = (RTL_SRWLOCK **)sub_140007FB0(0i64); | |
if ( !v1 ) | |
return 0i64; | |
} | |
v2 = *v1; | |
*v1 = 0i64; | |
if ( v2 ) | |
{ | |
AcquireSRWLockExclusive(v2 + 2); | |
if ( 2 * qword_1400271C0 ) | |
sub_14001C340(); | |
JUMPOUT(0x1400055AFi64); | |
} | |
} | |
return 0i64; | |
} | |
// 1400055AB: control flows out of bounds to 1400055AF | |
// 140027130: using guessed type char byte_140027130; | |
// 1400271C0: using guessed type __int64 qword_1400271C0; | |
// 140027270: using guessed type int TlsIndex; | |
//----- (0000000140005710) ---------------------------------------------------- | |
void __fastcall sub_140005710(__int128 *a1) | |
{ | |
__int128 v1; // xmm0 | |
__int128 v2; // xmm1 | |
__int64 v3; // rax | |
__int128 v4; // [rsp+20h] [rbp-60h] | |
__int128 v5; // [rsp+30h] [rbp-50h] | |
__int128 v6; // [rsp+40h] [rbp-40h] | |
__int64 *v7[4]; // [rsp+58h] [rbp-28h] BYREF | |
__int64 v8[2]; // [rsp+78h] [rbp-8h] BYREF | |
RTL_SRWLOCK *v9; // [rsp+88h] [rbp+8h] BYREF | |
__int128 v10; // [rsp+90h] [rbp+10h] | |
__int128 v11; // [rsp+A0h] [rbp+20h] | |
__int128 v12; // [rsp+B0h] [rbp+30h] | |
__int64 v13[3]; // [rsp+C8h] [rbp+48h] BYREF | |
v13[1] = -2i64; | |
v6 = a1[2]; | |
v5 = a1[1]; | |
v4 = *a1; | |
v8[0] = (__int64)"stdoutlibrary\\std\\src\\io\\mod.rs"; | |
v8[1] = 6i64; | |
v1 = *a1; | |
v2 = a1[1]; | |
v12 = a1[2]; | |
v11 = v2; | |
v10 = v1; | |
if ( !(unsigned __int8)sub_140005500() ) | |
{ | |
if ( qword_140027178 != 3 ) | |
sub_14001C260(); | |
v9 = &SRWLock; | |
v12 = v6; | |
v11 = v5; | |
v10 = v4; | |
v7[0] = (__int64 *)&v9; | |
sub_1400050F0(v7); | |
if ( v3 ) | |
{ | |
v13[0] = v3; | |
v7[0] = v8; | |
v7[1] = (__int64 *)sub_140001210; | |
v7[2] = v13; | |
v7[3] = (__int64 *)sub_140004820; | |
*(_QWORD *)&v11 = &off_14001EFD8; | |
*((_QWORD *)&v11 + 1) = 2i64; | |
*(_QWORD *)&v10 = 0i64; | |
*(_QWORD *)&v12 = v7; | |
*((_QWORD *)&v12 + 1) = 2i64; | |
JUMPOUT(0x140005826i64); | |
} | |
} | |
} | |
// 14000581E: control flows out of bounds to 140005826 | |
// 1400057C2: variable 'v3' is possibly undefined | |
// 14001EFD8: using guessed type char *off_14001EFD8; | |
// 140027178: using guessed type __int64 qword_140027178; | |
//----- (0000000140005870) ---------------------------------------------------- | |
_QWORD *__fastcall sub_140005870(_QWORD *a1, unsigned __int8 *a2, __int64 a3, __int64 a4) | |
{ | |
__int64 v6; // r10 | |
__int64 v7; // rcx | |
unsigned __int8 *v8; // r8 | |
unsigned __int64 v9; // r9 | |
v6 = 16 * a4; | |
v7 = 0i64; | |
v8 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
while ( v6 != v7 ) | |
{ | |
v9 = *(unsigned int *)(a3 + v7); | |
v7 += 16i64; | |
if ( v9 ) | |
{ | |
v8 = *(unsigned __int8 **)(a3 + v7 - 8); | |
goto LABEL_6; | |
} | |
} | |
v9 = 0i64; | |
LABEL_6: | |
sub_14000C440(a1, 0xFFFFFFF4, v8, v9, a2); | |
return a1; | |
} | |
//----- (00000001400058D0) ---------------------------------------------------- | |
char **__fastcall sub_1400058D0(unsigned __int8 *a1, unsigned __int8 *a2, unsigned __int64 a3) | |
{ | |
unsigned __int64 v3; // rsi | |
unsigned __int64 v6; // r13 | |
char **result; // rax | |
__int64 v8; // [rsp+30h] [rbp-20h] BYREF | |
unsigned __int64 v9; // [rsp+38h] [rbp-18h] | |
unsigned __int64 v10; // [rsp+40h] [rbp-10h] | |
__int64 v11; // [rsp+50h] [rbp+0h] | |
v11 = -2i64; | |
if ( a3 ) | |
{ | |
v3 = a3; | |
do | |
{ | |
sub_14000C440(&v8, 0xFFFFFFF4, a2, v3, a1); | |
if ( v8 ) | |
{ | |
v6 = v9; | |
switch ( v9 & 3 ) | |
{ | |
case 0ui64: | |
if ( *(_BYTE *)(v9 + 16) != 35 ) | |
return (char **)v6; | |
goto LABEL_16; | |
case 1ui64: | |
if ( *(_BYTE *)(v9 + 15) != 35 ) | |
return (char **)v6; | |
goto LABEL_16; | |
case 2ui64: | |
if ( sub_14000CE30(SHIDWORD(v9)) != 35 ) | |
return (char **)v6; | |
goto LABEL_16; | |
case 3ui64: | |
if ( HIDWORD(v9) != 35 ) | |
return (char **)v6; | |
LABEL_16: | |
if ( (v6 & 3) == 1 ) | |
{ | |
v10 = v6 - 1; | |
JUMPOUT(0x1400059E9i64); | |
} | |
return result; | |
} | |
} | |
else | |
{ | |
if ( !v9 ) | |
return &off_14001F0D0; | |
if ( v3 < v9 ) | |
sub_14001D030(v9, v3, (__int64)&off_14001F098); | |
a2 += v9; | |
v3 -= v9; | |
} | |
} | |
while ( v3 ); | |
} | |
return 0i64; | |
} | |
// 1400059E5: control flows out of bounds to 1400059E9 | |
// 14001F098: using guessed type void *off_14001F098; | |
// 14001F0D0: using guessed type char *off_14001F0D0; | |
//----- (0000000140005AB0) ---------------------------------------------------- | |
char **__fastcall sub_140005AB0(unsigned __int8 *a1, unsigned __int8 *a2, unsigned __int64 a3) | |
{ | |
unsigned __int64 v3; // rsi | |
unsigned __int64 v6; // r13 | |
char **result; // rax | |
__int64 v8; // [rsp+30h] [rbp-20h] BYREF | |
unsigned __int64 v9; // [rsp+38h] [rbp-18h] | |
unsigned __int64 v10; // [rsp+40h] [rbp-10h] | |
__int64 v11; // [rsp+50h] [rbp+0h] | |
v11 = -2i64; | |
if ( a3 ) | |
{ | |
v3 = a3; | |
do | |
{ | |
sub_14000C440(&v8, 0xFFFFFFF5, a2, v3, a1); | |
if ( v8 ) | |
{ | |
v6 = v9; | |
switch ( v9 & 3 ) | |
{ | |
case 0ui64: | |
if ( *(_BYTE *)(v9 + 16) != 35 ) | |
return (char **)v6; | |
goto LABEL_16; | |
case 1ui64: | |
if ( *(_BYTE *)(v9 + 15) != 35 ) | |
return (char **)v6; | |
goto LABEL_16; | |
case 2ui64: | |
if ( sub_14000CE30(SHIDWORD(v9)) != 35 ) | |
return (char **)v6; | |
goto LABEL_16; | |
case 3ui64: | |
if ( HIDWORD(v9) != 35 ) | |
return (char **)v6; | |
LABEL_16: | |
if ( (v6 & 3) == 1 ) | |
{ | |
v10 = v6 - 1; | |
JUMPOUT(0x140005BC9i64); | |
} | |
return result; | |
} | |
} | |
else | |
{ | |
if ( !v9 ) | |
return &off_14001F0D0; | |
if ( v3 < v9 ) | |
sub_14001D030(v9, v3, (__int64)&off_14001F098); | |
a2 += v9; | |
v3 -= v9; | |
} | |
} | |
while ( v3 ); | |
} | |
return 0i64; | |
} | |
// 140005BC5: control flows out of bounds to 140005BC9 | |
// 14001F098: using guessed type void *off_14001F098; | |
// 14001F0D0: using guessed type char *off_14001F0D0; | |
//----- (0000000140005C90) ---------------------------------------------------- | |
char **__fastcall sub_140005C90(__int64 *a1, __int64 a2, unsigned __int64 a3) | |
{ | |
unsigned __int64 v3; // rsi | |
__int64 v5; // rax | |
__int64 v6; // r8 | |
unsigned __int64 v7; // rcx | |
unsigned __int64 v8; // rsi | |
_DWORD *v9; // rdx | |
_DWORD *v10; // rbp | |
__int64 v11; // rsi | |
unsigned __int64 v12; // rax | |
unsigned __int64 v13; // r14 | |
__int64 v14; // r15 | |
unsigned __int64 v15; // rbx | |
const void *v16; // r13 | |
size_t v17; // r12 | |
unsigned __int64 v18; // rdx | |
unsigned __int64 v19; // r8 | |
unsigned __int64 v20; // rax | |
unsigned __int64 v21; // r14 | |
unsigned __int64 v22; // rax | |
void **v24; // rdx | |
unsigned __int64 v25; // [rsp+20h] [rbp-78h] | |
__int64 v26; // [rsp+28h] [rbp-70h] BYREF | |
char **v27; // [rsp+38h] [rbp-60h] | |
__int64 v28; // [rsp+40h] [rbp-58h] | |
const char *v29; // [rsp+48h] [rbp-50h] | |
__int64 v30; // [rsp+50h] [rbp-48h] | |
if ( !a3 ) | |
return 0i64; | |
v3 = a3; | |
v5 = 16 * a3; | |
v6 = 0i64; | |
v7 = 0i64; | |
do | |
{ | |
if ( *(_DWORD *)(a2 + v6) ) | |
break; | |
++v7; | |
v6 += 16i64; | |
} | |
while ( v5 != v6 ); | |
if ( v7 > v3 ) | |
LABEL_30: | |
sub_14001D030(v7, v3, (__int64)&off_14001F030); | |
v8 = v3 - v7; | |
if ( !v8 ) | |
return 0i64; | |
v9 = (_DWORD *)(16 * v7 + a2); | |
while ( 1 ) | |
{ | |
v10 = v9; | |
v25 = v8; | |
v11 = 16 * v8; | |
v12 = 0i64; | |
v13 = 0i64; | |
do | |
{ | |
v13 += (unsigned int)v9[v12 / 4]; | |
v12 += 16i64; | |
} | |
while ( v11 != v12 ); | |
v14 = a1[2]; | |
if ( *a1 - v14 < v13 ) | |
{ | |
sub_14001C0D0(a1, a1[2], v13); | |
v14 = a1[2]; | |
} | |
v15 = 0i64; | |
do | |
{ | |
v16 = *(const void **)&v10[v15 / 4 + 2]; | |
v17 = (unsigned int)v10[v15 / 4]; | |
if ( *a1 - v14 < v17 ) | |
{ | |
sub_14001C0D0(a1, v14, (unsigned int)v10[v15 / 4]); | |
v14 = a1[2]; | |
} | |
memcpy((void *)(v14 + a1[1]), v16, v17); | |
v14 += v17; | |
a1[2] = v14; | |
v15 += 16i64; | |
} | |
while ( v11 != v15 ); | |
if ( !v13 ) | |
return &off_14001F0D0; | |
v18 = 0i64; | |
v7 = 0i64; | |
v19 = 0i64; | |
while ( 1 ) | |
{ | |
v20 = v19 + (unsigned int)v10[v18 / 4]; | |
if ( v20 > v13 ) | |
break; | |
++v7; | |
v18 += 16i64; | |
v19 = v20; | |
if ( v11 == v18 ) | |
goto LABEL_24; | |
} | |
v20 = v19; | |
LABEL_24: | |
v3 = v25; | |
if ( v25 < v7 ) | |
goto LABEL_30; | |
v9 = &v10[4 * v7]; | |
v8 = v25 - v7; | |
if ( v25 == v7 ) | |
{ | |
if ( v13 == v20 ) | |
return 0i64; | |
v27 = &off_14001F070; | |
v28 = 1i64; | |
v26 = 0i64; | |
v29 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v30 = 0i64; | |
v24 = &off_14001F080; | |
LABEL_33: | |
sub_14001CBB0((__int64)&v26, (__int64)v24); | |
} | |
v21 = v13 - v20; | |
v22 = (unsigned int)*v9; | |
if ( v21 > v22 ) | |
{ | |
v27 = &off_14001FDB8; | |
v28 = 1i64; | |
v26 = 0i64; | |
v29 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v30 = 0i64; | |
v24 = (void **)&off_14001FDF0; | |
goto LABEL_33; | |
} | |
*v9 = v22 - v21; | |
*(_QWORD *)&v10[4 * v7 + 2] += v21; | |
if ( !v8 ) | |
return 0i64; | |
} | |
} | |
// 140005CFC: conditional instruction was optimized away because rsi.8==0 | |
// 14001F030: using guessed type void *off_14001F030; | |
// 14001F070: using guessed type char *off_14001F070; | |
// 14001F080: using guessed type void *off_14001F080; | |
// 14001F0D0: using guessed type char *off_14001F0D0; | |
// 14001FDB8: using guessed type char *off_14001FDB8; | |
// 14001FDF0: using guessed type char *off_14001FDF0; | |
//----- (0000000140005EE0) ---------------------------------------------------- | |
char **__fastcall sub_140005EE0(unsigned __int8 *a1, __int64 a2, unsigned __int64 a3) | |
{ | |
unsigned __int64 v3; // rsi | |
__int64 v6; // rdx | |
unsigned __int64 v7; // rcx | |
_DWORD *v8; // rbx | |
_DWORD *v9; // rdx | |
__int64 v10; // r15 | |
unsigned __int64 v11; // rax | |
unsigned __int64 v12; // r9 | |
unsigned __int8 *v13; // r8 | |
unsigned __int64 v14; // r15 | |
unsigned __int64 v15; // rdx | |
unsigned __int64 v16; // r9 | |
unsigned __int64 v17; // r8 | |
__int64 v18; // r9 | |
unsigned __int64 v19; // rax | |
unsigned __int64 v20; // rcx | |
void **v22; // rdx | |
__int64 v23; // [rsp+30h] [rbp-50h] BYREF | |
char **v24; // [rsp+40h] [rbp-40h] | |
__int64 v25; // [rsp+48h] [rbp-38h] | |
const char *v26; // [rsp+50h] [rbp-30h] | |
__int64 v27; // [rsp+58h] [rbp-28h] | |
__int64 v28; // [rsp+60h] [rbp-20h] BYREF | |
unsigned __int64 v29; // [rsp+68h] [rbp-18h] | |
unsigned __int64 v30; // [rsp+70h] [rbp-10h] | |
unsigned __int64 v31; // [rsp+78h] [rbp-8h] | |
__int64 v32; // [rsp+80h] [rbp+0h] | |
v32 = -2i64; | |
if ( !a3 ) | |
return 0i64; | |
v3 = a3; | |
v6 = 0i64; | |
v7 = 0i64; | |
do | |
{ | |
if ( *(_DWORD *)(a2 + v6) ) | |
break; | |
++v7; | |
v6 += 16i64; | |
} | |
while ( 16 * a3 != v6 ); | |
if ( v7 > a3 ) | |
LABEL_43: | |
sub_14001D030(v7, v3, (__int64)&off_14001F030); | |
v3 = a3 - v7; | |
if ( a3 == v7 ) | |
return 0i64; | |
v8 = (_DWORD *)(16 * v7 + a2); | |
while ( 1 ) | |
{ | |
v10 = 16 * v3; | |
v11 = 0i64; | |
while ( v10 != v11 ) | |
{ | |
v12 = (unsigned int)v8[v11 / 4]; | |
v11 += 16i64; | |
if ( v12 ) | |
{ | |
v13 = *(unsigned __int8 **)&v8[v11 / 4 - 2]; | |
goto LABEL_15; | |
} | |
} | |
v12 = 0i64; | |
v13 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
LABEL_15: | |
sub_14000C440(&v28, 0xFFFFFFF4, v13, v12, a1); | |
if ( v28 ) | |
{ | |
v14 = v29; | |
switch ( v29 & 3 ) | |
{ | |
case 0ui64: | |
if ( *(_BYTE *)(v29 + 16) != 35 ) | |
return (char **)v14; | |
goto LABEL_37; | |
case 1ui64: | |
if ( *(_BYTE *)(v29 + 15) != 35 ) | |
return (char **)v14; | |
goto LABEL_37; | |
case 2ui64: | |
if ( sub_14000CE30(SHIDWORD(v29)) != 35 ) | |
return (char **)v14; | |
goto LABEL_37; | |
case 3ui64: | |
if ( HIDWORD(v29) == 35 ) | |
goto LABEL_37; | |
return (char **)v14; | |
} | |
} | |
if ( !v29 ) | |
return &off_14001F0D0; | |
v15 = 0i64; | |
v7 = 0i64; | |
v16 = 0i64; | |
while ( 1 ) | |
{ | |
v17 = v16 + (unsigned int)v8[v15 / 4]; | |
if ( v17 > v29 ) | |
break; | |
++v7; | |
v15 += 16i64; | |
v16 = v17; | |
if ( v10 == v15 ) | |
goto LABEL_25; | |
} | |
v17 = v16; | |
LABEL_25: | |
if ( v3 < v7 ) | |
goto LABEL_43; | |
v18 = 4 * v7; | |
v9 = &v8[4 * v7]; | |
v3 -= v7; | |
if ( v3 ) | |
{ | |
v19 = v29 - v17; | |
v20 = (unsigned int)*v9; | |
if ( v29 - v17 > v20 ) | |
{ | |
v24 = &off_14001FDB8; | |
v25 = 1i64; | |
v23 = 0i64; | |
v26 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v27 = 0i64; | |
v22 = (void **)&off_14001FDF0; | |
LABEL_45: | |
sub_14001CBB0((__int64)&v23, (__int64)v22); | |
} | |
*v9 = v20 - v19; | |
*(_QWORD *)&v8[v18 + 2] += v19; | |
v8 = v9; | |
if ( v28 ) | |
{ | |
LABEL_37: | |
if ( (v29 & 3) == 1 ) | |
{ | |
v30 = v29 - 1; | |
v31 = v29; | |
JUMPOUT(0x1400060DCi64); | |
} | |
v9 = v8; | |
} | |
} | |
else if ( v29 != v17 ) | |
{ | |
v24 = &off_14001F070; | |
v25 = 1i64; | |
v23 = 0i64; | |
v26 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v27 = 0i64; | |
v22 = &off_14001F080; | |
goto LABEL_45; | |
} | |
v8 = v9; | |
if ( !v3 ) | |
return 0i64; | |
} | |
} | |
// 1400060D8: control flows out of bounds to 1400060DC | |
// 14001F030: using guessed type void *off_14001F030; | |
// 14001F070: using guessed type char *off_14001F070; | |
// 14001F080: using guessed type void *off_14001F080; | |
// 14001F0D0: using guessed type char *off_14001F0D0; | |
// 14001FDB8: using guessed type char *off_14001FDB8; | |
// 14001FDF0: using guessed type char *off_14001FDF0; | |
//----- (0000000140006220) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
void sub_140006220() | |
{ | |
JUMPOUT(0x140006256i64); | |
} | |
// 1400062E5: positive sp value 88 has been found | |
// 140006252: control flows out of bounds to 140006256 | |
//----- (0000000140006350) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
void sub_140006350() | |
{ | |
JUMPOUT(0x140006386i64); | |
} | |
// 140006415: positive sp value 88 has been found | |
// 140006382: control flows out of bounds to 140006386 | |
//----- (0000000140006480) ---------------------------------------------------- | |
__int64 __fastcall sub_140006480(__int64 a1, const void *a2, size_t a3) | |
{ | |
_QWORD *v5; // rdi | |
__int64 v6; // r14 | |
v5 = *(_QWORD **)(a1 + 8); | |
v6 = v5[2]; | |
if ( *v5 - v6 < a3 ) | |
{ | |
sub_14001C0D0(*(__int64 **)(a1 + 8), v5[2], a3); | |
v6 = v5[2]; | |
} | |
memcpy((void *)(v6 + v5[1]), a2, a3); | |
v5[2] = a3 + v6; | |
return 0i64; | |
} | |
//----- (00000001400064E0) ---------------------------------------------------- | |
bool __fastcall sub_1400064E0(__int64 a1, unsigned __int8 *a2, unsigned __int64 a3) | |
{ | |
char **v4; // rax | |
v4 = sub_1400058D0(*(unsigned __int8 **)(a1 + 8), a2, a3); | |
if ( v4 ) | |
{ | |
if ( *(_QWORD *)a1 && (*(_QWORD *)a1 & 3) == 1 ) | |
JUMPOUT(0x140006532i64); | |
*(_QWORD *)a1 = v4; | |
} | |
return v4 != 0i64; | |
} | |
// 14000652E: control flows out of bounds to 140006532 | |
//----- (00000001400065D0) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
bool __fastcall sub_1400065D0(__int64 *a1, __int64 a2) | |
{ | |
__int64 v3; // rax | |
v3 = ((__int64 (__fastcall *)(__int64, __int64))sub_140005310)(a1[1], a2); | |
if ( v3 ) | |
{ | |
if ( *a1 && (*a1 & 3) == 1 ) | |
JUMPOUT(0x140006622i64); | |
*a1 = v3; | |
} | |
return v3 != 0; | |
} | |
// 14000666F: positive sp value 8 has been found | |
// 14000661E: control flows out of bounds to 140006622 | |
// 140005310: using guessed type __int64 __fastcall __far sub_140005310(); | |
//----- (00000001400066C0) ---------------------------------------------------- | |
__int128 *__fastcall sub_1400066C0(__int128 *a1, unsigned __int16 *a2, __int64 a3) | |
{ | |
unsigned __int16 v3; // si | |
__int64 v6; // rax | |
unsigned __int16 *v7; // rbx | |
unsigned __int16 i; // ax | |
unsigned __int16 v9; // cx | |
__int16 v10; // r15 | |
unsigned int v11; // eax | |
size_t v12; // r12 | |
__int128 v13; // xmm0 | |
__int128 *result; // rax | |
__int128 v16; // [rsp+28h] [rbp-28h] BYREF | |
__int128 v17; // [rsp+38h] [rbp-18h] | |
unsigned __int16 v18; // [rsp+4Ah] [rbp-6h] BYREF | |
int Src; // [rsp+4Ch] [rbp-4h] BYREF | |
__int64 v20; // [rsp+50h] [rbp+0h] | |
v20 = -2i64; | |
if ( a3 ) | |
{ | |
if ( a3 < 0 ) | |
sub_140015AA0(); | |
v6 = sub_1400010D0(a3, a3 >= 0); | |
if ( !v6 ) | |
sub_14001CB30(); | |
} | |
else | |
{ | |
v6 = 1i64; | |
} | |
*(_QWORD *)&v16 = a3; | |
*((_QWORD *)&v16 + 1) = v6; | |
*(_QWORD *)&v17 = 0i64; | |
BYTE8(v17) = 1; | |
v7 = &a2[a3]; | |
while ( a2 != v7 ) | |
{ | |
for ( i = *a2++; ; i = v3 ) | |
{ | |
if ( (i & 0xF800) != 55296 ) | |
LABEL_7: | |
JUMPOUT(0x14000675Bi64); | |
if ( i > 0xDBFFu ) | |
{ | |
v10 = 0; | |
} | |
else if ( a2 == v7 ) | |
{ | |
v10 = 0; | |
a2 = v7; | |
} | |
else | |
{ | |
v9 = *a2++; | |
if ( (unsigned __int16)(v9 + 0x2000) >= 0xFC00u ) | |
goto LABEL_7; | |
v10 = 1; | |
v3 = v9; | |
} | |
v18 = i; | |
v11 = sub_140016680(&v18); | |
BYTE8(v17) = 0; | |
Src = 0; | |
if ( (unsigned __int16)v11 >= 0x80u ) | |
{ | |
if ( (unsigned __int16)v11 >= 0x800u ) | |
{ | |
LOBYTE(Src) = ((unsigned __int16)v11 >> 12) | 0xE0; | |
BYTE1(Src) = ((unsigned __int16)v11 >> 6) & 0x3F | 0x80; | |
BYTE2(Src) = v11 & 0x3F | 0x80; | |
v12 = 3i64; | |
} | |
else | |
{ | |
LOBYTE(Src) = (v11 >> 6) | 0xC0; | |
BYTE1(Src) = v11 & 0x3F | 0x80; | |
v12 = 2i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(Src) = v11; | |
v12 = 1i64; | |
} | |
if ( (_QWORD)v16 - (_QWORD)v17 < v12 ) | |
{ | |
sub_14001C0D0((__int64 *)&v16, v17, v12); | |
JUMPOUT(0x14000688Bi64); | |
} | |
memcpy((void *)(v17 + *((_QWORD *)&v16 + 1)), &Src, v12); | |
*(_QWORD *)&v17 = v12 + v17; | |
if ( !v10 ) | |
break; | |
} | |
} | |
v13 = v16; | |
result = a1; | |
a1[1] = v17; | |
*a1 = v13; | |
return result; | |
} | |
// 140006758: control flows out of bounds to 14000675B | |
// 140006886: control flows out of bounds to 14000688B | |
// 140006769: variable 'v3' is possibly undefined | |
// 1400010D0: using guessed type __int64 __fastcall sub_1400010D0(_QWORD, _QWORD); | |
//----- (0000000140006930) ---------------------------------------------------- | |
__int64 sub_140006930() | |
{ | |
unsigned int v0; // esi | |
__int64 v1; // rax | |
__int64 v3; // [rsp+20h] [rbp-28h] BYREF | |
_DWORD *v4; // [rsp+28h] [rbp-20h] | |
__int64 v5; // [rsp+30h] [rbp-18h] | |
char v6; // [rsp+38h] [rbp-10h] | |
v0 = 0; | |
switch ( qword_140027180 ) | |
{ | |
case 0i64: | |
sub_140004050((__int64)&v3, (__int64)"RUST_BACKTRACEfailed to write the buffered data", 14i64); | |
if ( v6 == 2 ) | |
{ | |
v1 = 3i64; | |
LOBYTE(v0) = 2; | |
} | |
else | |
{ | |
if ( v5 == 4 ) | |
{ | |
LOBYTE(v0) = *v4 == 1819047270; | |
} | |
else if ( v5 == 1 ) | |
{ | |
LOBYTE(v0) = 2 * (*(_BYTE *)v4 == 48); | |
} | |
else | |
{ | |
v0 = 0; | |
} | |
if ( v3 ) | |
sub_1400010E0(v4, v3, 1i64); | |
v1 = (unsigned __int8)(v0 + 1); | |
} | |
qword_140027180 = v1; | |
break; | |
case 1i64: | |
return v0; | |
case 2i64: | |
LOBYTE(v0) = 1; | |
break; | |
case 3i64: | |
LOBYTE(v0) = 2; | |
break; | |
default: | |
sub_14001CC50( | |
(__int64)"internal error: entered unreachable code/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
40i64, | |
(__int64)&off_14001F1B8); | |
} | |
return v0; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
// 14001F1B8: using guessed type void *off_14001F1B8; | |
// 140027180: using guessed type __int64 qword_140027180; | |
//----- (0000000140006A10) ---------------------------------------------------- | |
_BYTE *__fastcall sub_140006A10(__int64 a1) | |
{ | |
_BYTE *v1; // rsi | |
unsigned __int64 v2; // rdi | |
__int64 v3; // rax | |
__int128 v4; // xmm0 | |
unsigned __int8 v5; // bp | |
__int64 v6; // rdx | |
char v7; // r8 | |
__int64 v8; // rcx | |
unsigned __int64 v9; // rcx | |
int v10; // r9d | |
__int64 v11; // r9 | |
unsigned __int64 v12; // rcx | |
char v13; // r13 | |
__int64 v14; // r15 | |
__int64 v15; // r14 | |
unsigned __int64 v16; // rbx | |
bool v17; // zf | |
unsigned __int8 v18; // cl | |
__int64 v19; // r9 | |
bool v20; // zf | |
_BYTE *v22; // [rsp+30h] [rbp-C8h] BYREF | |
unsigned __int64 v23; // [rsp+38h] [rbp-C0h] | |
char v24; // [rsp+40h] [rbp-B8h] | |
__int128 v25; // [rsp+41h] [rbp-B7h] BYREF | |
char v26[23]; // [rsp+51h] [rbp-A7h] BYREF | |
char v27; // [rsp+68h] [rbp-90h] | |
char v28; // [rsp+69h] [rbp-8Fh] | |
unsigned __int8 v29; // [rsp+6Ah] [rbp-8Eh] | |
__int128 v30; // [rsp+70h] [rbp-88h] BYREF | |
_BYTE v31[23]; // [rsp+80h] [rbp-78h] | |
v1 = *(_BYTE **)a1; | |
v2 = *(_QWORD *)(a1 + 8); | |
LODWORD(v3) = *(unsigned __int8 *)(a1 + 16); | |
if ( (_DWORD)v3 != 6 ) | |
{ | |
*(_QWORD *)&v31[15] = *(_QWORD *)(a1 + 48); | |
v4 = *(_OWORD *)(a1 + 17); | |
*(_OWORD *)v31 = *(_OWORD *)(a1 + 33); | |
v30 = v4; | |
} | |
v5 = *(_BYTE *)(a1 + 58); | |
LOBYTE(v6) = *(_BYTE *)(a1 + 56); | |
v7 = *(_BYTE *)(a1 + 57); | |
v22 = v1; | |
v23 = v2; | |
v24 = v3; | |
v25 = v30; | |
*(_OWORD *)v26 = *(_OWORD *)v31; | |
*(_QWORD *)&v26[15] = *(_QWORD *)&v31[15]; | |
v29 = v5; | |
v27 = v6; | |
v28 = v7; | |
if ( (_BYTE)v6 != 2 ) | |
goto LABEL_25; | |
if ( v2 ) | |
{ | |
while ( 1 ) | |
{ | |
v8 = 0i64; | |
while ( v1[v8] != 92 ) | |
{ | |
if ( v2 == ++v8 ) | |
goto LABEL_24; | |
} | |
if ( v8 ) | |
break; | |
++v1; | |
if ( !--v2 ) | |
goto LABEL_23; | |
} | |
LABEL_24: | |
while ( 1 ) | |
{ | |
v22 = v1; | |
v23 = v2; | |
LABEL_25: | |
if ( v7 != 2 ) | |
break; | |
LABEL_26: | |
v13 = (_BYTE)v6 == 0 ? -1 : (_BYTE)v6 != 1; | |
v14 = 16i64; | |
if ( (_BYTE)v3 != 6 ) | |
v14 = (__int64)&v25 + 15; | |
v15 = 32i64; | |
if ( (_BYTE)v3 != 6 ) | |
v15 = (__int64)&v26[15]; | |
if ( (_BYTE)v6 ) | |
{ | |
if ( v13 != -1 && v13 ) | |
{ | |
if ( v2 ) | |
{ | |
do | |
{ | |
sub_1400070E0((__int64)&v30, (__int64)&v22); | |
if ( v31[8] != 10 ) | |
break; | |
v16 = v2 - v30; | |
v17 = v2 == (_QWORD)v30; | |
if ( v2 < (unsigned __int64)v30 ) | |
goto LABEL_73; | |
v23 = v2 - v30; | |
v2 -= v30; | |
} | |
while ( !v17 ); | |
} | |
} | |
else if ( v2 > v5 + (unsigned __int64)sub_140006FC0((__int64 *)&v22) ) | |
{ | |
do | |
{ | |
sub_1400070E0((__int64)&v30, (__int64)&v22); | |
if ( v31[8] != 10 ) | |
break; | |
v16 = v2 - v30; | |
if ( v2 < (unsigned __int64)v30 ) | |
goto LABEL_73; | |
v23 = v2 - v30; | |
v2 -= v30; | |
} | |
while ( v16 > v5 + (unsigned __int64)sub_140006FC0((__int64 *)&v22) ); | |
} | |
return v1; | |
} | |
if ( (_BYTE)v3 == 6 ) | |
{ | |
if ( v13 != -1 && v13 ) | |
{ | |
if ( v2 ) | |
{ | |
while ( 1 ) | |
{ | |
sub_1400070E0((__int64)&v30, (__int64)&v22); | |
if ( v31[8] != 10 ) | |
return v1; | |
v20 = v2 == (_QWORD)v30; | |
if ( v2 < (unsigned __int64)v30 ) | |
break; | |
v23 = v2 - v30; | |
v2 -= v30; | |
if ( v20 ) | |
return v1; | |
} | |
v16 = v2 - v30; | |
LABEL_73: | |
sub_14001D040(v16, v2, (__int64)&off_14001F268); | |
} | |
} | |
else if ( v2 > v5 + (unsigned __int64)sub_140006FC0((__int64 *)&v22) ) | |
{ | |
do | |
{ | |
sub_1400070E0((__int64)&v30, (__int64)&v22); | |
if ( v31[8] != 10 ) | |
break; | |
v16 = v2 - v30; | |
if ( v2 < (unsigned __int64)v30 ) | |
goto LABEL_73; | |
v23 = v2 - v30; | |
v2 -= v30; | |
} | |
while ( v16 > v5 + (unsigned __int64)sub_140006FC0((__int64 *)&v22) ); | |
} | |
return v1; | |
} | |
while ( v13 != -1 ) | |
{ | |
if ( !v13 ) | |
break; | |
v18 = 0; | |
v3 = 0i64; | |
LABEL_57: | |
v6 = *(_QWORD *)v14 + 4i64; | |
LABEL_61: | |
if ( v2 > v6 + v3 + (unsigned __int64)v18 ) | |
{ | |
sub_1400070E0((__int64)&v30, (__int64)&v22); | |
if ( v31[8] == 10 ) | |
continue; | |
} | |
return v1; | |
v16 = v2 - v30; | |
if ( v2 < (unsigned __int64)v30 ) | |
goto LABEL_73; | |
v23 = v2 - v30; | |
v2 -= v30; | |
} | |
v3 = sub_140006FC0((__int64 *)&v22); | |
v18 = v5; | |
v6 = 6i64; | |
switch ( (char)v3 ) | |
{ | |
case 0: | |
goto LABEL_57; | |
case 1: | |
v19 = *(_QWORD *)v15 + 1i64; | |
if ( !*(_QWORD *)v15 ) | |
v19 = 0i64; | |
v6 = v19 + *(_QWORD *)v14 + 8; | |
goto LABEL_61; | |
case 2: | |
goto LABEL_61; | |
default: | |
goto LABEL_12; | |
} | |
do | |
{ | |
LABEL_12: | |
v9 = 0i64; | |
while ( 1 ) | |
{ | |
v10 = (unsigned __int8)v1[v9]; | |
if ( v10 == 47 || v10 == 92 ) | |
break; | |
if ( v2 == ++v9 ) | |
{ | |
v11 = 0i64; | |
v9 = v2; | |
if ( !v2 ) | |
goto LABEL_21; | |
goto LABEL_19; | |
} | |
} | |
v11 = 1i64; | |
if ( !v9 ) | |
goto LABEL_21; | |
LABEL_19: | |
if ( v9 != 1 || *v1 != 46 ) | |
goto LABEL_24; | |
LABEL_21: | |
v12 = v11 + v9; | |
if ( v2 < v12 ) | |
sub_14001D030(v12, v2, (__int64)&off_14001F250); | |
v1 += v12; | |
v2 -= v12; | |
} | |
while ( v2 ); | |
LABEL_23: | |
v2 = 0i64; | |
} | |
} | |
else | |
{ | |
v2 = 0i64; | |
if ( v7 == 2 ) | |
goto LABEL_26; | |
} | |
return v1; | |
} | |
// 140006AE7: conditional instruction was optimized away because rdi.8!=0 | |
// 140006B02: conditional instruction was optimized away because rdi.8!=0 | |
// 140006BF3: conditional instruction was optimized away because r13.1==0 | |
// 140006C9A: conditional instruction was optimized away because r13.1==0 | |
// 140006B9A: variable 'v7' is possibly undefined | |
// 14001F250: using guessed type char *off_14001F250; | |
// 14001F268: using guessed type char *off_14001F268; | |
//----- (0000000140006FC0) ---------------------------------------------------- | |
bool __fastcall sub_140006FC0(__int64 *a1) | |
{ | |
bool result; // al | |
unsigned __int8 v2; // r9 | |
__int64 v3; // rax | |
unsigned __int64 v4; // rdx | |
unsigned __int64 v5; // rcx | |
__int64 *v6; // r8 | |
__int64 v7; // rcx | |
__int64 v8; // r8 | |
__int64 v9; // r9 | |
__int64 v10; // rcx | |
__int64 v11; // r8 | |
__int64 v12; // r9 | |
_BYTE *v13; // rdx | |
_BYTE *v14; // r8 | |
char v15; // cl | |
result = 0; | |
if ( !*((_BYTE *)a1 + 58) ) | |
{ | |
v2 = *((_BYTE *)a1 + 16); | |
if ( v2 >= 5u ) | |
{ | |
v3 = *a1; | |
v4 = a1[1]; | |
if ( *((_BYTE *)a1 + 56) ) | |
{ | |
v5 = 0i64; | |
} | |
else | |
{ | |
v6 = a1 + 2; | |
v5 = 0i64; | |
if ( v2 != 6 ) | |
{ | |
v5 = 6i64; | |
switch ( *(_BYTE *)v6 ) | |
{ | |
case 0: | |
case 3: | |
v5 = v6[2] + 4; | |
break; | |
case 1: | |
v7 = v6[2]; | |
v8 = v6[4]; | |
v9 = v8 + 1; | |
if ( !v8 ) | |
v9 = 0i64; | |
v5 = v9 + v7 + 8; | |
break; | |
case 2: | |
break; | |
case 4: | |
v10 = v6[2]; | |
v11 = v6[4]; | |
v12 = v11 + 1; | |
if ( !v11 ) | |
v12 = 0i64; | |
v5 = v12 + v10 + 2; | |
break; | |
case 5: | |
v5 = 2i64; | |
break; | |
} | |
if ( v4 < v5 ) | |
sub_14001D030(v5, v4, (__int64)&off_14001F208); | |
} | |
} | |
if ( v5 == v4 ) | |
{ | |
return 0; | |
} | |
else | |
{ | |
v13 = (_BYTE *)(v3 + v4); | |
v14 = (_BYTE *)(v3 + v5 + 1); | |
v15 = *(_BYTE *)(v3 + v5); | |
result = v14 == v13 && v15 == 46; | |
if ( v14 != v13 && v15 == 46 ) | |
return *v14 == 47 || *v14 == 92; | |
} | |
} | |
} | |
return result; | |
} | |
// 14001F208: using guessed type char *off_14001F208; | |
//----- (00000001400070E0) ---------------------------------------------------- | |
char __fastcall sub_1400070E0(__int64 a1, __int64 a2) | |
{ | |
char v3; // bp | |
unsigned __int8 v4; // bl | |
char v6; // al | |
_BOOL8 v7; // rax | |
__int64 v8; // rcx | |
__int64 v9; // rax | |
unsigned __int64 v10; // rcx | |
unsigned __int64 v11; // rdx | |
__int64 v12; // r11 | |
_BYTE *v13; // r8 | |
unsigned __int8 v14; // r9 | |
__int64 v15; // r10 | |
__int64 v16; // rax | |
_BYTE *v17; // rdi | |
int v18; // ebx | |
unsigned __int64 v19; // rdx | |
char result; // al | |
__int64 v21; // rdx | |
__int64 v22; // r8 | |
__int64 v23; // rdx | |
__int64 v24; // r8 | |
v3 = *(_BYTE *)(a2 + 56); | |
v4 = 0; | |
v6 = v3 == 0 ? -1 : v3 != 1; | |
if ( v6 == -1 || !v6 ) | |
{ | |
v4 = *(_BYTE *)(a2 + 58); | |
v7 = sub_140006FC0((__int64 *)a2); | |
if ( !v3 ) | |
goto LABEL_4; | |
LABEL_8: | |
v8 = 0i64; | |
goto LABEL_9; | |
} | |
v7 = 0i64; | |
if ( v3 ) | |
goto LABEL_8; | |
LABEL_4: | |
v8 = 0i64; | |
if ( *(_BYTE *)(a2 + 16) != 6 ) | |
{ | |
v8 = 6i64; | |
switch ( *(_BYTE *)(a2 + 16) ) | |
{ | |
case 0: | |
case 3: | |
v8 = *(_QWORD *)(a2 + 32) + 4i64; | |
break; | |
case 1: | |
v21 = *(_QWORD *)(a2 + 48); | |
v22 = v21 + 1; | |
if ( !v21 ) | |
v22 = 0i64; | |
v8 = v22 + *(_QWORD *)(a2 + 32) + 8; | |
break; | |
case 2: | |
break; | |
case 4: | |
v23 = *(_QWORD *)(a2 + 48); | |
v24 = v23 + 1; | |
if ( !v23 ) | |
v24 = 0i64; | |
v8 = v24 + *(_QWORD *)(a2 + 32) + 2; | |
break; | |
case 5: | |
v8 = 2i64; | |
break; | |
} | |
} | |
LABEL_9: | |
v9 = v8 + v7; | |
v10 = v9 + v4; | |
v11 = *(_QWORD *)(a2 + 8); | |
if ( v11 < v10 ) | |
sub_14001D030(v10, v11, (__int64)&off_14001F220); | |
v12 = *(_QWORD *)a2; | |
v13 = (_BYTE *)(*(_QWORD *)a2 + v10); | |
if ( v11 == v10 ) | |
{ | |
v14 = *(_BYTE *)(a2 + 16); | |
v15 = 0i64; | |
} | |
else | |
{ | |
v14 = *(_BYTE *)(a2 + 16); | |
v16 = v4 + v9 - v11 + 1; | |
v17 = (_BYTE *)(v11 + v12 - 1); | |
v15 = 0i64; | |
if ( v14 >= 3u ) | |
{ | |
while ( 1 ) | |
{ | |
v18 = (unsigned __int8)*v17; | |
if ( v18 == 47 || v18 == 92 ) | |
break; | |
++v16; | |
--v17; | |
if ( v16 == 1 ) | |
goto LABEL_22; | |
} | |
} | |
else | |
{ | |
while ( *v17 != 92 ) | |
{ | |
++v16; | |
--v17; | |
if ( v16 == 1 ) | |
goto LABEL_22; | |
} | |
} | |
v10 = v10 - v16 + 1; | |
if ( v11 < v10 ) | |
sub_14001D030(v10, v11, (__int64)&off_14001F238); | |
v15 = 1i64; | |
v13 = (_BYTE *)(v10 + v12); | |
} | |
LABEL_22: | |
v19 = v11 - v10; | |
if ( v19 ) | |
{ | |
result = 9; | |
if ( v19 == 2 ) | |
{ | |
if ( *v13 == 46 ) | |
result = (v13[1] == 46) ^ 9; | |
} | |
else if ( v19 == 1 && *v13 == 46 ) | |
{ | |
result = 3 * (v14 >= 3u) + 7; | |
} | |
} | |
else | |
{ | |
result = 10; | |
} | |
*(_QWORD *)a1 = v19 + v15; | |
*(_QWORD *)(a1 + 8) = v13; | |
*(_QWORD *)(a1 + 16) = v19; | |
*(_BYTE *)(a1 + 24) = result; | |
return result; | |
} | |
// 14000711A: conditional instruction was optimized away because al.1==0 | |
// 14001F220: using guessed type char *off_14001F220; | |
// 14001F238: using guessed type char *off_14001F238; | |
//----- (00000001400072F0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400072F0(__int64 a1, __int64 a2) | |
{ | |
unsigned __int8 v3; // r12 | |
unsigned __int8 v5; // r15 | |
_BYTE *v6; // rbx | |
unsigned int v7; // ebp | |
unsigned __int8 *v8; // r14 | |
int v9; // r10d | |
int v10; // esi | |
unsigned __int8 *v11; // rbp | |
int v12; // r14d | |
int v13; // esi | |
_BYTE *v14; // rcx | |
__int64 v15; // r8 | |
__int64 v16; // rax | |
unsigned __int64 v17; // rdx | |
__int64 v18; // rax | |
int v19; // ecx | |
__int64 v20; // rcx | |
char v21; // r8 | |
unsigned __int64 v22; // rcx | |
unsigned __int64 v23; // r9 | |
__int64 v24; // rcx | |
__int64 v25; // rdx | |
__int64 v26; // rcx | |
__int64 v27; // rdx | |
__int64 v28; // rax | |
unsigned __int64 v30; // rdx | |
unsigned __int64 v31; // rcx | |
__int64 v32; // rax | |
__int64 v33; // rcx | |
__int64 v34; // r9 | |
__int64 v35; // rcx | |
__int64 v36; // r9 | |
unsigned __int64 v37; // rax | |
__int64 v38; // r8 | |
__int64 v39; // r9 | |
__int64 v40; // r8 | |
__int64 v41; // r9 | |
__int128 v42; // xmm0 | |
__int64 v43; // [rsp+20h] [rbp-48h] | |
v3 = *(_BYTE *)(a2 + 56); | |
if ( v3 == 3 || (v5 = *(_BYTE *)(a2 + 57), v5 == 3) || v3 > v5 ) | |
{ | |
LABEL_52: | |
*(_BYTE *)(a1 + 16) = 10; | |
return a1; | |
} | |
v6 = *(_BYTE **)a2; | |
v7 = *(unsigned __int8 *)(a2 + 16); | |
v8 = 0i64; | |
v9 = 3 * (v7 >= 3) + 7; | |
v10 = *(unsigned __int8 *)(a2 + 58); | |
if ( v7 != 6 ) | |
v8 = (unsigned __int8 *)(a2 + 16); | |
while ( v3 ) | |
{ | |
if ( v3 == 1 ) | |
{ | |
*(_BYTE *)(a2 + 56) = 2; | |
if ( (_BYTE)v10 ) | |
{ | |
v28 = *(_QWORD *)(a2 + 8); | |
if ( !v28 ) | |
sub_14001D030(1i64, 0i64, (__int64)&off_14001F298); | |
*(_QWORD *)a2 = v6 + 1; | |
*(_QWORD *)(a2 + 8) = v28 - 1; | |
*(_BYTE *)(a1 + 16) = 6; | |
return a1; | |
} | |
v3 = 2; | |
if ( v7 < 3 || v7 == 5 ) | |
goto LABEL_46; | |
if ( v7 != 6 ) | |
{ | |
*(_BYTE *)(a1 + 16) = 6; | |
return a1; | |
} | |
v11 = v8; | |
v12 = v10; | |
v43 = a1; | |
v13 = v9; | |
if ( sub_140006FC0((__int64 *)a2) ) | |
{ | |
v32 = *(_QWORD *)(a2 + 8); | |
if ( !v32 ) | |
sub_14001D030(1i64, 0i64, (__int64)&off_14001F2B0); | |
*(_QWORD *)a2 = v6 + 1; | |
*(_QWORD *)(a2 + 8) = v32 - 1; | |
a1 = v43; | |
*(_BYTE *)(v43 + 16) = 7; | |
return a1; | |
} | |
v14 = v6; | |
v9 = v13; | |
a1 = v43; | |
v10 = v12; | |
v8 = v11; | |
v7 = 6; | |
} | |
else | |
{ | |
v17 = *(_QWORD *)(a2 + 8); | |
if ( !v17 ) | |
{ | |
*(_BYTE *)(a2 + 56) = 3; | |
goto LABEL_52; | |
} | |
v18 = 0i64; | |
if ( (unsigned __int8)v7 >= 3u ) | |
{ | |
while ( 1 ) | |
{ | |
v19 = (unsigned __int8)v6[v18]; | |
if ( v19 == 47 || v19 == 92 ) | |
break; | |
if ( v17 == ++v18 ) | |
{ | |
LABEL_25: | |
v20 = 0i64; | |
v18 = *(_QWORD *)(a2 + 8); | |
goto LABEL_28; | |
} | |
} | |
} | |
else | |
{ | |
while ( v6[v18] != 92 ) | |
{ | |
if ( v17 == ++v18 ) | |
goto LABEL_25; | |
} | |
} | |
v20 = 1i64; | |
if ( v18 ) | |
{ | |
LABEL_28: | |
v21 = 9; | |
if ( v18 == 2 ) | |
{ | |
if ( *v6 == 46 ) | |
v21 = (v6[1] == 46) ^ 9; | |
} | |
else if ( v18 == 1 ) | |
{ | |
v21 = v9; | |
if ( *v6 != 46 ) | |
v21 = 9; | |
} | |
} | |
else | |
{ | |
v21 = 10; | |
} | |
v22 = v18 + v20; | |
v23 = v17 - v22; | |
if ( v17 < v22 ) | |
sub_14001D030(v22, v17, (__int64)&off_14001F280); | |
v14 = &v6[v22]; | |
*(_QWORD *)a2 = v14; | |
*(_QWORD *)(a2 + 8) = v23; | |
if ( v21 != 10 ) | |
{ | |
*(_QWORD *)a1 = v6; | |
*(_QWORD *)(a1 + 8) = v18; | |
*(_BYTE *)(a1 + 16) = v21; | |
return a1; | |
} | |
} | |
LABEL_47: | |
v6 = v14; | |
if ( v3 > v5 ) | |
goto LABEL_52; | |
} | |
if ( (_BYTE)v7 == 6 ) | |
{ | |
LABEL_45: | |
*(_BYTE *)(a2 + 56) = 1; | |
v3 = 1; | |
LABEL_46: | |
v14 = v6; | |
goto LABEL_47; | |
} | |
v15 = *v8; | |
switch ( *v8 ) | |
{ | |
case 0u: | |
case 3u: | |
v16 = *((_QWORD *)v8 + 2) + 4i64; | |
goto LABEL_44; | |
case 1u: | |
v24 = *((_QWORD *)v8 + 4); | |
v25 = v24 + 1; | |
if ( !v24 ) | |
v25 = 0i64; | |
v16 = v25 + *((_QWORD *)v8 + 2) + 8; | |
goto LABEL_44; | |
case 2u: | |
case 5u: | |
goto LABEL_54; | |
case 4u: | |
v26 = *((_QWORD *)v8 + 4); | |
v27 = v26 + 1; | |
if ( !v26 ) | |
v27 = 0i64; | |
v16 = v27 + *((_QWORD *)v8 + 2) + 2; | |
LABEL_44: | |
if ( !v16 ) | |
goto LABEL_45; | |
LABEL_54: | |
*(_BYTE *)(a2 + 56) = 1; | |
v30 = *(_QWORD *)(a2 + 8); | |
v31 = 6i64; | |
switch ( v15 ) | |
{ | |
case 0i64: | |
case 3i64: | |
v31 = *((_QWORD *)v8 + 2) + 4i64; | |
break; | |
case 1i64: | |
v33 = *((_QWORD *)v8 + 4); | |
v34 = v33 + 1; | |
if ( !v33 ) | |
v34 = 0i64; | |
v31 = *((_QWORD *)v8 + 2) + v34 + 8; | |
break; | |
case 2i64: | |
break; | |
case 4i64: | |
v35 = *((_QWORD *)v8 + 4); | |
v36 = v35 + 1; | |
if ( !v35 ) | |
v36 = 0i64; | |
v31 = *((_QWORD *)v8 + 2) + v36 + 2; | |
break; | |
case 5i64: | |
v31 = 2i64; | |
break; | |
} | |
if ( v31 > v30 ) | |
sub_14001D040(v31, v30, (__int64)&off_14001F2C8); | |
v37 = 6i64; | |
switch ( v15 ) | |
{ | |
case 0i64: | |
case 3i64: | |
v37 = *((_QWORD *)v8 + 2) + 4i64; | |
break; | |
case 1i64: | |
v38 = *((_QWORD *)v8 + 4); | |
v39 = v38 + 1; | |
if ( !v38 ) | |
v39 = 0i64; | |
v37 = v39 + *((_QWORD *)v8 + 2) + 8; | |
break; | |
case 2i64: | |
break; | |
case 4i64: | |
v40 = *((_QWORD *)v8 + 4); | |
v41 = v40 + 1; | |
if ( !v40 ) | |
v41 = 0i64; | |
v37 = v41 + *((_QWORD *)v8 + 2) + 2; | |
break; | |
case 5i64: | |
v37 = 2i64; | |
break; | |
} | |
if ( v30 < v37 ) | |
sub_14001D030(v37, v30, (__int64)&off_14001F2E0); | |
*(_QWORD *)a2 = &v6[v37]; | |
*(_QWORD *)(a2 + 8) = v30 - v37; | |
*(_QWORD *)(a1 + 48) = *(_QWORD *)(a2 + 48); | |
v42 = *(_OWORD *)(a2 + 17); | |
*(_OWORD *)(a1 + 33) = *(_OWORD *)(a2 + 33); | |
*(_OWORD *)(a1 + 17) = v42; | |
*(_QWORD *)a1 = v6; | |
*(_QWORD *)(a1 + 8) = v31; | |
*(_BYTE *)(a1 + 16) = v7; | |
break; | |
} | |
return a1; | |
} | |
// 14000746E: conditional instruction was optimized away because rdx.8!=0 | |
// 14000752D: conditional instruction was optimized away because r12.1 is in (1..2|>=4u) | |
// 14001F280: using guessed type char *off_14001F280; | |
// 14001F298: using guessed type char *off_14001F298; | |
// 14001F2B0: using guessed type char *off_14001F2B0; | |
// 14001F2C8: using guessed type char *off_14001F2C8; | |
// 14001F2E0: using guessed type char *off_14001F2E0; | |
//----- (0000000140007760) ---------------------------------------------------- | |
bool __fastcall sub_140007760(unsigned __int8 *a1, unsigned __int64 a2) | |
{ | |
unsigned __int64 v4; // rcx | |
unsigned __int64 v5; // r9 | |
unsigned __int8 *v6; // r10 | |
__int64 v7; // rcx | |
__int64 v8; // rcx | |
bool result; // al | |
__int64 v10; // rcx | |
__int64 v11; // rcx | |
char v12[16]; // [rsp+20h] [rbp-38h] BYREF | |
__int64 v13; // [rsp+30h] [rbp-28h] | |
__int64 v14; // [rsp+40h] [rbp-18h] | |
sub_14000BF60((__int64)v12, a1, a2); | |
v4 = 6i64; | |
v5 = a2; | |
v6 = a1; | |
switch ( a2 ) | |
{ | |
case 0ui64: | |
case 3ui64: | |
v4 = v13 + 4; | |
goto LABEL_10; | |
case 1ui64: | |
v7 = v14 + 1; | |
if ( !v14 ) | |
v7 = 0i64; | |
v4 = v13 + v7 + 8; | |
goto LABEL_10; | |
case 2ui64: | |
goto LABEL_10; | |
case 4ui64: | |
v8 = v14 + 1; | |
if ( !v14 ) | |
v8 = 0i64; | |
v4 = v13 + v8 + 2; | |
goto LABEL_10; | |
case 5ui64: | |
v4 = 2i64; | |
LABEL_10: | |
if ( v4 > a2 ) | |
LABEL_28: | |
sub_14001D030(v4, a2, (__int64)&off_14001F1E8); | |
v5 = a2 - v4; | |
v6 = &a1[v4]; | |
break; | |
case 6ui64: | |
break; | |
} | |
if ( v5 ) | |
{ | |
LOBYTE(v4) = *v6 == 92 || *v6 == 47; | |
if ( v12[0] < 5u ) | |
goto LABEL_18; | |
} | |
else | |
{ | |
LOBYTE(v4) = 0; | |
if ( v12[0] < 5u ) | |
goto LABEL_18; | |
} | |
while ( 2 ) | |
{ | |
if ( !(_BYTE)v4 ) | |
return 0; | |
LABEL_18: | |
sub_14000BF60((__int64)v12, a1, a2); | |
v4 = 6i64; | |
switch ( v12[0] ) | |
{ | |
case 0: | |
case 3: | |
v4 = v13 + 4; | |
goto LABEL_26; | |
case 1: | |
v10 = v14 + 1; | |
if ( !v14 ) | |
v10 = 0i64; | |
v4 = v13 + v10 + 8; | |
goto LABEL_26; | |
case 2: | |
goto LABEL_26; | |
case 4: | |
v11 = v14 + 1; | |
if ( !v14 ) | |
v11 = 0i64; | |
v4 = v13 + v11 + 2; | |
LABEL_26: | |
if ( v4 > a2 ) | |
goto LABEL_28; | |
result = v12[0] != 6; | |
break; | |
default: | |
continue; | |
} | |
return result; | |
} | |
} | |
// 14001F1E8: using guessed type char *off_14001F1E8; | |
//----- (00000001400078F0) ---------------------------------------------------- | |
_BYTE *__fastcall sub_1400078F0(unsigned __int8 *a1, unsigned __int64 a2, unsigned __int8 *a3, unsigned __int64 a4) | |
{ | |
unsigned __int64 v6; // rsi | |
char v8; // bp | |
unsigned __int64 v9; // rcx | |
__int64 v10; // r15 | |
unsigned __int8 *v11; // r9 | |
__int64 v12; // rcx | |
__int64 v13; // rcx | |
char v14; // r13 | |
unsigned __int64 v15; // rcx | |
unsigned __int64 v16; // r8 | |
unsigned __int8 *v17; // r9 | |
__int64 v18; // rcx | |
__int64 v19; // rdx | |
bool v20; // al | |
__int64 v21; // r8 | |
char v22; // r15 | |
char v23; // r12 | |
__int64 v24; // rsi | |
__int64 v25; // rbx | |
int v27; // [rsp+28h] [rbp-190h] | |
char v28; // [rsp+2Ch] [rbp-18Ch] | |
_BYTE v29[56]; // [rsp+30h] [rbp-188h] BYREF | |
char v30[3]; // [rsp+68h] [rbp-150h] BYREF | |
int v31; // [rsp+6Bh] [rbp-14Dh] | |
char v32; // [rsp+6Fh] [rbp-149h] | |
char v33; // [rsp+78h] [rbp-140h] | |
__int128 v34; // [rsp+A0h] [rbp-118h] | |
_BYTE v35[23]; // [rsp+B0h] [rbp-108h] | |
__int64 v36; // [rsp+D0h] [rbp-E8h] BYREF | |
__int64 v37; // [rsp+D8h] [rbp-E0h] | |
char v38; // [rsp+E0h] [rbp-D8h] | |
__int128 v39; // [rsp+E1h] [rbp-D7h] | |
char v40[23]; // [rsp+F1h] [rbp-C7h] | |
char v41; // [rsp+108h] [rbp-B0h] | |
char v42; // [rsp+109h] [rbp-AFh] | |
char v43; // [rsp+10Ah] [rbp-AEh] | |
int v44; // [rsp+10Bh] [rbp-ADh] | |
char v45; // [rsp+10Fh] [rbp-A9h] | |
__int128 v46; // [rsp+110h] [rbp-A8h] | |
_BYTE v47[23]; // [rsp+120h] [rbp-98h] | |
__int64 v48[2]; // [rsp+138h] [rbp-80h] BYREF | |
__int128 v49; // [rsp+148h] [rbp-70h] | |
__int128 v50; // [rsp+158h] [rbp-60h] | |
__int64 v51; // [rsp+168h] [rbp-50h] | |
__int16 v52; // [rsp+170h] [rbp-48h] | |
bool v53; // [rsp+172h] [rbp-46h] | |
v6 = a2; | |
sub_14000BF60((__int64)v29, a1, a2); | |
v8 = v29[0]; | |
v9 = 6i64; | |
v10 = v6; | |
v11 = a1; | |
switch ( v29[0] ) | |
{ | |
case 0: | |
case 3: | |
v9 = *(_QWORD *)&v29[16] + 4i64; | |
goto LABEL_10; | |
case 1: | |
v12 = *(_QWORD *)&v29[32] + 1i64; | |
if ( !*(_QWORD *)&v29[32] ) | |
v12 = 0i64; | |
v9 = *(_QWORD *)&v29[16] + v12 + 8; | |
goto LABEL_10; | |
case 2: | |
goto LABEL_10; | |
case 4: | |
v13 = *(_QWORD *)&v29[32] + 1i64; | |
if ( !*(_QWORD *)&v29[32] ) | |
v13 = 0i64; | |
v9 = *(_QWORD *)&v29[16] + v13 + 2; | |
goto LABEL_10; | |
case 5: | |
v9 = 2i64; | |
LABEL_10: | |
if ( v9 > v6 ) | |
sub_14001D030(v9, v6, (__int64)&off_14001F1E8); | |
v6 -= v9; | |
v11 = &a1[v9]; | |
break; | |
case 6: | |
break; | |
} | |
if ( v6 ) | |
v14 = *v11 == 92 || *v11 == 47; | |
else | |
v14 = 0; | |
*(_QWORD *)&v35[15] = *(_QWORD *)&v29[32]; | |
*(_OWORD *)v35 = *(_OWORD *)&v29[17]; | |
v34 = *(_OWORD *)&v29[1]; | |
sub_14000BF60((__int64)v29, a3, a4); | |
v15 = 6i64; | |
v16 = a4; | |
v17 = a3; | |
switch ( a4 ) | |
{ | |
case 0ui64: | |
case 3ui64: | |
JUMPOUT(0x140007A18i64); | |
case 1ui64: | |
JUMPOUT(0x140007A2Ci64); | |
case 2ui64: | |
goto LABEL_21; | |
case 4ui64: | |
v18 = *(_QWORD *)&v29[32] + 1i64; | |
if ( !*(_QWORD *)&v29[32] ) | |
v18 = 0i64; | |
v15 = *(_QWORD *)&v29[16] + v18 + 2; | |
goto LABEL_21; | |
case 5ui64: | |
v15 = 2i64; | |
LABEL_21: | |
if ( v15 > a4 ) | |
sub_14001D030(v15, a4, (__int64)&off_14001F1E8); | |
v16 = a4 - v15; | |
v17 = &a3[v15]; | |
break; | |
case 6ui64: | |
break; | |
} | |
v19 = (__int64)a1; | |
if ( v16 ) | |
v20 = *v17 == 92 || *v17 == 47; | |
else | |
v20 = 0; | |
v21 = v10; | |
v48[0] = (__int64)a3; | |
v48[1] = a4; | |
v49 = *(_OWORD *)v29; | |
v50 = *(_OWORD *)&v29[16]; | |
v51 = *(_QWORD *)&v29[32]; | |
v53 = v20; | |
v52 = 512; | |
v22 = 2; | |
v23 = 0; | |
if ( v8 != 6 ) | |
{ | |
LABEL_27: | |
*(_QWORD *)&v29[31] = *(_QWORD *)&v35[15]; | |
*(_OWORD *)&v29[16] = *(_OWORD *)v35; | |
*(_OWORD *)v29 = v34; | |
} | |
while ( 1 ) | |
{ | |
v24 = v19; | |
v36 = v19; | |
v25 = v21; | |
v37 = v21; | |
v38 = v8; | |
*(_QWORD *)&v40[15] = *(_QWORD *)&v29[31]; | |
*(_OWORD *)v40 = *(_OWORD *)&v29[16]; | |
v39 = *(_OWORD *)v29; | |
v43 = v14; | |
v41 = v23; | |
v42 = v22; | |
sub_1400072F0((__int64)v29, (__int64)&v36); | |
sub_1400072F0((__int64)v30, (__int64)v48); | |
if ( v29[16] == 10 ) | |
break; | |
if ( v33 == 10 ) | |
goto LABEL_34; | |
if ( !sub_14000B830((__int64)v29, (__int64)v30) ) | |
return 0i64; | |
v19 = v36; | |
v21 = v37; | |
v8 = v38; | |
v34 = v39; | |
*(_OWORD *)v35 = *(_OWORD *)v40; | |
*(_QWORD *)&v35[15] = *(_QWORD *)&v40[15]; | |
v23 = v41; | |
v22 = v42; | |
v14 = v43; | |
v28 = v45; | |
v27 = v44; | |
if ( v38 != 6 ) | |
goto LABEL_27; | |
} | |
if ( v33 != 10 ) | |
return 0i64; | |
LABEL_34: | |
*(_QWORD *)&v47[15] = *(_QWORD *)&v35[15]; | |
*(_OWORD *)v47 = *(_OWORD *)v35; | |
v46 = v34; | |
if ( v14 == 2 ) | |
return 0i64; | |
*(_QWORD *)v29 = v24; | |
*(_QWORD *)&v29[8] = v25; | |
v29[16] = v8; | |
*(_OWORD *)&v29[17] = v46; | |
*(_OWORD *)&v29[33] = *(_OWORD *)v47; | |
*(_QWORD *)&v29[48] = *(_QWORD *)&v47[15]; | |
v30[0] = v23; | |
v30[1] = v22; | |
v30[2] = v14; | |
v31 = v27; | |
v32 = v28; | |
return sub_140006A10((__int64)v29); | |
} | |
// 140007A28: control flows out of bounds to 140007A2C | |
// 140007A15: control flows out of bounds to 140007A18 | |
// 140007CC2: variable 'v27' is possibly undefined | |
// 140007CCB: variable 'v28' is possibly undefined | |
// 14001F1E8: using guessed type char *off_14001F1E8; | |
//----- (0000000140007D50) ---------------------------------------------------- | |
__int64 __fastcall sub_140007D50(_BYTE **a1) | |
{ | |
bool v1; // zf | |
int v2; // eax | |
__int64 result; // rax | |
char v4; // [rsp+57h] [rbp-9h] BYREF | |
__int64 v5; // [rsp+58h] [rbp-8h] | |
v5 = -2i64; | |
v1 = **a1 == 0; | |
**a1 = 0; | |
if ( v1 ) | |
sub_14001CC50( | |
(__int64)"called `Option::unwrap()` on a `None` valueinternal error: entered unreachable code/rustc/90c541806f23a12" | |
"7002de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
43i64, | |
(__int64)&off_14001F340); | |
v4 = 0; | |
if ( qword_140027178 == 3 || (sub_14001C2D0((__int64)&v4), !v4) ) | |
{ | |
if ( qword_140027140 == *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 32i64 ) | |
{ | |
v2 = dword_140027170 + 1; | |
if ( dword_140027170 == -1 ) | |
sub_14001CB40( | |
(__int64)"lock count overflow in reentrant mutexlibrary\\std\\src\\sync\\remutex.rs", | |
38i64, | |
(__int64)&off_14001F420); | |
} | |
else | |
{ | |
if ( !TryAcquireSRWLockExclusive(&SRWLock) ) | |
goto LABEL_12; | |
qword_140027140 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 32i64; | |
v2 = 1; | |
} | |
dword_140027170 = v2; | |
if ( !qword_140027148 ) | |
{ | |
qword_140027148 = -1i64; | |
JUMPOUT(0x140007E59i64); | |
} | |
JUMPOUT(0x140007EF1i64); | |
} | |
LABEL_12: | |
result = qword_1400271E8; | |
if ( qword_1400271E8 == 3 ) | |
return qword_1400271F0(); | |
return result; | |
} | |
// 140007E4E: control flows out of bounds to 140007E59 | |
// 140007E48: control flows out of bounds to 140007EF1 | |
// 140007D8A: conditional instruction was optimized away because %var_9.1==0 | |
// 14001F340: using guessed type char *off_14001F340; | |
// 14001F420: using guessed type void *off_14001F420; | |
// 140027140: using guessed type __int64 qword_140027140; | |
// 140027148: using guessed type __int64 qword_140027148; | |
// 140027170: using guessed type int dword_140027170; | |
// 140027178: using guessed type __int64 qword_140027178; | |
// 1400271E8: using guessed type __int64 qword_1400271E8; | |
// 1400271F0: using guessed type __int64 (*qword_1400271F0)(void); | |
// 140027270: using guessed type int TlsIndex; | |
//----- (0000000140007FB0) ---------------------------------------------------- | |
__int64 __fastcall sub_140007FB0(__int64 *a1) | |
{ | |
_QWORD *ThreadLocalStoragePointer; // rcx | |
__int64 result; // rax | |
__int64 v4; // rdi | |
__int64 v5; // rdx | |
__int64 v6; // r8 | |
volatile signed __int64 *v7; // rcx | |
bool v8; // zf | |
ThreadLocalStoragePointer = NtCurrentTeb()->ThreadLocalStoragePointer; | |
if ( *(_BYTE *)(ThreadLocalStoragePointer[TlsIndex] + 24i64) ) | |
{ | |
if ( *(_BYTE *)(ThreadLocalStoragePointer[TlsIndex] + 24i64) != 1 ) | |
return 0i64; | |
} | |
else | |
{ | |
v4 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
sub_14000CA80(v4 + 8, (__int64)sub_1400080A0); | |
*(_BYTE *)(v4 + 24) = 1; | |
} | |
if ( a1 ) | |
{ | |
v5 = *a1; | |
*a1 = 0i64; | |
if ( v5 ) | |
v5 = a1[1]; | |
} | |
else | |
{ | |
v5 = 0i64; | |
} | |
v6 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
v7 = *(volatile signed __int64 **)(v6 + 16); | |
result = v6 + 16; | |
v8 = *(_QWORD *)(v6 + 8) == 0i64; | |
*(_QWORD *)(v6 + 8) = 1i64; | |
*(_QWORD *)(v6 + 16) = v5; | |
if ( !v8 && v7 ) | |
{ | |
if ( !_InterlockedDecrement64(v7) ) | |
sub_140002D80((__int64)v7); | |
return *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 16i64; | |
} | |
return result; | |
} | |
// 140027270: using guessed type int TlsIndex; | |
//----- (00000001400080A0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400080A0(__int64 a1) | |
{ | |
__int64 result; // rax | |
volatile signed __int64 *v2; // rcx | |
bool v3; // zf | |
result = a1; | |
v2 = *(volatile signed __int64 **)(a1 + 8); | |
v3 = *(_QWORD *)result == 0i64; | |
*(_QWORD *)result = 0i64; | |
*(_BYTE *)(result + 16) = 2; | |
if ( !v3 && v2 && !_InterlockedDecrement64(v2) ) | |
return sub_140002D80((__int64)v2); | |
return result; | |
} | |
//----- (00000001400080D0) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
void sub_1400080D0() | |
{ | |
AcquireSRWLockExclusive(&stru_140027188); | |
if ( 2 * qword_1400271C0 ) | |
sub_14001C340(); | |
JUMPOUT(0x140008162i64); | |
} | |
// 14000819C: positive sp value 98 has been found | |
// 14000815A: control flows out of bounds to 140008162 | |
// 1400271C0: using guessed type __int64 qword_1400271C0; | |
//----- (00000001400081F0) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
void __fastcall sub_1400081F0( | |
char *a1, | |
__int64 a2, | |
__int64 a3, | |
__int64 a4, | |
__int64 a5, | |
__int64 a6, | |
__int64 a7, | |
__int64 a8, | |
int a9) | |
{ | |
char v9; // si | |
__int64 v10; // [rsp-768h] [rbp-7E8h] BYREF | |
__int128 v11; // [rsp+50h] [rbp-30h] | |
char **v12; // [rsp+60h] [rbp-20h] | |
__int64 v13; // [rsp+68h] [rbp-18h] | |
const char *v14; // [rsp+70h] [rbp-10h] | |
__int64 v15; // [rsp+78h] [rbp-8h] | |
__int128 v16; // [rsp+550h] [rbp+4D0h] | |
char **v17; // [rsp+560h] [rbp+4E0h] | |
__int128 v18; // [rsp+6C0h] [rbp+640h] | |
char **v19; // [rsp+6D0h] [rbp+650h] | |
char v20; // [rsp+6D8h] [rbp+658h] | |
char v21[7]; // [rsp+6D9h] [rbp+659h] | |
char v22; // [rsp+6E0h] [rbp+660h] | |
_DWORD v23[2]; // [rsp+6F8h] [rbp+678h] | |
__int64 v24; // [rsp+708h] [rbp+688h] | |
__int64 v25; // [rsp+710h] [rbp+690h] | |
char v26; // [rsp+71Fh] [rbp+69Fh] | |
__int64 v27; // [rsp+720h] [rbp+6A0h] | |
v27 = -2i64; | |
v9 = *a1; | |
v26 = *a1; | |
sub_140003DE0((__int64)(&v10 + 10)); | |
if ( (_BYTE)v13 == 2 ) | |
{ | |
if ( (v11 & 3) == 1 ) | |
{ | |
v24 = v11 - 1; | |
v25 = v11; | |
JUMPOUT(0x140008261i64); | |
} | |
} | |
else | |
{ | |
v17 = v12; | |
v16 = v11; | |
v23[0] = *(_DWORD *)((char *)&v13 + 1); | |
*(_DWORD *)((char *)v23 + 3) = HIDWORD(v13); | |
} | |
v22 = v9; | |
v18 = v16; | |
v19 = v17; | |
v20 = v13; | |
*(_DWORD *)v21 = v23[0]; | |
*(_DWORD *)&v21[3] = *(_DWORD *)((char *)v23 + 3); | |
v12 = &off_14001F450; | |
v13 = 1i64; | |
*(_QWORD *)&v11 = 0i64; | |
v14 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v15 = 0i64; | |
JUMPOUT(0x14000833Di64); | |
} | |
// 1400086A8: positive sp value 768 has been found | |
// 14000825D: control flows out of bounds to 140008261 | |
// 140008335: control flows out of bounds to 14000833D | |
// 14001F450: using guessed type char *off_14001F450; | |
// 1400081F0: using guessed type _DWORD var_68[2]; | |
//----- (0000000140008990) ---------------------------------------------------- | |
__int64 __fastcall sub_140008990(__int64 a1, __int64 *a2, __int64 a3) | |
{ | |
return sub_140008DF0(a2, a3, *(_BYTE *)(a1 + 32)); | |
} | |
//----- (00000001400089B0) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
void __fastcall sub_1400089B0(__int64 a1, __int64 a2) | |
{ | |
_BYTE *v2; // rax | |
_BYTE *v3; // r15 | |
__int64 v4; // rbx | |
__int64 v5; // r14 | |
__int64 v6[12]; // [rsp+58h] [rbp-28h] BYREF | |
char v7; // [rsp+BEh] [rbp+3Eh] BYREF | |
char v8; // [rsp+BFh] [rbp+3Fh] BYREF | |
__int64 v9; // [rsp+C0h] [rbp+40h] | |
v9 = -2i64; | |
v2 = *(_BYTE **)a1; | |
if ( !**(_BYTE **)a1 && **(_QWORD **)(a1 + 8) > 0x64ui64 ) | |
goto LABEL_9; | |
v8 = 0; | |
v7 = 0; | |
v3 = *(_BYTE **)(a1 + 16); | |
v4 = *(_QWORD *)(a1 + 24); | |
v5 = *(_QWORD *)(a1 + 32); | |
v6[0] = (__int64)&v8; | |
v6[1] = (__int64)v2; | |
v6[2] = (__int64)v3; | |
v6[3] = (__int64)&v7; | |
v6[4] = v4; | |
v6[5] = v5; | |
v6[6] = a2; | |
sub_14000DE70(a2, (__int64)v6, (__int64)&off_14001FB38); | |
if ( v7 ) | |
LABEL_9: | |
JUMPOUT(0x140008AA0i64); | |
if ( !v8 && *v3 ) | |
{ | |
v6[10] = 0i64; | |
v6[11] = v5; | |
v6[0] = 3i64; | |
JUMPOUT(0x140008A68i64); | |
} | |
JUMPOUT(0x140008A93i64); | |
} | |
// 140008AAF: positive sp value 28 has been found | |
// 140008A60: control flows out of bounds to 140008A68 | |
// 140008A3A: control flows out of bounds to 140008AA0 | |
// 140008A40: control flows out of bounds to 140008A93 | |
// 14001FB38: using guessed type __int64 (__fastcall *off_14001FB38)(); | |
//----- (0000000140008AE0) ---------------------------------------------------- | |
_BYTE *__fastcall sub_140008AE0(__int64 a1, __int64 *a2) | |
{ | |
_BYTE *result; // rax | |
__int64 v4; // rbx | |
unsigned __int64 v5; // r14 | |
__int64 v6; // r15 | |
__int64 v7; // rax | |
unsigned __int64 v8; // rdx | |
char *v9; // rbx | |
unsigned __int64 v10; // r14 | |
_BYTE *v11; // r15 | |
__int128 v12; // [rsp+50h] [rbp-30h] BYREF | |
__int128 v13; // [rsp+60h] [rbp-20h] | |
__int128 v14; // [rsp+70h] [rbp-10h] | |
__int64 v15; // [rsp+80h] [rbp+0h] | |
__int64 v16; // [rsp+88h] [rbp+8h] BYREF | |
__int128 v17; // [rsp+90h] [rbp+10h] | |
__int128 v18; // [rsp+A0h] [rbp+20h] | |
__int128 v19; // [rsp+B0h] [rbp+30h] | |
__int64 v20; // [rsp+C0h] [rbp+40h] | |
__int64 v21; // [rsp+C8h] [rbp+48h] | |
unsigned __int64 v22; // [rsp+D0h] [rbp+50h] | |
__int64 v23; // [rsp+D8h] [rbp+58h] | |
v23 = -2i64; | |
**(_BYTE **)a1 = 1; | |
if ( **(_BYTE **)(a1 + 8) ) | |
goto LABEL_2; | |
v4 = *a2; | |
v5 = a2[1]; | |
sub_140018DE0((__int64)&v16, *a2, v5); | |
v6 = 2i64; | |
if ( !v16 ) | |
{ | |
if ( (_QWORD)v17 ) | |
{ | |
sub_1400154F0((__int128 *)&v16, v17, *((__int64 *)&v17 + 1)); | |
if ( v16 != 2 ) | |
{ | |
v15 = v20; | |
v14 = v19; | |
v13 = v18; | |
v12 = v17; | |
v6 = v16; | |
} | |
} | |
} | |
v20 = v15; | |
v19 = v14; | |
v18 = v13; | |
v17 = v12; | |
v16 = v6; | |
v21 = v4; | |
v22 = v5; | |
if ( v6 != 2 ) | |
{ | |
v7 = sub_140015540((__int64)&v16); | |
if ( v7 ) | |
{ | |
v9 = (char *)v7; | |
v10 = v8; | |
v11 = *(_BYTE **)(a1 + 16); | |
if ( !*v11 ) | |
goto LABEL_19; | |
goto LABEL_17; | |
} | |
v4 = v21; | |
v5 = v22; | |
} | |
sub_140018DE0((__int64)&v12, v4, v5); | |
if ( (_QWORD)v12 ) | |
goto LABEL_2; | |
v9 = (char *)*((_QWORD *)&v12 + 1); | |
if ( !*((_QWORD *)&v12 + 1) ) | |
goto LABEL_2; | |
v10 = v13; | |
v11 = *(_BYTE **)(a1 + 16); | |
if ( *v11 ) | |
{ | |
LABEL_17: | |
if ( (unsigned __int8)sub_140002500( | |
"__rust_begin_short_backtrace__rust_end_short_backtrace<unknown>", | |
0x1Cui64, | |
v9, | |
v10) ) | |
{ | |
result = *(_BYTE **)(a1 + 24); | |
*result = 1; | |
return result; | |
} | |
} | |
LABEL_19: | |
result = (_BYTE *)sub_140002500("__rust_end_short_backtrace<unknown>", 0x1Aui64, v9, v10); | |
if ( (_BYTE)result ) | |
{ | |
*v11 = 1; | |
return result; | |
} | |
LABEL_2: | |
result = *(_BYTE **)(a1 + 16); | |
if ( *result ) | |
JUMPOUT(0x140008B46i64); | |
return result; | |
} | |
// 140008B42: control flows out of bounds to 140008B46 | |
// 140008C4E: variable 'v8' is possibly undefined | |
//----- (0000000140008DE0) ---------------------------------------------------- | |
void __fastcall __noreturn sub_140008DE0(__int64 *a1) | |
{ | |
sub_14000A840(a1); | |
BUG(); | |
} | |
//----- (0000000140008DF0) ---------------------------------------------------- | |
__int64 __fastcall sub_140008DF0(__int64 *a1, __int64 a2, char a3) | |
{ | |
char v5; // r13 | |
__int64 v6; // rdi | |
unsigned __int64 v7; // rbx | |
char *v8; // rax | |
__int64 v9; // rcx | |
unsigned int v10; // eax | |
unsigned int v11; // ebx | |
__int64 v13[3]; // [rsp+50h] [rbp-30h] BYREF | |
__int128 v14; // [rsp+80h] [rbp+0h] BYREF | |
unsigned __int64 v15; // [rsp+90h] [rbp+10h] | |
char v16; // [rsp+98h] [rbp+18h] | |
__int64 v17; // [rsp+A0h] [rbp+20h] | |
v17 = -2i64; | |
if ( *(_QWORD *)a2 ) | |
{ | |
sub_1400066C0(&v14, *(unsigned __int16 **)(a2 + 8), *(_QWORD *)(a2 + 16)); | |
v5 = v16; | |
if ( a3 ) | |
goto LABEL_3; | |
LABEL_9: | |
JUMPOUT(0x140008EACi64); | |
} | |
sub_140018DE0((__int64)v13, *(_QWORD *)(a2 + 8), *(_QWORD *)(a2 + 16)); | |
v8 = "<unknown>"; | |
if ( !v13[0] ) | |
v8 = (char *)v13[1]; | |
v9 = 9i64; | |
if ( !v13[0] ) | |
v9 = v13[2]; | |
*(_QWORD *)&v14 = v8; | |
*((_QWORD *)&v14 + 1) = v9; | |
v16 = 2; | |
v5 = 2; | |
if ( !a3 ) | |
goto LABEL_9; | |
LABEL_3: | |
v6 = *((_QWORD *)&v14 + 1); | |
v7 = v15; | |
if ( v5 == 2 ) | |
v7 = *((_QWORD *)&v14 + 1); | |
LOBYTE(v10) = sub_1400095B0(*((_QWORD *)&v14 + (v5 != 2)), v7, a1); | |
v11 = v10; | |
if ( v5 != 2 && (_QWORD)v14 ) | |
sub_1400010E0(v6, v14, 1i64); | |
return v11; | |
} | |
// 140008EA8: control flows out of bounds to 140008EAC | |
// 140008FA5: variable 'v10' is possibly undefined | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140009090) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
volatile signed __int64 *sub_140009090() | |
{ | |
int v0; // eax | |
__int64 v1; // rsi | |
__int64 v2; // rax | |
volatile signed __int64 *result; // rax | |
__int64 v4; // rcx | |
char v5[8]; // [rsp+28h] [rbp-8h] BYREF | |
__int64 v6; // [rsp+30h] [rbp+0h] | |
v6 = -2i64; | |
v0 = *(unsigned __int8 *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 80i64); | |
if ( v0 != 1 ) | |
{ | |
if ( v0 ) | |
return 0i64; | |
v1 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
sub_14000CA80(v1 + 64, (__int64)qword_14000DCB0); | |
*(_BYTE *)(v1 + 80) = 1; | |
} | |
if ( *(_QWORD *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 64i64) ) | |
sub_14001CF90( | |
(__int64)"already borrowedlibrary\\std\\src\\io\\stdio.rs", | |
16i64, | |
(__int64)v5, | |
(__int64)&off_14001E650, | |
(__int64)&off_14001F580); | |
v2 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
*(_QWORD *)(v2 + 64) = -1i64; | |
result = *(volatile signed __int64 **)(v2 + 72); | |
if ( !result ) | |
JUMPOUT(0x14000913Ei64); | |
if ( _InterlockedIncrement64(result) <= 0 ) | |
BUG(); | |
v4 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
++*(_QWORD *)(v4 + 64); | |
return result; | |
} | |
// 140009140: positive sp value 48 has been found | |
// 14000913C: control flows out of bounds to 14000913E | |
// 14000DCB0: using guessed type __int64 qword_14000DCB0[6]; | |
// 14001E650: using guessed type __int64 (__fastcall *off_14001E650)(); | |
// 14001F580: using guessed type char *off_14001F580; | |
// 140027270: using guessed type int TlsIndex; | |
// 140009090: using guessed type char var_18[8]; | |
//----- (0000000140009200) ---------------------------------------------------- | |
__int64 __fastcall sub_140009200(volatile signed __int64 *a1) | |
{ | |
int v1; // eax | |
__int64 v2; // rax | |
__int64 result; // rax | |
__int64 v4[9]; // [rsp+58h] [rbp-28h] BYREF | |
int v5; // [rsp+A0h] [rbp+20h] | |
char v6; // [rsp+A4h] [rbp+24h] | |
volatile signed __int64 *v7; // [rsp+A8h] [rbp+28h] | |
char v8; // [rsp+B7h] [rbp+37h] | |
__int64 v9; // [rsp+B8h] [rbp+38h] | |
v9 = -2i64; | |
v1 = *(unsigned __int8 *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 80i64); | |
if ( v1 != 1 ) | |
{ | |
v7 = a1; | |
if ( !v1 ) | |
{ | |
v8 = 1; | |
JUMPOUT(0x140009261i64); | |
} | |
if ( !_InterlockedDecrement64(v7) ) | |
sub_140002DF0((__int64)v7); | |
sub_14001CF90((__int64)&unk_14001E9CB, 70i64, (__int64)v4, (__int64)&off_14001E670, (__int64)&off_14001EA30); | |
} | |
v4[8] = (__int64)a1; | |
if ( *(_QWORD *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 64i64) ) | |
JUMPOUT(0x140009302i64); | |
v2 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
*(_QWORD *)(v2 + 64) = -1i64; | |
if ( *(_QWORD *)(v2 + 72) ) | |
{ | |
v7 = a1; | |
v6 = 0; | |
v5 = 0; | |
v4[2] = (__int64)&off_14001F5D8; | |
v4[3] = 1i64; | |
v4[0] = 0i64; | |
v4[4] = (__int64)"/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v4[5] = 0i64; | |
v4[6] = (__int64)v4; | |
v4[7] = (__int64)sub_140017290; | |
JUMPOUT(0x1400093ABi64); | |
} | |
result = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
*(_QWORD *)(result + 72) = a1; | |
*(_QWORD *)(result + 64) = 0i64; | |
return result; | |
} | |
// 14000925A: control flows out of bounds to 140009261 | |
// 1400093A3: control flows out of bounds to 1400093AB | |
// 1400092AA: control flows out of bounds to 140009302 | |
// 14001E670: using guessed type __int64 (__fastcall *off_14001E670)(); | |
// 14001EA30: using guessed type void *off_14001EA30; | |
// 14001F5D8: using guessed type char *off_14001F5D8; | |
// 140027270: using guessed type int TlsIndex; | |
//----- (00000001400094B0) ---------------------------------------------------- | |
void *__fastcall sub_1400094B0(__int64 *a1, unsigned int a2) | |
{ | |
size_t v3; // rdi | |
__int64 v4; // rbx | |
void *result; // rax | |
int Src; // [rsp+2Ch] [rbp-1Ch] BYREF | |
Src = 0; | |
if ( a2 >= 0x80 ) | |
{ | |
if ( a2 >= 0x800 ) | |
{ | |
if ( a2 > 0xFFFF ) | |
{ | |
LOBYTE(Src) = (a2 >> 18) & 7 | 0xF0; | |
BYTE1(Src) = (a2 >> 12) & 0x3F | 0x80; | |
BYTE2(Src) = (a2 >> 6) & 0x3F | 0x80; | |
HIBYTE(Src) = a2 & 0x3F | 0x80; | |
v3 = 4i64; | |
} | |
else | |
{ | |
LOBYTE(Src) = (a2 >> 12) | 0xE0; | |
BYTE1(Src) = (a2 >> 6) & 0x3F | 0x80; | |
BYTE2(Src) = a2 & 0x3F | 0x80; | |
v3 = 3i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(Src) = (a2 >> 6) | 0xC0; | |
BYTE1(Src) = a2 & 0x3F | 0x80; | |
v3 = 2i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(Src) = a2; | |
v3 = 1i64; | |
} | |
v4 = a1[2]; | |
if ( *a1 - v4 < v3 ) | |
{ | |
sub_14001C0D0(a1, a1[2], v3); | |
v4 = a1[2]; | |
} | |
result = memcpy((void *)(v4 + a1[1]), &Src, v3); | |
a1[2] = v3 + v4; | |
return result; | |
} | |
//----- (00000001400095B0) ---------------------------------------------------- | |
char __fastcall sub_1400095B0(__int64 a1, unsigned __int64 a2, __int64 *a3) | |
{ | |
char *v6; // r12 | |
unsigned __int64 v7; // rcx | |
unsigned __int64 v8; // r14 | |
char *v9; // r8 | |
char *v10; // r8 | |
char *v11; // rax | |
__int64 v12; // r9 | |
char v13; // r10 | |
char *v14; // r8 | |
unsigned __int64 v15; // r14 | |
unsigned __int64 v16; // rsi | |
unsigned __int8 *v17; // rbx | |
v6 = (char *)(a1 + a2); | |
v7 = 0i64; | |
while ( v7 != a2 ) | |
{ | |
v8 = v7; | |
v9 = (char *)(a1 + v7); | |
while ( 1 ) | |
{ | |
v11 = v9 + 1; | |
v13 = *v9; | |
v12 = 1i64; | |
if ( *v9 < 0 ) | |
break; | |
LABEL_7: | |
v8 += v12; | |
v9 = v11; | |
if ( v11 == v6 ) | |
goto LABEL_26; | |
} | |
if ( (unsigned __int8)v13 < 0xE0u ) | |
{ | |
v10 = v9 + 2; | |
if ( v11 != v6 ) | |
v11 = v10; | |
v12 = 2i64; | |
goto LABEL_7; | |
} | |
if ( v13 != -19 ) | |
{ | |
v14 = v9 + 2; | |
if ( v11 == v6 ) | |
v14 = v11; | |
v11 = &v14[v14 != v6]; | |
v12 = 3i64; | |
if ( (unsigned __int8)v13 >= 0xF0u ) | |
{ | |
v11 += v11 != v6; | |
v12 = 4i64; | |
} | |
goto LABEL_7; | |
} | |
if ( v11 == v6 || v9 + 2 == v6 ) | |
goto LABEL_26; | |
if ( (unsigned __int8)v9[1] <= 0x9Fu ) | |
{ | |
v12 = 3i64; | |
v11 = v9 + 3; | |
goto LABEL_7; | |
} | |
if ( v8 < v7 ) | |
sub_14001D050(v7, v8, (__int64)&off_14001F610); | |
if ( v8 > a2 ) | |
sub_14001D040(v8, a2, (__int64)&off_14001F610); | |
if ( (unsigned __int8)sub_140017BE0(a3) || (unsigned __int8)sub_140017BE0(a3) ) | |
return 1; | |
v15 = v8 + 3; | |
v7 = v15; | |
if ( v15 > a2 ) | |
sub_14001D030(v15, a2, (__int64)&off_14001F630); | |
} | |
v7 = a2; | |
LABEL_26: | |
v16 = a2 - v7; | |
v17 = (unsigned __int8 *)(v7 + a1); | |
if ( v7 ) | |
return sub_140017BE0(a3); | |
else | |
return sub_1400183F0(v17, v16, a3); | |
} | |
// 14001F610: using guessed type char *off_14001F610; | |
// 14001F630: using guessed type char *off_14001F630; | |
//----- (0000000140009770) ---------------------------------------------------- | |
void __fastcall sub_140009770(__int64 a1) | |
{ | |
__int64 v1; // rax | |
__int64 v2; // [rsp+20h] [rbp-60h] BYREF | |
char **v3; // [rsp+30h] [rbp-50h] | |
__int64 v4; // [rsp+38h] [rbp-48h] | |
__int64 **v5; // [rsp+40h] [rbp-40h] | |
__int64 v6; // [rsp+48h] [rbp-38h] | |
__int64 *v7; // [rsp+50h] [rbp-30h] BYREF | |
__int64 (__fastcall *v8)(unsigned __int64 *, __int64); // [rsp+58h] [rbp-28h] | |
__int64 v9; // [rsp+60h] [rbp-20h] | |
__int64 v10; // [rsp+68h] [rbp-18h] | |
__int64 v11; // [rsp+70h] [rbp-10h] BYREF | |
int v12; // [rsp+78h] [rbp-8h] | |
char v13; // [rsp+7Ch] [rbp-4h] | |
__int64 v14; // [rsp+80h] [rbp+0h] | |
v14 = -2i64; | |
if ( byte_140027120 ) | |
{ | |
v11 = a1; | |
v7 = &v11; | |
v8 = sub_14001AD00; | |
v3 = &off_14001F670; | |
v4 = 2i64; | |
v2 = 0i64; | |
v5 = &v7; | |
v6 = 1i64; | |
sub_14001CBB0((__int64)&v2, (__int64)&off_14001F6A8); | |
} | |
v13 = 0; | |
v12 = 0; | |
v11 = a1; | |
v7 = &v11; | |
v8 = sub_14001AD00; | |
v3 = &off_14001F6D0; | |
v4 = 2i64; | |
v2 = 0i64; | |
v5 = &v7; | |
v6 = 1i64; | |
sub_140006220(); | |
if ( v1 && (v1 & 3) == 1 ) | |
{ | |
v9 = v1 - 1; | |
v10 = v1; | |
JUMPOUT(0x140009815i64); | |
} | |
} | |
// 140009811: control flows out of bounds to 140009815 | |
// 1400097F3: variable 'v1' is possibly undefined | |
// 14001F670: using guessed type char *off_14001F670; | |
// 14001F6A8: using guessed type void *off_14001F6A8; | |
// 14001F6D0: using guessed type char *off_14001F6D0; | |
// 140027120: using guessed type char byte_140027120; | |
//----- (00000001400098F0) ---------------------------------------------------- | |
char *__fastcall sub_1400098F0(SIZE_T a1, unsigned __int64 a2) | |
{ | |
HANDLE v4; // rcx | |
HANDLE ProcessHeap; // rax | |
char *v7; // rbx | |
unsigned __int64 v8; // rax | |
unsigned __int64 v9; // rsi | |
v4 = hHeap; | |
if ( hHeap ) | |
{ | |
if ( a2 < 0x11 ) | |
return (char *)HeapAlloc(v4, 0, a1); | |
goto LABEL_6; | |
} | |
ProcessHeap = GetProcessHeap(); | |
if ( ProcessHeap ) | |
{ | |
v4 = ProcessHeap; | |
hHeap = ProcessHeap; | |
if ( a2 < 0x11 ) | |
return (char *)HeapAlloc(v4, 0, a1); | |
LABEL_6: | |
v7 = 0i64; | |
v8 = (unsigned __int64)HeapAlloc(v4, 0, a2 + a1); | |
if ( v8 ) | |
{ | |
v9 = a2 - (v8 & (a2 - 1)); | |
v7 = (char *)(v9 + v8); | |
*(_QWORD *)(v8 + v9 - 8) = v8; | |
} | |
return v7; | |
} | |
return 0i64; | |
} | |
//----- (0000000140009980) ---------------------------------------------------- | |
BOOL __fastcall sub_140009980(void *a1, __int64 a2, unsigned __int64 a3) | |
{ | |
void *v3; // rax | |
v3 = a1; | |
if ( a3 >= 0x11 ) | |
v3 = (void *)*((_QWORD *)a1 - 1); | |
return HeapFree(hHeap, 0, v3); | |
} | |
//----- (00000001400099A0) ---------------------------------------------------- | |
char *__fastcall sub_1400099A0(void *Src, size_t Size, unsigned __int64 a3, SIZE_T a4) | |
{ | |
size_t v4; // rsi | |
HANDLE v9; // rcx | |
HANDLE ProcessHeap; // rax | |
char *v11; // r15 | |
unsigned __int64 v12; // rax | |
unsigned __int64 v13; // r14 | |
v4 = a4; | |
if ( a3 < 0x11 ) | |
return (char *)HeapReAlloc(hHeap, 0, Src, a4); | |
v9 = hHeap; | |
if ( hHeap ) | |
goto LABEL_6; | |
ProcessHeap = GetProcessHeap(); | |
if ( ProcessHeap ) | |
{ | |
v9 = ProcessHeap; | |
hHeap = ProcessHeap; | |
LABEL_6: | |
v11 = 0i64; | |
v12 = (unsigned __int64)HeapAlloc(v9, 0, v4 + a3); | |
if ( v12 ) | |
{ | |
v13 = a3 - (v12 & (a3 - 1)); | |
v11 = (char *)(v13 + v12); | |
*(_QWORD *)(v12 + v13 - 8) = v12; | |
if ( Size < v4 ) | |
v4 = Size; | |
memcpy((void *)(v13 + v12), Src, v4); | |
HeapFree(hHeap, 0, *((LPVOID *)Src - 1)); | |
} | |
return v11; | |
} | |
return 0i64; | |
} | |
//----- (0000000140009A70) ---------------------------------------------------- | |
void sub_140009A70() | |
{ | |
_QWORD v0[17]; // [rsp+28h] [rbp-80h] BYREF | |
__int64 v1[2]; // [rsp+B0h] [rbp+8h] BYREF | |
int v2; // [rsp+D0h] [rbp+28h] | |
char v3; // [rsp+D4h] [rbp+2Ch] | |
__int64 v4; // [rsp+D8h] [rbp+30h] | |
v4 = -2i64; | |
v3 = 0; | |
v2 = 0; | |
v0[7] = &off_14001F710; | |
v0[8] = 1i64; | |
v0[5] = 0i64; | |
v0[9] = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v0[10] = 0i64; | |
v1[0] = (__int64)&v0[5]; | |
v1[1] = (__int64)sub_140017290; | |
v0[13] = &off_14001E8D0; | |
v0[14] = 2i64; | |
v0[11] = 0i64; | |
v0[15] = v1; | |
v0[16] = 1i64; | |
JUMPOUT(0x140009B00i64); | |
} | |
// 140009AF8: control flows out of bounds to 140009B00 | |
// 14001E8D0: using guessed type void *off_14001E8D0; | |
// 14001F710: using guessed type char *off_14001F710; | |
//----- (0000000140009BE0) ---------------------------------------------------- | |
void sub_140009BE0() | |
{ | |
_QWORD v0[17]; // [rsp+28h] [rbp-80h] BYREF | |
__int64 v1[2]; // [rsp+B0h] [rbp+8h] BYREF | |
int v2; // [rsp+D0h] [rbp+28h] | |
char v3; // [rsp+D4h] [rbp+2Ch] | |
__int64 v4; // [rsp+D8h] [rbp+30h] | |
v4 = -2i64; | |
v3 = 0; | |
v2 = 0; | |
v0[7] = &off_14001F748; | |
v0[8] = 1i64; | |
v0[5] = 0i64; | |
v0[9] = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v0[10] = 0i64; | |
v1[0] = (__int64)&v0[5]; | |
v1[1] = (__int64)sub_140017290; | |
v0[13] = &off_14001E8D0; | |
v0[14] = 2i64; | |
v0[11] = 0i64; | |
v0[15] = v1; | |
v0[16] = 1i64; | |
JUMPOUT(0x140009C70i64); | |
} | |
// 140009C68: control flows out of bounds to 140009C70 | |
// 14001E8D0: using guessed type void *off_14001E8D0; | |
// 14001F748: using guessed type char *off_14001F748; | |
//----- (0000000140009D50) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
void __fastcall sub_140009D50(__int64 a1) | |
{ | |
__int64 v2; // rdi | |
__int64 v3; // rdx | |
__int64 v4; // rax | |
__int64 v5; // rsi | |
__int64 v6; // rdx | |
__int64 v7; // rax | |
RTL_SRWLOCK **v8; // rax | |
RTL_SRWLOCK *v9; // rsi | |
if ( *(_QWORD *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 88i64) <= 1ui64 ) | |
sub_140006930(); | |
if ( sub_140016840(a1) ) | |
{ | |
v2 = sub_140016820(a1); | |
v4 = (*(__int64 (__fastcall **)(__int64))(v3 + 24))(v2); | |
if ( !v2 || v4 != 0xC1A2C89CCD1E7BC1ui64 ) | |
{ | |
v5 = sub_140016820(a1); | |
(*(void (__fastcall **)(__int64))(v6 + 24))(v5); | |
} | |
sub_140009090(); | |
if ( byte_140027130 ) | |
{ | |
byte_140027130 = 1; | |
v7 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
if ( !*(_QWORD *)(v7 + 8) ) | |
JUMPOUT(0x140009EB1i64); | |
v8 = (RTL_SRWLOCK **)(v7 + 16); | |
v9 = *v8; | |
*v8 = 0i64; | |
if ( v9 ) | |
{ | |
AcquireSRWLockExclusive(v9 + 2); | |
if ( 2 * qword_1400271C0 ) | |
sub_14001C340(); | |
JUMPOUT(0x140009F0Ci64); | |
} | |
} | |
JUMPOUT(0x140009F8Ci64); | |
} | |
sub_14001CC50( | |
(__int64)"called `Option::unwrap()` on a `None` valueinternal error: entered unreachable code/rustc/90c541806f23a1270" | |
"02de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
43i64, | |
(__int64)&off_14001F830); | |
} | |
// 140009FC3: positive sp value D8 has been found | |
// 140009F08: control flows out of bounds to 140009F0C | |
// 140009F88: control flows out of bounds to 140009F8C | |
// 140009EA6: control flows out of bounds to 140009EB1 | |
// 140009DB8: variable 'v3' is possibly undefined | |
// 140009DE6: variable 'v6' is possibly undefined | |
// 14001F830: using guessed type void *off_14001F830; | |
// 140027130: using guessed type char byte_140027130; | |
// 1400271C0: using guessed type __int64 qword_1400271C0; | |
// 140027270: using guessed type int TlsIndex; | |
//----- (000000014000A220) ---------------------------------------------------- | |
void __fastcall sub_14000A220(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
__int64 v5; // rax | |
char **v6; // rcx | |
const char *v7; // rdx | |
__int64 (__fastcall *v8)(__int64, __int64 *); // r14 | |
__int64 v9; // rax | |
__int64 v10; // rax | |
__int64 v11; // rax | |
char v12; // al | |
__int64 v13; // rax | |
__int64 v14; // rax | |
_QWORD v15[10]; // [rsp+0h] [rbp-80h] BYREF | |
__int64 v16[2]; // [rsp+50h] [rbp-30h] BYREF | |
char **v17; // [rsp+60h] [rbp-20h] | |
__int64 v18; // [rsp+68h] [rbp-18h] | |
const char *v19; // [rsp+70h] [rbp-10h] | |
bool (__fastcall *v20)(__int64 *, __int64 *); // [rsp+78h] [rbp-8h] | |
__int64 v21; // [rsp+80h] [rbp+0h] | |
__int64 v22; // [rsp+88h] [rbp+8h] | |
__int64 v23; // [rsp+90h] [rbp+10h] | |
v23 = -2i64; | |
v5 = *(_QWORD *)a1; | |
v6 = *(char ***)(a1 + 8); | |
v7 = *(const char **)(a1 + 16); | |
v16[0] = v5; | |
v16[1] = (__int64)sub_140001210; | |
v17 = v6; | |
v18 = (__int64)sub_140001210; | |
v19 = v7; | |
v20 = sub_140001230; | |
v15[6] = &off_14001F868; | |
v15[7] = 4i64; | |
v15[4] = 0i64; | |
v15[8] = &v15[10]; | |
v15[9] = 3i64; | |
v8 = *(__int64 (__fastcall **)(__int64, __int64 *))(a3 + 72); | |
v9 = v8(a2, &v15[4]); | |
if ( v9 && (v9 & 3) == 1 ) | |
{ | |
v22 = v9 - 1; | |
v21 = v9; | |
JUMPOUT(0x14000A2D7i64); | |
} | |
v10 = **(unsigned __int8 **)(a1 + 24); | |
if ( v10 != 3 ) | |
{ | |
if ( (_DWORD)v10 == 2 ) | |
{ | |
v12 = byte_140027000; | |
byte_140027000 = 0; | |
if ( v12 ) | |
{ | |
v17 = &off_14001F8F8; | |
v18 = 1i64; | |
v16[0] = 0i64; | |
v19 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v20 = 0i64; | |
v13 = v8(a2, v16); | |
if ( v13 ) | |
{ | |
if ( (v13 & 3) == 1 ) | |
{ | |
v22 = v13 - 1; | |
v21 = v13; | |
JUMPOUT(0x14000A3E3i64); | |
} | |
} | |
} | |
} | |
else if ( (_DWORD)v10 == 1 ) | |
{ | |
sub_1400080D0(); | |
if ( v11 && (v11 & 3) == 1 ) | |
{ | |
v22 = v11 - 1; | |
v21 = v11; | |
JUMPOUT(0x14000A367i64); | |
} | |
} | |
else | |
{ | |
sub_1400080D0(); | |
if ( v14 && (v14 & 3) == 1 ) | |
{ | |
v22 = v14 - 1; | |
v21 = v14; | |
JUMPOUT(0x14000A414i64); | |
} | |
} | |
} | |
} | |
// 14000A2D3: control flows out of bounds to 14000A2D7 | |
// 14000A363: control flows out of bounds to 14000A367 | |
// 14000A3DF: control flows out of bounds to 14000A3E3 | |
// 14000A410: control flows out of bounds to 14000A414 | |
// 14000A33D: variable 'v11' is possibly undefined | |
// 14000A3F2: variable 'v14' is possibly undefined | |
// 14001F868: using guessed type char *off_14001F868; | |
// 14001F8F8: using guessed type char *off_14001F8F8; | |
// 140027000: using guessed type char byte_140027000; | |
//----- (000000014000A5B0) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14000A5B0(__int64 a1) | |
{ | |
__int64 v2; // rax | |
__int64 v3; // rdi | |
__int64 jumpbuf_sp; // rax | |
__int64 v5[5]; // [rsp+20h] [rbp-28h] BYREF | |
v2 = sub_140016840(a1); | |
if ( !v2 ) | |
sub_14001CC50( | |
(__int64)"called `Option::unwrap()` on a `None` valueinternal error: entered unreachable code/rustc/90c541806f23a12" | |
"7002de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
43i64, | |
(__int64)&off_14001F920); | |
v3 = v2; | |
jumpbuf_sp = _except_get_jumpbuf_sp(a1); | |
if ( !jumpbuf_sp ) | |
sub_14001CC50( | |
(__int64)"called `Option::unwrap()` on a `None` valueinternal error: entered unreachable code/rustc/90c541806f23a12" | |
"7002de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
43i64, | |
(__int64)&off_14001F908); | |
v5[0] = jumpbuf_sp; | |
v5[1] = a1; | |
v5[2] = v3; | |
sub_140008DE0(v5); | |
} | |
// 140016830: using guessed type __int64 __fastcall _except_get_jumpbuf_sp(_QWORD); | |
// 14001F908: using guessed type void *off_14001F908; | |
// 14001F920: using guessed type void *off_14001F920; | |
//----- (000000014000A630) ---------------------------------------------------- | |
__int64 __fastcall sub_14000A630(__int128 *a1) | |
{ | |
__int64 result; // rax | |
__int128 v2; // [rsp+30h] [rbp-20h] | |
__int64 v3; // [rsp+40h] [rbp-10h] | |
if ( !*((_QWORD *)a1 + 1) ) | |
JUMPOUT(0x14000A671i64); | |
v3 = *((_QWORD *)a1 + 2); | |
v2 = *a1; | |
*(_QWORD *)a1 = 0i64; | |
*((_QWORD *)a1 + 1) = 1i64; | |
*((_QWORD *)a1 + 2) = 0i64; | |
result = sub_1400010D0(24i64, 8i64); | |
if ( !result ) | |
JUMPOUT(0x14000A6E7i64); | |
*(_QWORD *)(result + 16) = v3; | |
*(_OWORD *)result = v2; | |
return result; | |
} | |
// 14000A66D: control flows out of bounds to 14000A671 | |
// 14000A6C8: control flows out of bounds to 14000A6E7 | |
// 1400010D0: using guessed type __int64 __fastcall sub_1400010D0(_QWORD, _QWORD); | |
//----- (000000014000A740) ---------------------------------------------------- | |
__int64 __fastcall sub_14000A740(__int64 a1) | |
{ | |
if ( !*(_QWORD *)(a1 + 8) ) | |
JUMPOUT(0x14000A781i64); | |
return a1; | |
} | |
// 14000A77D: control flows out of bounds to 14000A781 | |
//----- (000000014000A7E0) ---------------------------------------------------- | |
_QWORD *__fastcall sub_14000A7E0(__int64 *a1) | |
{ | |
__int64 v1; // rsi | |
__int64 v2; // rdi | |
_QWORD *result; // rax | |
v1 = *a1; | |
v2 = a1[1]; | |
result = (_QWORD *)sub_1400010D0(16i64, 8i64); | |
if ( !result ) | |
sub_14001CB30(); | |
*result = v1; | |
result[1] = v2; | |
return result; | |
} | |
// 1400010D0: using guessed type __int64 __fastcall sub_1400010D0(_QWORD, _QWORD); | |
//----- (000000014000A830) ---------------------------------------------------- | |
__int64 __fastcall sub_14000A830(__int64 a1) | |
{ | |
return a1; | |
} | |
//----- (000000014000A840) ---------------------------------------------------- | |
void __fastcall sub_14000A840(__int64 *a1) | |
{ | |
__int64 v2; // rax | |
__int64 v3; // rdx | |
__int64 v4; // rcx | |
const char *v5; // rax | |
__int64 v6; // rcx | |
__int64 v7; // rcx | |
__int64 v8; // rdi | |
__int64 jumpbuf_sp; // rbx | |
__int64 v10; // rsi | |
char v11; // al | |
const char *v12; // [rsp+30h] [rbp-20h] BYREF | |
__int64 v13; // [rsp+38h] [rbp-18h] | |
__int64 v14; // [rsp+48h] [rbp-8h] | |
__int64 v15; // [rsp+50h] [rbp+0h] | |
v15 = -2i64; | |
v2 = *a1; | |
v3 = *(_QWORD *)(*a1 + 24); | |
v4 = *(_QWORD *)(*a1 + 40); | |
if ( v3 == 1 ) | |
{ | |
if ( !v4 ) | |
{ | |
v7 = *(_QWORD *)(v2 + 16); | |
v5 = *(const char **)v7; | |
v6 = *(_QWORD *)(v7 + 8); | |
LABEL_7: | |
v12 = v5; | |
v13 = v6; | |
v8 = a1[1]; | |
jumpbuf_sp = _except_get_jumpbuf_sp(v8); | |
v10 = a1[2]; | |
v11 = sub_140016850(v8); | |
sub_14000A940((__int64)&v12, (__int64)&off_14001F9A0, jumpbuf_sp, v10, v11); | |
BUG(); | |
} | |
} | |
else if ( !v3 && !v4 ) | |
{ | |
v5 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v6 = 0i64; | |
goto LABEL_7; | |
} | |
v14 = v2; | |
v13 = 0i64; | |
JUMPOUT(0x14000A8DDi64); | |
} | |
// 14000A8D9: control flows out of bounds to 14000A8DD | |
// 140016830: using guessed type __int64 __fastcall _except_get_jumpbuf_sp(_QWORD); | |
// 14001F9A0: using guessed type __int64 (__fastcall *off_14001F9A0)(); | |
//----- (000000014000A940) ---------------------------------------------------- | |
void __fastcall sub_14000A940(__int64 a1, __int64 a2, __int64 a3, __int64 a4, char a5) | |
{ | |
__int64 v5; // rax | |
unsigned __int64 v6; // r15 | |
__int64 v7; // rax | |
if ( _InterlockedExchangeAdd64(&qword_1400271C0, 1ui64) >= 0 ) | |
{ | |
v5 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
v6 = *(_QWORD *)(v5 + 88) + 1i64; | |
*(_QWORD *)(v5 + 88) = v6; | |
if ( v6 <= 2 ) | |
{ | |
AcquireSRWLockShared(&stru_1400271A0); | |
if ( !qword_1400271B0 ) | |
JUMPOUT(0x14000A9FCi64); | |
JUMPOUT(0x14000AB86i64); | |
} | |
sub_140006220(); | |
if ( v7 && (v7 & 3) == 1 ) | |
JUMPOUT(0x14000AAA1i64); | |
__fastfail(7u); | |
} | |
JUMPOUT(0x14000AA1Bi64); | |
} | |
// 14000A9F8: control flows out of bounds to 14000A9FC | |
// 14000AA9D: control flows out of bounds to 14000AAA1 | |
// 14000AB82: control flows out of bounds to 14000AB86 | |
// 14000A977: control flows out of bounds to 14000AA1B | |
// 14000AA77: variable 'v7' is possibly undefined | |
// 1400271B0: using guessed type __int64 qword_1400271B0; | |
// 1400271C0: using guessed type __int64 qword_1400271C0; | |
// 140027270: using guessed type int TlsIndex; | |
//----- (000000014000AD70) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14000AD70(__int64 a1, __int64 a2) | |
{ | |
sub_14000E8E0(a1, a2); | |
} | |
//----- (000000014000AE50) ---------------------------------------------------- | |
char __fastcall sub_14000AE50(__int64 *a1, __int64 a2, __int64 *a3, __int64 a4, int a5, int a6, int a7, int a8) | |
{ | |
__int64 v11; // r12 | |
__int64 *v12; // r13 | |
__int64 *v14; // rcx | |
__int64 *v15; // r15 | |
char **v16; // rax | |
__int64 v17; // rdx | |
char **v18; // rax | |
__int64 v19; // rdx | |
__int64 v20; // rax | |
_QWORD *v21; // rbx | |
__int128 v22; // xmm1 | |
__int128 v23; // xmm2 | |
__int128 v24; // xmm3 | |
__int64 *v25; // rcx | |
__int64 *v26; // rcx | |
__int64 v27; // r14 | |
__int64 *v28; // rbx | |
char **v29; // rax | |
__int64 v30; // rdx | |
__int64 *v31; // rcx | |
__int64 v32; // rcx | |
__int64 v33; // rax | |
__int64 *v34; // rcx | |
__int64 *v35; // rcx | |
__int64 *v36; // rcx | |
__int128 v37; // xmm1 | |
__int128 v38; // xmm2 | |
__int128 v39; // xmm3 | |
__int64 *v40; // rcx | |
__int64 v41; // [rsp+20h] [rbp-118h] BYREF | |
__m256i v42; // [rsp+28h] [rbp-110h] BYREF | |
__int128 v43; // [rsp+48h] [rbp-F0h] | |
__int128 v44; // [rsp+58h] [rbp-E0h] | |
__int64 v45; // [rsp+68h] [rbp-D0h] | |
__int128 v46; // [rsp+70h] [rbp-C8h] BYREF | |
char **v47; // [rsp+80h] [rbp-B8h] | |
__int64 v48; // [rsp+88h] [rbp-B0h] | |
__int64 v49; // [rsp+90h] [rbp-A8h] | |
__int64 v50; // [rsp+98h] [rbp-A0h] | |
__int64 v51; // [rsp+A0h] [rbp-98h] | |
__int128 v52; // [rsp+A8h] [rbp-90h] BYREF | |
char **v53; // [rsp+B8h] [rbp-80h] | |
__int64 v54; // [rsp+C0h] [rbp-78h] | |
__int64 *v55; // [rsp+C8h] [rbp-70h] | |
__int64 v56; // [rsp+D0h] [rbp-68h] | |
__int64 v57[2]; // [rsp+D8h] [rbp-60h] BYREF | |
__int64 *v58; // [rsp+E8h] [rbp-50h] | |
__int64 v59; // [rsp+F0h] [rbp-48h] BYREF | |
v11 = *a1; | |
v12 = (__int64 *)a1[1]; | |
v59 = a2; | |
if ( !a2 && !*((_BYTE *)v12 + 32) ) | |
{ | |
LABEL_3: | |
*a1 = v11 + 1; | |
return 0; | |
} | |
v14 = (__int64 *)v12[3]; | |
if ( v11 ) | |
{ | |
v42.m256i_i64[1] = (__int64)&off_14001FBB8; | |
v42.m256i_i64[2] = 1i64; | |
v41 = 0i64; | |
v42.m256i_i64[3] = (__int64)"/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
*(_QWORD *)&v43 = 0i64; | |
if ( sub_140017C00(v14, (__int128 *)&v41) ) | |
return 1; | |
if ( *((_BYTE *)v12 + 32) == 1 ) | |
{ | |
v15 = (__int64 *)v12[3]; | |
v16 = (char **)sub_140017280((__int64)&unk_14001FBC8); | |
*(_QWORD *)&v52 = &off_14001EBD8; | |
*((_QWORD *)&v52 + 1) = sub_140001210; | |
v53 = v16; | |
v54 = v17; | |
v41 = 2i64; | |
v42.m256i_i64[1] = 1i64; | |
v42.m256i_i64[2] = 1i64; | |
v42.m256i_i64[3] = 0x2000000000i64; | |
LOBYTE(v43) = 3; | |
*((_QWORD *)&v43 + 1) = 0i64; | |
v47 = &off_14001EBD8; | |
v48 = 1i64; | |
*(_QWORD *)&v46 = &v41; | |
*((_QWORD *)&v46 + 1) = 1i64; | |
v49 = (__int64)&v52; | |
v50 = 2i64; | |
if ( sub_140017C00(v15, &v46) ) | |
return 1; | |
} | |
} | |
else | |
{ | |
*(_QWORD *)&v52 = v12 + 2; | |
*((_QWORD *)&v52 + 1) = sub_14001AD00; | |
v41 = 2i64; | |
v42.m256i_i64[1] = 0i64; | |
v42.m256i_i64[2] = 4i64; | |
v42.m256i_i64[3] = 0x2000000000i64; | |
LOBYTE(v43) = 3; | |
*((_QWORD *)&v43 + 1) = 0i64; | |
v47 = &off_14001FBD0; | |
v48 = 2i64; | |
*(_QWORD *)&v46 = &v41; | |
*((_QWORD *)&v46 + 1) = 1i64; | |
v49 = (__int64)&v52; | |
v50 = 1i64; | |
if ( sub_140017C00(v14, &v46) ) | |
return 1; | |
if ( *((_BYTE *)v12 + 32) == 1 ) | |
{ | |
v58 = (__int64 *)v12[3]; | |
v18 = (char **)sub_140017280((__int64)&unk_14001FC18); | |
*(_QWORD *)&v52 = &v59; | |
*((_QWORD *)&v52 + 1) = sub_140002110; | |
v53 = v18; | |
v54 = v19; | |
v41 = 2i64; | |
v42.m256i_i64[1] = 1i64; | |
v42.m256i_i64[2] = 1i64; | |
v42.m256i_i64[3] = 0x2000000000i64; | |
LOBYTE(v43) = 3; | |
*((_QWORD *)&v43 + 1) = 0i64; | |
v47 = &off_14001FBF8; | |
v48 = 2i64; | |
*(_QWORD *)&v46 = &v41; | |
*((_QWORD *)&v46 + 1) = 1i64; | |
v49 = (__int64)&v52; | |
v50 = 2i64; | |
if ( sub_140017C00(v58, &v46) ) | |
return 1; | |
} | |
} | |
v20 = *a3; | |
if ( *a3 == 3 ) | |
goto LABEL_17; | |
v21 = a3 + 1; | |
if ( *((_BYTE *)v12 + 32) == 1i64 ) | |
{ | |
v41 = v20; | |
v37 = *((_OWORD *)v21 + 1); | |
v38 = *((_OWORD *)v21 + 2); | |
v39 = *((_OWORD *)v21 + 3); | |
*(_OWORD *)v42.m256i_i8 = *(_OWORD *)v21; | |
*(_OWORD *)&v42.m256i_u64[2] = v37; | |
v43 = v38; | |
v44 = v39; | |
v45 = v21[8]; | |
v40 = (__int64 *)v12[3]; | |
*(_QWORD *)&v52 = &v41; | |
*((_QWORD *)&v52 + 1) = sub_14000DD80; | |
v47 = &off_14001EBD8; | |
v48 = 1i64; | |
*(_QWORD *)&v46 = 0i64; | |
v49 = (__int64)&v52; | |
v50 = 1i64; | |
if ( sub_140017C00(v40, &v46) ) | |
return 1; | |
goto LABEL_18; | |
} | |
if ( *((_BYTE *)v12 + 32) ) | |
{ | |
LABEL_17: | |
v26 = (__int64 *)v12[3]; | |
v42.m256i_i64[1] = (__int64)&off_14001FC20; | |
v42.m256i_i64[2] = 1i64; | |
v41 = 0i64; | |
v42.m256i_i64[3] = (__int64)"/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
*(_QWORD *)&v43 = 0i64; | |
if ( sub_140017C00(v26, (__int128 *)&v41) ) | |
return 1; | |
goto LABEL_18; | |
} | |
v41 = v20; | |
v22 = *((_OWORD *)v21 + 1); | |
v23 = *((_OWORD *)v21 + 2); | |
v24 = *((_OWORD *)v21 + 3); | |
*(_OWORD *)v42.m256i_i8 = *(_OWORD *)v21; | |
*(_OWORD *)&v42.m256i_u64[2] = v22; | |
v43 = v23; | |
v44 = v24; | |
v45 = v21[8]; | |
v25 = (__int64 *)v12[3]; | |
v57[0] = (__int64)&v41; | |
v57[1] = (__int64)sub_14000DD80; | |
*(_QWORD *)&v46 = 2i64; | |
v47 = (char **)2; | |
v49 = 0x2000000004i64; | |
LOBYTE(v50) = 3; | |
v51 = 0i64; | |
v53 = &off_14001EBD8; | |
v54 = 1i64; | |
*(_QWORD *)&v52 = &v46; | |
*((_QWORD *)&v52 + 1) = 1i64; | |
v55 = v57; | |
v56 = 1i64; | |
if ( sub_140017C00(v25, &v52) ) | |
return 1; | |
LABEL_18: | |
if ( !(unsigned __int8)sub_140017BE0((_QWORD *)v12[3]) ) | |
{ | |
if ( a5 != 1 ) | |
goto LABEL_3; | |
v27 = *(_QWORD *)a4; | |
if ( *(_QWORD *)a4 == 2i64 ) | |
goto LABEL_3; | |
LODWORD(v57[0]) = a6; | |
if ( *((_BYTE *)v12 + 32) != 1 ) | |
goto LABEL_34; | |
v28 = (__int64 *)v12[3]; | |
v29 = (char **)sub_140017280((__int64)&unk_14001FC18); | |
*(_QWORD *)&v52 = &off_14001EBD8; | |
*((_QWORD *)&v52 + 1) = sub_140001210; | |
v53 = v29; | |
v54 = v30; | |
v41 = 2i64; | |
v42.m256i_i64[1] = 1i64; | |
v42.m256i_i64[2] = 1i64; | |
v42.m256i_i64[3] = 0x2000000000i64; | |
LOBYTE(v43) = 3; | |
*((_QWORD *)&v43 + 1) = 0i64; | |
v47 = &off_14001EBD8; | |
v48 = 1i64; | |
*(_QWORD *)&v46 = &v41; | |
*((_QWORD *)&v46 + 1) = 1i64; | |
v49 = (__int64)&v52; | |
v50 = 2i64; | |
if ( !sub_140017C00(v28, &v46) ) | |
{ | |
LABEL_34: | |
v31 = (__int64 *)v12[3]; | |
v42.m256i_i64[1] = (__int64)&off_14001FC40; | |
v42.m256i_i64[2] = 1i64; | |
v41 = 0i64; | |
v42.m256i_i64[3] = (__int64)"/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
*(_QWORD *)&v43 = 0i64; | |
if ( !sub_140017C00(v31, (__int128 *)&v41) ) | |
{ | |
v32 = *v12; | |
v33 = v12[1]; | |
v41 = v12[3]; | |
v42.m256i_i64[0] = v27; | |
*(_OWORD *)&v42.m256i_u64[1] = *(_OWORD *)(a4 + 8); | |
if ( !(*(unsigned __int8 (__fastcall **)(__int64, __int64, __m256i *))(v33 + 32))(v32, v41, &v42) ) | |
{ | |
v34 = (__int64 *)v12[3]; | |
*(_QWORD *)&v46 = v57; | |
*((_QWORD *)&v46 + 1) = sub_14001ABE0; | |
v42.m256i_i64[1] = (__int64)&off_14001FC58; | |
v42.m256i_i64[2] = 1i64; | |
v41 = 0i64; | |
v42.m256i_i64[3] = (__int64)&v46; | |
*(_QWORD *)&v43 = 1i64; | |
if ( !sub_140017C00(v34, (__int128 *)&v41) ) | |
{ | |
if ( a7 != 1 ) | |
goto LABEL_35; | |
LODWORD(v52) = a8; | |
v35 = (__int64 *)v12[3]; | |
*(_QWORD *)&v46 = &v52; | |
*((_QWORD *)&v46 + 1) = sub_14001ABE0; | |
v42.m256i_i64[1] = (__int64)&off_14001FC58; | |
v42.m256i_i64[2] = 1i64; | |
v41 = 0i64; | |
v42.m256i_i64[3] = (__int64)&v46; | |
*(_QWORD *)&v43 = 1i64; | |
if ( !sub_140017C00(v35, (__int128 *)&v41) ) | |
{ | |
LABEL_35: | |
v36 = (__int64 *)v12[3]; | |
v42.m256i_i64[1] = (__int64)&off_14001FC68; | |
v42.m256i_i64[2] = 1i64; | |
v41 = 0i64; | |
v42.m256i_i64[3] = (__int64)"/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
*(_QWORD *)&v43 = 0i64; | |
if ( !sub_140017C00(v36, (__int128 *)&v41) ) | |
goto LABEL_3; | |
} | |
} | |
} | |
} | |
} | |
} | |
return 1; | |
} | |
// 14000AF2A: variable 'v17' is possibly undefined | |
// 14000B0BB: variable 'v19' is possibly undefined | |
// 14000B334: variable 'v30' is possibly undefined | |
// 14001EBD8: using guessed type char *off_14001EBD8; | |
// 14001FBB8: using guessed type char *off_14001FBB8; | |
// 14001FBD0: using guessed type char *off_14001FBD0; | |
// 14001FBF8: using guessed type char *off_14001FBF8; | |
// 14001FC20: using guessed type void *off_14001FC20; | |
// 14001FC40: using guessed type void *off_14001FC40; | |
// 14001FC58: using guessed type void *off_14001FC58; | |
// 14001FC68: using guessed type void *off_14001FC68; | |
//----- (000000014000B610) ---------------------------------------------------- | |
__int64 sub_14000B610() | |
{ | |
HANDLE v0; // rbx | |
HMODULE LibraryA; // rax | |
__int64 v2; // rdi | |
HANDLE MutexA; // rax | |
signed __int64 v4; // rax | |
void *v5; // rsi | |
__int64 (*v6)(void); // rcx | |
DWORD (__stdcall *SymGetOptions)(); // rax | |
int v8; // esi | |
DWORD (__stdcall *v9)(DWORD); // rdx | |
DWORD (__stdcall *SymSetOptions)(DWORD); // rax | |
BOOL (__stdcall *v11)(HANDLE, PCWSTR, BOOL); // rsi | |
BOOL (__stdcall *SymInitializeW)(HANDLE, PCWSTR, BOOL); // rax | |
HANDLE CurrentProcess; // rax | |
v0 = hMutex; | |
if ( !hMutex ) | |
{ | |
MutexA = CreateMutexA(0i64, 0, "Local\\RustBacktraceMutex"); | |
if ( !MutexA ) | |
return 1i64; | |
v0 = MutexA; | |
v4 = _InterlockedCompareExchange64((volatile signed __int64 *)&hMutex, (signed __int64)MutexA, 0i64); | |
if ( v4 ) | |
{ | |
v5 = (void *)v4; | |
CloseHandle(v0); | |
v0 = v5; | |
} | |
} | |
WaitForSingleObjectEx(v0, 0xFFFFFFFF, 0); | |
LibraryA = hModule; | |
if ( hModule || (LibraryA = LoadLibraryA("dbghelp.dll"), (hModule = LibraryA) != 0i64) ) | |
{ | |
if ( byte_1400271D0 ) | |
{ | |
return 0i64; | |
} | |
else | |
{ | |
v6 = (__int64 (*)(void))qword_140027218; | |
if ( !qword_140027218 ) | |
{ | |
SymGetOptions = (DWORD (__stdcall *)())GetProcAddress(LibraryA, "SymGetOptions"); | |
if ( !SymGetOptions ) | |
JUMPOUT(0x14000B797i64); | |
v6 = (__int64 (*)(void))SymGetOptions; | |
qword_140027218 = (__int64)SymGetOptions; | |
} | |
v8 = v6(); | |
v9 = (DWORD (__stdcall *)(DWORD))qword_140027220; | |
if ( !qword_140027220 ) | |
{ | |
SymSetOptions = (DWORD (__stdcall *)(DWORD))GetProcAddress(hModule, "SymSetOptions"); | |
if ( !SymSetOptions ) | |
sub_14001CC50( | |
(__int64)"called `Option::unwrap()` on a `None` valueinternal error: entered unreachable code/rustc/90c541806" | |
"f23a127002de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
43i64, | |
(__int64)&off_14001FCD8); | |
v9 = SymSetOptions; | |
qword_140027220 = (__int64)SymSetOptions; | |
} | |
((void (__fastcall *)(_QWORD))v9)(v8 | 4u); | |
v11 = (BOOL (__stdcall *)(HANDLE, PCWSTR, BOOL))qword_140027228; | |
if ( !qword_140027228 ) | |
{ | |
SymInitializeW = (BOOL (__stdcall *)(HANDLE, PCWSTR, BOOL))GetProcAddress(hModule, "SymInitializeW"); | |
if ( !SymInitializeW ) | |
sub_14001CC50( | |
(__int64)"called `Option::unwrap()` on a `None` valueinternal error: entered unreachable code/rustc/90c541806" | |
"f23a127002de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
43i64, | |
(__int64)&off_14001FCC0); | |
v11 = SymInitializeW; | |
qword_140027228 = (__int64)SymInitializeW; | |
} | |
CurrentProcess = GetCurrentProcess(); | |
v2 = 0i64; | |
((void (__fastcall *)(HANDLE, _QWORD, __int64))v11)(CurrentProcess, 0i64, 1i64); | |
byte_1400271D0 = 1; | |
} | |
} | |
else | |
{ | |
ReleaseMutex(v0); | |
return 1i64; | |
} | |
return v2; | |
} | |
// 14000B6D5: control flows out of bounds to 14000B797 | |
// 14001FCC0: using guessed type char *off_14001FCC0; | |
// 14001FCD8: using guessed type char *off_14001FCD8; | |
// 1400271D0: using guessed type char byte_1400271D0; | |
// 140027218: using guessed type __int64 qword_140027218; | |
// 140027220: using guessed type __int64 qword_140027220; | |
// 140027228: using guessed type __int64 qword_140027228; | |
//----- (000000014000B830) ---------------------------------------------------- | |
char __fastcall sub_14000B830(__int64 a1, __int64 a2) | |
{ | |
__int64 v4; // rcx | |
__int64 v5; // rdx | |
__int64 v6; // r8 | |
char result; // al | |
char v8; // dl | |
__int64 v9; // r10 | |
__int64 v10; // r11 | |
size_t v11; // r8 | |
const void *v12; // rdx | |
const void *v13; // rcx | |
size_t v15; // r8 | |
v4 = *(unsigned __int8 *)(a1 + 16); | |
v5 = (unsigned __int8)(v4 - 6); | |
v6 = v5 + 1; | |
result = 0; | |
if ( (unsigned __int8)v5 >= 4u ) | |
v6 = 0i64; | |
v8 = *(_BYTE *)(a2 + 16); | |
v9 = (unsigned __int8)(v8 - 6); | |
v10 = v9 + 1; | |
if ( (unsigned __int8)v9 >= 4u ) | |
v10 = 0i64; | |
if ( v6 == v10 ) | |
{ | |
if ( (_DWORD)v6 == 4 ) | |
{ | |
v11 = *(_QWORD *)(a1 + 8); | |
if ( v11 == *(_QWORD *)(a2 + 8) ) | |
{ | |
v12 = *(const void **)a2; | |
v13 = *(const void **)a1; | |
return memcmp(v13, v12, v11) == 0; | |
} | |
} | |
else | |
{ | |
result = 1; | |
if ( v6 || (unsigned __int8)(v8 - 6) <= 3u ) | |
return result; | |
if ( (_BYTE)v4 == v8 ) | |
{ | |
switch ( v4 ) | |
{ | |
case 0i64: | |
case 3i64: | |
v11 = *(_QWORD *)(a1 + 32); | |
if ( v11 != *(_QWORD *)(a2 + 32) ) | |
return 0; | |
v12 = *(const void **)(a2 + 24); | |
v13 = *(const void **)(a1 + 24); | |
break; | |
case 1i64: | |
case 4i64: | |
v15 = *(_QWORD *)(a1 + 32); | |
if ( v15 != *(_QWORD *)(a2 + 32) ) | |
return 0; | |
if ( memcmp(*(const void **)(a1 + 24), *(const void **)(a2 + 24), v15) ) | |
return 0; | |
v11 = *(_QWORD *)(a1 + 48); | |
if ( v11 != *(_QWORD *)(a2 + 48) ) | |
return 0; | |
v12 = *(const void **)(a2 + 40); | |
v13 = *(const void **)(a1 + 40); | |
break; | |
case 2i64: | |
case 5i64: | |
return *(_BYTE *)(a1 + 17) == *(_BYTE *)(a2 + 17); | |
} | |
return memcmp(v13, v12, v11) == 0; | |
} | |
} | |
return 0; | |
} | |
return result; | |
} | |
//----- (000000014000B930) ---------------------------------------------------- | |
HMODULE sub_14000B930() | |
{ | |
HMODULE result; // rax | |
HMODULE v1; // rsi | |
HMODULE v2; // rdi | |
result = GetModuleHandleA("api-ms-win-core-synch-l1-2-0"); | |
if ( result ) | |
{ | |
v1 = result; | |
result = (HMODULE)GetProcAddress(result, "WaitOnAddress"); | |
if ( result ) | |
{ | |
v2 = result; | |
result = (HMODULE)GetProcAddress(v1, "WakeByAddressSingle"); | |
if ( result ) | |
{ | |
qword_140027200 = (__int64)v2; | |
qword_140027208 = (__int64 (__fastcall *)(_QWORD))result; | |
} | |
} | |
} | |
return result; | |
} | |
// 140027200: using guessed type __int64 qword_140027200; | |
// 140027208: using guessed type __int64 (__fastcall *qword_140027208)(_QWORD); | |
//----- (000000014000B990) ---------------------------------------------------- | |
__int64 __fastcall sub_14000B990( | |
__int64 *a1, | |
void *a2, | |
void *Buffer, | |
unsigned __int64 a4, | |
PLARGE_INTEGER a5, | |
__int64 a6) | |
{ | |
ULONG Length; // edx | |
union _LARGE_INTEGER *ByteOffset; // r9 | |
int Status; // eax | |
__int64 result; // rax | |
__int64 v12; // rax | |
__int64 v13; // rax | |
struct _IO_STATUS_BLOCK IoStatusBlock; // [rsp+58h] [rbp-90h] BYREF | |
__int64 v15[2]; // [rsp+68h] [rbp-80h] BYREF | |
PLARGE_INTEGER v16; // [rsp+78h] [rbp-70h] BYREF | |
__int64 v17[13]; // [rsp+80h] [rbp-68h] BYREF | |
IoStatusBlock.Pointer = (PVOID)259; | |
IoStatusBlock.Information = 0i64; | |
Length = -1; | |
if ( a4 < 0xFFFFFFFF ) | |
Length = a4; | |
v16 = a5; | |
ByteOffset = (union _LARGE_INTEGER *)v17; | |
v17[0] = a6; | |
if ( !a5 ) | |
ByteOffset = 0i64; | |
Status = NtWriteFile(a2, 0i64, 0i64, 0i64, &IoStatusBlock, Buffer, Length, ByteOffset, 0i64); | |
if ( Status == 259 ) | |
{ | |
WaitForSingleObject(a2, 0xFFFFFFFF); | |
Status = IoStatusBlock.Status; | |
if ( IoStatusBlock.Status == 259 ) | |
{ | |
v17[1] = (__int64)&off_14001FD80; | |
v17[2] = 1i64; | |
v16 = 0i64; | |
v17[3] = (__int64)"/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v17[4] = 0i64; | |
v15[0] = (__int64)&v16; | |
v15[1] = (__int64)sub_140017290; | |
v17[7] = (__int64)&off_14001E8D0; | |
v17[8] = 2i64; | |
v17[5] = 0i64; | |
v17[9] = (__int64)v15; | |
v17[10] = 1i64; | |
sub_140006220(); | |
sub_140001B00(v13); | |
__fastfail(7u); | |
} | |
} | |
if ( Status < 0 ) | |
{ | |
LODWORD(v12) = RtlNtStatusToDosError(Status); | |
a1[1] = (v12 << 32) | 2; | |
result = 1i64; | |
} | |
else | |
{ | |
a1[1] = IoStatusBlock.Information; | |
result = 0i64; | |
} | |
*a1 = result; | |
return result; | |
} | |
// 14000BA54: variable 'v12' is possibly undefined | |
// 14000BB29: variable 'v13' is possibly undefined | |
// 14001E8D0: using guessed type void *off_14001E8D0; | |
// 14001FD80: using guessed type char *off_14001FD80; | |
//----- (000000014000BB40) ---------------------------------------------------- | |
char **__fastcall sub_14000BB40(__int64 a1, int a2) | |
{ | |
DWORD v2; // edi | |
HMODULE v4; // r14 | |
DWORD v5; // r15d | |
HMODULE ModuleHandleW; // rax | |
DWORD v7; // eax | |
char **v8; // rax | |
char *v9; // r9 | |
char **result; // rax | |
__int128 v11; // xmm0 | |
char *v12; // rdx | |
unsigned int v13; // r10d | |
char v14; // r11 | |
char v15; // di | |
int v16; // edi | |
int v17; // r11d | |
unsigned int v18; // r11d | |
unsigned __int64 v19; // rdx | |
_BYTE v20[32]; // [rsp+0h] [rbp-80h] BYREF | |
WCHAR Buffer[2048]; // [rsp+38h] [rbp-48h] BYREF | |
__int128 v22; // [rsp+1038h] [rbp+FB8h] BYREF | |
__int64 *v23; // [rsp+1048h] [rbp+FC8h] | |
__int64 (__fastcall *v24)(unsigned int *, __int64); // [rsp+1050h] [rbp+FD0h] | |
__int128 v25; // [rsp+1058h] [rbp+FD8h] BYREF | |
char **v26; // [rsp+1068h] [rbp+FE8h] | |
__int64 v27[2]; // [rsp+1070h] [rbp+FF0h] BYREF | |
__int128 v28; // [rsp+1080h] [rbp+1000h] BYREF | |
char **v29; // [rsp+1090h] [rbp+1010h] | |
__int64 v30; // [rsp+1098h] [rbp+1018h] | |
__int64 *v31; // [rsp+10A0h] [rbp+1020h] | |
__int64 v32; // [rsp+10A8h] [rbp+1028h] | |
DWORD v33; // [rsp+10BCh] [rbp+103Ch] BYREF | |
__int64 v34; // [rsp+10C0h] [rbp+1040h] | |
v34 = -2i64; | |
v2 = a2; | |
v33 = a2; | |
v4 = 0i64; | |
memset(&v20[56], 0, 0x1000ui64); | |
v5 = 4608; | |
if ( (v2 & 0x10000000) != 0 ) | |
{ | |
ModuleHandleW = GetModuleHandleW(L"NTDLL.DLL"); | |
if ( ModuleHandleW ) | |
{ | |
v4 = ModuleHandleW; | |
v2 ^= 0x10000000u; | |
v33 = v2; | |
v5 = 6656; | |
} | |
else | |
{ | |
v4 = 0i64; | |
} | |
} | |
v7 = FormatMessageW(v5, v4, v2, 0x800u, (LPWSTR)&v20[56], 0x800u, 0i64); | |
if ( !v7 ) | |
{ | |
LODWORD(v27[0]) = GetLastError(); | |
*(_QWORD *)&v22 = &v33; | |
*((_QWORD *)&v22 + 1) = sub_14001AAA0; | |
v23 = v27; | |
v24 = sub_14001AAA0; | |
v29 = &off_14001FED8; | |
v30 = 3i64; | |
*(_QWORD *)&v28 = 0i64; | |
v31 = (__int64 *)&v22; | |
v32 = 2i64; | |
sub_140015E30((__int64 *)&v25, &v28); | |
result = v26; | |
*(_QWORD *)(a1 + 16) = v26; | |
v11 = v25; | |
goto LABEL_44; | |
} | |
if ( v7 >= 0x801 ) | |
JUMPOUT(0x14000BEFEi64); | |
sub_140016030((__int64)&v25, (__int64)Buffer, v7); | |
if ( !*((_QWORD *)&v25 + 1) ) | |
{ | |
v27[0] = (__int64)&v33; | |
v27[1] = (__int64)sub_14001AAA0; | |
v29 = &off_14001FE90; | |
v30 = 2i64; | |
*(_QWORD *)&v28 = 0i64; | |
v31 = v27; | |
v32 = 1i64; | |
sub_140015E30((__int64 *)&v22, &v28); | |
result = (char **)v23; | |
*(_QWORD *)(a1 + 16) = v23; | |
v11 = v22; | |
goto LABEL_44; | |
} | |
v28 = v25; | |
v8 = v26; | |
v29 = v26; | |
if ( !v26 ) | |
goto LABEL_41; | |
v9 = (char *)v26 + *((_QWORD *)&v28 + 1); | |
while ( 1 ) | |
{ | |
v12 = v9; | |
LOBYTE(v13) = *(v9 - 1); | |
if ( (v13 & 0x80u) != 0 ) | |
{ | |
v14 = *(v9 - 2); | |
if ( v14 >= -64 ) | |
{ | |
v9 -= 2; | |
v17 = v14 & 0x1F; | |
} | |
else | |
{ | |
v15 = *(v9 - 3); | |
if ( v15 >= -64 ) | |
{ | |
v9 -= 3; | |
v16 = v15 & 0xF; | |
} | |
else | |
{ | |
v9 -= 4; | |
v16 = ((*(v12 - 4) & 7) << 6) | v15 & 0x3F; | |
} | |
v17 = (v16 << 6) | v14 & 0x3F; | |
} | |
v13 = (v17 << 6) | v13 & 0x3F; | |
if ( v13 == 1114112 ) | |
goto LABEL_41; | |
} | |
else | |
{ | |
--v9; | |
v13 = (unsigned __int8)v13; | |
} | |
if ( v13 - 9 >= 5 && v13 != 32 ) | |
break; | |
LABEL_13: | |
if ( v9 == *((char **)&v28 + 1) ) | |
goto LABEL_41; | |
} | |
if ( v13 < 0x80 ) | |
goto LABEL_36; | |
v18 = v13 >> 8; | |
if ( v13 >> 8 <= 0x1F ) | |
{ | |
if ( v18 ) | |
{ | |
if ( v18 != 22 || v13 != 5760 ) | |
goto LABEL_36; | |
} | |
else if ( (*((_BYTE *)off_1400270A0 + (unsigned __int8)v13) & 1) == 0 ) | |
{ | |
goto LABEL_36; | |
} | |
goto LABEL_13; | |
} | |
if ( v18 == 32 ) | |
{ | |
if ( (*((_BYTE *)off_1400270A0 + (unsigned __int8)v13) & 2) == 0 ) | |
goto LABEL_36; | |
goto LABEL_13; | |
} | |
if ( v18 == 48 && v13 == 12288 ) | |
goto LABEL_13; | |
LABEL_36: | |
v19 = (unsigned __int64)&v12[-*((_QWORD *)&v28 + 1)]; | |
if ( (unsigned __int64)v26 < v19 ) | |
goto LABEL_43; | |
if ( !v19 ) | |
{ | |
LABEL_41: | |
v8 = 0i64; | |
goto LABEL_42; | |
} | |
if ( (unsigned __int64)v26 <= v19 ) | |
{ | |
if ( v26 != (char **)v19 ) | |
goto LABEL_46; | |
} | |
else | |
{ | |
v8 = (char **)v19; | |
if ( *(char *)(*((_QWORD *)&v28 + 1) + v19) < -64 ) | |
LABEL_46: | |
JUMPOUT(0x14000BEE4i64); | |
} | |
LABEL_42: | |
v29 = v8; | |
LABEL_43: | |
result = v29; | |
*(_QWORD *)(a1 + 16) = v29; | |
v11 = v28; | |
LABEL_44: | |
*(_OWORD *)a1 = v11; | |
return result; | |
} | |
// 14000BEE2: control flows out of bounds to 14000BEE4 | |
// 14000BBFB: control flows out of bounds to 14000BEFE | |
// 14001FE90: using guessed type char *off_14001FE90; | |
// 14001FED8: using guessed type char *off_14001FED8; | |
// 1400270A0: using guessed type void *off_1400270A0; | |
// 14000BB40: using guessed type WCHAR Buffer[2048]; | |
//----- (000000014000BF60) ---------------------------------------------------- | |
__int64 __fastcall sub_14000BF60(__int64 a1, unsigned __int8 *a2, unsigned __int64 a3) | |
{ | |
unsigned __int8 v3; // si | |
unsigned __int8 v4; // di | |
__int64 v5; // r10 | |
unsigned __int8 v6; // bp | |
unsigned __int8 v7; // r11 | |
unsigned __int8 v8; // r9 | |
unsigned __int8 v9; // r14 | |
unsigned __int8 v10; // bl | |
__int64 v11; // r10 | |
unsigned __int64 v12; // rax | |
int v13; // esi | |
unsigned __int64 v14; // r10 | |
unsigned __int8 v15; // al | |
unsigned __int64 v16; // r8 | |
__int64 v17; // r9 | |
int v18; // r11d | |
unsigned __int64 v19; // r11 | |
__int64 v20; // rsi | |
unsigned __int64 v21; // r10 | |
int v22; // edi | |
__int64 v23; // rdi | |
_BYTE *v25; // rdx | |
unsigned __int64 v26; // rax | |
unsigned __int64 v27; // r8 | |
int v28; // r9d | |
const char *v29; // r9 | |
unsigned __int64 v30; // r11 | |
unsigned __int64 v31; // rsi | |
__int64 v32; // rbx | |
char *v33; // rax | |
unsigned __int64 v34; // r9 | |
int v35; // r10d | |
char v36; // dl | |
unsigned __int64 v37; // r8 | |
unsigned __int64 v38; // rdx | |
unsigned __int64 v39; // rdi | |
unsigned __int64 v40; // r11 | |
unsigned __int64 v41; // r8 | |
if ( a3 ) | |
{ | |
v3 = *a2; | |
v4 = 92; | |
if ( *a2 == 47 ) | |
v3 = 92; | |
if ( a3 == 1 ) | |
{ | |
v5 = 0i64; | |
v6 = 0; | |
v7 = 0; | |
v8 = 0; | |
v9 = 0; | |
v10 = 0; | |
v4 = 0; | |
} | |
else | |
{ | |
if ( a2[1] != 47 ) | |
v4 = a2[1]; | |
if ( a3 == 2 ) | |
{ | |
v5 = 0i64; | |
v6 = 0; | |
v7 = 0; | |
v8 = 0; | |
v9 = 0; | |
v10 = 0; | |
} | |
else | |
{ | |
v10 = a2[2]; | |
v9 = 92; | |
if ( v10 == 47 ) | |
v10 = 92; | |
if ( a3 == 3 ) | |
{ | |
v5 = 0i64; | |
v6 = 0; | |
v7 = 0; | |
v8 = 0; | |
v9 = 0; | |
} | |
else | |
{ | |
if ( a2[3] != 47 ) | |
v9 = a2[3]; | |
if ( a3 == 4 ) | |
{ | |
v5 = 0i64; | |
v6 = 0; | |
v7 = 0; | |
v8 = 0; | |
} | |
else | |
{ | |
v8 = a2[4]; | |
v7 = 92; | |
if ( v8 == 47 ) | |
v8 = 92; | |
if ( a3 == 5 ) | |
{ | |
v5 = 0i64; | |
v6 = 0; | |
v7 = 0; | |
} | |
else | |
{ | |
if ( a2[5] != 47 ) | |
v7 = a2[5]; | |
if ( a3 == 6 ) | |
{ | |
v5 = 0i64; | |
v6 = 0; | |
} | |
else | |
{ | |
v6 = a2[6]; | |
v11 = 92i64; | |
if ( v6 == 47 ) | |
v6 = 92; | |
if ( a3 == 7 ) | |
{ | |
v5 = 0i64; | |
} | |
else | |
{ | |
if ( a2[7] != 47 ) | |
v11 = a2[7]; | |
v5 = v11 << 56; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else | |
{ | |
v5 = 0i64; | |
v6 = 0; | |
v7 = 0; | |
v8 = 0; | |
v9 = 0; | |
v10 = 0; | |
v4 = 0; | |
v3 = 0; | |
} | |
v12 = 8i64; | |
if ( a3 < 8 ) | |
v12 = a3; | |
if ( v12 >= 2 && ((v4 << 8) | v3) == 23644 ) | |
{ | |
if ( (v12 & 0xE) == 2 ) | |
goto LABEL_51; | |
v13 = (unsigned __int16)((v9 << 8) | v10); | |
if ( v13 != 23598 ) | |
{ | |
if ( v13 == 23615 ) | |
{ | |
if ( a3 <= 3 ) | |
sub_14001D040(4i64, a3, (__int64)&off_14001FF48); | |
if ( *a2 == 47 || a2[1] == 47 || a2[2] == 47 || a2[3] == 47 ) | |
{ | |
v14 = a3 - 2; | |
LABEL_53: | |
v16 = a3 - 2; | |
v17 = 0i64; | |
while ( 1 ) | |
{ | |
v18 = a2[v17 + 2]; | |
if ( v18 == 47 || v18 == 92 ) | |
break; | |
if ( v16 == ++v17 ) | |
goto LABEL_68; | |
} | |
v19 = v14 - 1 - v17; | |
if ( v14 - 1 != v17 ) | |
{ | |
v20 = v17 - v14; | |
v21 = 0i64; | |
while ( 1 ) | |
{ | |
v22 = a2[v21 + 3 + v17]; | |
if ( v22 == 47 || v22 == 92 ) | |
break; | |
v23 = v20 + v21++; | |
if ( v23 == -2 ) | |
{ | |
v21 = v19; | |
break; | |
} | |
} | |
if ( v17 && v21 ) | |
{ | |
*(_BYTE *)a1 = 4; | |
*(_QWORD *)(a1 + 8) = a2 + 2; | |
*(_QWORD *)(a1 + 16) = v17; | |
*(_QWORD *)(a1 + 24) = &a2[v17 + 3]; | |
LABEL_67: | |
*(_QWORD *)(a1 + 32) = v21; | |
return a1; | |
} | |
} | |
LABEL_68: | |
*(_BYTE *)a1 = 6; | |
return a1; | |
} | |
if ( v12 <= 3 ) | |
sub_14001D030(4i64, v12, (__int64)&off_14001FF30); | |
if ( (v12 & 0xC) != 4 | |
&& (v5 | ((unsigned __int64)v6 << 48) | ((unsigned __int64)v7 << 40) | ((unsigned __int64)v8 << 32)) == 0x5C434E5500000000i64 ) | |
{ | |
if ( a3 <= 7 ) | |
sub_14001D030(8i64, a3, (__int64)&off_14001FF60); | |
v29 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v30 = a3 - 8; | |
if ( a3 == 8 ) | |
{ | |
v30 = 0i64; | |
v21 = 0i64; | |
} | |
else | |
{ | |
v21 = 0i64; | |
v31 = 0i64; | |
while ( a2[v31 + 8] != 92 ) | |
{ | |
v32 = v31 - a3 + 1; | |
++v31; | |
if ( v32 == -8 ) | |
goto LABEL_109; | |
} | |
v29 = (const char *)&a2[v31 + 9]; | |
v39 = a3 - 9 - v31; | |
if ( a3 - 9 == v31 ) | |
{ | |
v21 = 0i64; | |
} | |
else | |
{ | |
v40 = v31 - a3; | |
v21 = 0i64; | |
while ( a2[v21 + 9 + v31] != 92 ) | |
{ | |
v41 = v40 + v21++; | |
if ( v41 == -10i64 ) | |
{ | |
v30 = v31; | |
v21 = v39; | |
goto LABEL_109; | |
} | |
} | |
} | |
v30 = v31; | |
} | |
LABEL_109: | |
*(_BYTE *)a1 = 1; | |
*(_QWORD *)(a1 + 8) = a2 + 8; | |
*(_QWORD *)(a1 + 16) = v30; | |
*(_QWORD *)(a1 + 24) = v29; | |
goto LABEL_67; | |
} | |
v33 = (char *)(a2 + 4); | |
v34 = a3 - 4; | |
if ( a3 - 4 >= 3 ) | |
{ | |
v35 = a2[6]; | |
if ( v35 != 47 && v35 != 92 ) | |
goto LABEL_95; | |
} | |
else | |
{ | |
if ( a3 == 4 ) | |
{ | |
LABEL_101: | |
*(_BYTE *)a1 = 0; | |
*(_QWORD *)(a1 + 8) = v33; | |
*(_QWORD *)(a1 + 16) = v34; | |
return a1; | |
} | |
if ( a3 != 6 ) | |
{ | |
LABEL_95: | |
v37 = a3 - 4; | |
v38 = 0i64; | |
while ( v33[v38] != 92 ) | |
{ | |
if ( v37 == ++v38 ) | |
goto LABEL_101; | |
} | |
v34 = v38; | |
goto LABEL_101; | |
} | |
} | |
if ( a2[5] == 58 ) | |
{ | |
v36 = *v33; | |
if ( (unsigned __int8)((*v33 & 0xDF) - 65) <= 0x19u ) | |
{ | |
*(_BYTE *)a1 = 2; | |
*(_BYTE *)(a1 + 1) = v36 ^ (32 * ((unsigned __int8)(v36 - 97) < 0x1Au)); | |
return a1; | |
} | |
} | |
goto LABEL_95; | |
} | |
LABEL_51: | |
if ( a3 <= 1 ) | |
sub_14001D030(2i64, a3, (__int64)&off_14001FF60); | |
v14 = a3 - 2; | |
if ( a3 == 2 ) | |
goto LABEL_68; | |
goto LABEL_53; | |
} | |
if ( a3 <= 3 ) | |
sub_14001D030(4i64, a3, (__int64)&off_14001FF60); | |
v25 = a2 + 4; | |
v26 = 0i64; | |
v27 = a3 - 4; | |
if ( v27 ) | |
{ | |
while ( 1 ) | |
{ | |
v28 = (unsigned __int8)v25[v26]; | |
if ( v28 == 47 || v28 == 92 ) | |
break; | |
if ( v27 == ++v26 ) | |
{ | |
v26 = v27; | |
break; | |
} | |
} | |
} | |
*(_BYTE *)a1 = 3; | |
*(_QWORD *)(a1 + 8) = v25; | |
*(_QWORD *)(a1 + 16) = v26; | |
} | |
else | |
{ | |
if ( a3 < 2 ) | |
goto LABEL_68; | |
if ( a2[1] != 58 ) | |
goto LABEL_68; | |
v15 = *a2; | |
if ( (unsigned __int8)((*a2 & 0xDF) - 65) > 0x19u ) | |
goto LABEL_68; | |
*(_BYTE *)a1 = 5; | |
*(_BYTE *)(a1 + 1) = v15 ^ (32 * ((unsigned __int8)(v15 - 97) < 0x1Au)); | |
} | |
return a1; | |
} | |
// 14001FF30: using guessed type char *off_14001FF30; | |
// 14001FF48: using guessed type char *off_14001FF48; | |
// 14001FF60: using guessed type char *off_14001FF60; | |
//----- (000000014000C440) ---------------------------------------------------- | |
void __fastcall sub_14000C440(_QWORD *a1, DWORD a2, unsigned __int8 *a3, unsigned __int64 a4, unsigned __int8 *a5) | |
{ | |
HANDLE StdHandle; // rax | |
void *v9; // r15 | |
__int64 v10; // rax | |
__int64 v11; // rax | |
__int64 v12; // rax | |
unsigned __int8 v13; // al | |
unsigned __int64 v14; // rdi | |
unsigned __int64 v15; // r8 | |
__int64 v16; // rax | |
unsigned __int64 v17; // rdx | |
__int64 v18; // r8 | |
unsigned __int64 v19; // rdx | |
unsigned __int64 v20; // r9 | |
__int64 v21; // rax | |
unsigned __int64 v22; // rcx | |
char **v23; // rax | |
void **v24; // r9 | |
__int64 *v25; // rcx | |
__int64 v26; // [rsp+38h] [rbp-48h] BYREF | |
unsigned __int64 v27; // [rsp+40h] [rbp-40h] BYREF | |
__int64 v28; // [rsp+50h] [rbp-30h] BYREF | |
unsigned __int64 v29; // [rsp+58h] [rbp-28h] | |
unsigned __int64 v30; // [rsp+60h] [rbp-20h] | |
__int128 Mode; // [rsp+68h] [rbp-18h] BYREF | |
char **v32; // [rsp+78h] [rbp-8h] | |
__int64 v33; // [rsp+80h] [rbp+0h] | |
const char *v34; // [rsp+88h] [rbp+8h] | |
__int64 v35; // [rsp+90h] [rbp+10h] | |
__int64 v36[7]; // [rsp+98h] [rbp+18h] BYREF | |
v36[1] = -2i64; | |
if ( !a4 ) | |
{ | |
*(_OWORD *)a1 = 0i64; | |
return; | |
} | |
StdHandle = GetStdHandle(a2); | |
if ( !StdHandle ) | |
{ | |
v11 = 0x600000002i64; | |
goto LABEL_22; | |
} | |
v9 = StdHandle; | |
if ( StdHandle == (HANDLE)-1i64 ) | |
{ | |
LODWORD(v10) = GetLastError(); | |
v11 = (v10 << 32) | 2; | |
LABEL_22: | |
a1[1] = v11; | |
*a1 = 1i64; | |
return; | |
} | |
LODWORD(Mode) = 0; | |
if ( !GetConsoleMode(StdHandle, (LPDWORD)&Mode) ) | |
JUMPOUT(0x14000C531i64); | |
v12 = a5[4]; | |
if ( !a5[4] ) | |
{ | |
v15 = 4096i64; | |
if ( a4 < 0x1000 ) | |
v15 = a4; | |
sub_140018DE0((__int64)&v28, (__int64)a3, v15); | |
if ( v28 ) | |
{ | |
if ( !v29 ) | |
{ | |
v21 = *a3; | |
v22 = byte_1400200B0[v21]; | |
if ( v22 >= 2 && v22 > a4 ) | |
{ | |
*a5 = v21; | |
a5[4] = 1; | |
LABEL_31: | |
a1[1] = 1i64; | |
*a1 = 0i64; | |
return; | |
} | |
v23 = &off_140020098; | |
goto LABEL_33; | |
} | |
v16 = sub_140001110(0i64, v29, (__int64)a3, a4, (__int64)&off_1400201F8); | |
sub_140018DE0((__int64)&Mode, v16, v17); | |
v18 = sub_1400020C0((__int64)&Mode); | |
v20 = v19; | |
} | |
else | |
{ | |
v18 = v29; | |
v20 = v30; | |
} | |
sub_14000C780(a1, v9, v18, v20); | |
return; | |
} | |
if ( (unsigned __int8)v12 >= 4u ) | |
{ | |
v32 = &off_140020020; | |
v33 = 1i64; | |
*(_QWORD *)&Mode = 0i64; | |
v34 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v35 = 0i64; | |
sub_14001CBB0((__int64)&Mode, (__int64)&off_140020030); | |
} | |
if ( (*a3 & 0xC0) != 0x80 ) | |
{ | |
a5[4] = 0; | |
LABEL_21: | |
v11 = (__int64)&off_140020098; | |
goto LABEL_22; | |
} | |
a5[v12] = *a3; | |
v13 = a5[4] + 1; | |
a5[4] = v13; | |
v14 = byte_1400200B0[*a5]; | |
v27 = v14; | |
if ( v13 < (unsigned __int8)v14 ) | |
{ | |
a1[1] = 1i64; | |
*a1 = 0i64; | |
return; | |
} | |
if ( v13 >= 5u ) | |
sub_14001D040(v13, 4i64, (__int64)&off_1400201B0); | |
sub_140018DE0((__int64)&v28, (__int64)a5, v13); | |
a5[4] = 0; | |
if ( v28 ) | |
goto LABEL_21; | |
v36[0] = v30; | |
if ( v30 != v14 ) | |
{ | |
v32 = 0i64; | |
v24 = &off_1400201C8; | |
v25 = (__int64 *)&v27; | |
goto LABEL_38; | |
} | |
sub_14000C780(&Mode, v9, v29, v14); | |
v23 = (char **)*((_QWORD *)&Mode + 1); | |
if ( !(_QWORD)Mode ) | |
{ | |
v26 = *((_QWORD *)&Mode + 1); | |
v36[0] = v14; | |
if ( *((_QWORD *)&Mode + 1) == v14 ) | |
goto LABEL_31; | |
v32 = 0i64; | |
v24 = &off_1400201E0; | |
v25 = &v26; | |
LABEL_38: | |
sub_14001BFB0((__int64)v25, (__int64)v36, &Mode, (__int64)v24); | |
} | |
LABEL_33: | |
a1[1] = v23; | |
*a1 = 1i64; | |
} | |
// 14000C4C6: control flows out of bounds to 14000C531 | |
// 14000C489: variable 'v10' is possibly undefined | |
// 14000C5B7: variable 'v17' is possibly undefined | |
// 14000C5C7: variable 'v19' is possibly undefined | |
// 140020020: using guessed type char *off_140020020; | |
// 140020030: using guessed type void *off_140020030; | |
// 140020098: using guessed type char *off_140020098; | |
// 1400200B0: using guessed type unsigned __int8 byte_1400200B0[256]; | |
// 1400201B0: using guessed type void *off_1400201B0; | |
// 1400201C8: using guessed type void *off_1400201C8; | |
// 1400201E0: using guessed type void *off_1400201E0; | |
// 1400201F8: using guessed type void *off_1400201F8; | |
//----- (000000014000C780) ---------------------------------------------------- | |
int __fastcall sub_14000C780(_QWORD *a1, void *a2, __int64 a3, unsigned __int64 a4) | |
{ | |
__int64 v4; // rdi | |
int v7; // eax | |
unsigned __int64 v8; // r15 | |
__int64 v9; // rax | |
unsigned __int64 v10; // rbx | |
WCHAR *v11; // rdx | |
__int64 v12; // rbx | |
unsigned __int16 v13; // cx | |
__int64 v14; // rdx | |
__int64 v15; // rax | |
DWORD NumberOfCharsWritten[2]; // [rsp+30h] [rbp-2058h] BYREF | |
char **v18; // [rsp+40h] [rbp-2048h] | |
__int64 v19; // [rsp+48h] [rbp-2040h] | |
const char *v20; // [rsp+50h] [rbp-2038h] | |
__int64 v21; // [rsp+58h] [rbp-2030h] | |
WCHAR WideCharStr[4116]; // [rsp+60h] [rbp-2028h] BYREF | |
v4 = a4; | |
if ( a4 >= 0x1001 ) | |
{ | |
v4 = 4096i64; | |
if ( *(char *)(a3 + 4096) <= -65 ) | |
{ | |
v4 = 4095i64; | |
if ( *(char *)(a3 + 4095) <= -65 ) | |
v4 = (*(_BYTE *)(a3 + 4094) >= 0xC0) + 4093i64; | |
} | |
} | |
v7 = MultiByteToWideChar(0xFDE9u, 8u, (LPCCH)a3, v4, WideCharStr, 4096); | |
if ( !v7 ) | |
{ | |
v18 = &off_140020250; | |
v19 = 1i64; | |
*(_QWORD *)NumberOfCharsWritten = 0i64; | |
v20 = "/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v21 = 0i64; | |
sub_14001CBB0((__int64)NumberOfCharsWritten, (__int64)&off_140020260); | |
} | |
v8 = v7; | |
if ( (unsigned int)v7 >= 0x1001 ) | |
sub_14001D040(v7, 4096i64, (__int64)&off_140020278); | |
NumberOfCharsWritten[0] = 0; | |
LODWORD(v9) = WriteConsoleW(a2, WideCharStr, v7, NumberOfCharsWritten, 0i64); | |
if ( (_DWORD)v9 ) | |
{ | |
v10 = NumberOfCharsWritten[0]; | |
if ( NumberOfCharsWritten[0] != v8 ) | |
{ | |
if ( NumberOfCharsWritten[0] >= v8 ) | |
sub_14001CD00(NumberOfCharsWritten[0], v8, (__int64)&off_140020290); | |
LODWORD(v9) = (unsigned __int16)(WideCharStr[NumberOfCharsWritten[0]] + 8978); | |
if ( (unsigned int)v9 < 0x312 ) | |
{ | |
v11 = &WideCharStr[NumberOfCharsWritten[0]]; | |
v10 = NumberOfCharsWritten[0] + 1i64; | |
NumberOfCharsWritten[0] = 0; | |
LODWORD(v9) = WriteConsoleW(a2, v11, 1u, NumberOfCharsWritten, 0i64); | |
if ( !(_DWORD)v9 ) | |
LODWORD(v9) = GetLastError(); | |
} | |
if ( v10 > v8 ) | |
sub_14001D040(v10, v8, (__int64)&off_1400202A8); | |
if ( v10 ) | |
{ | |
v12 = 2 * v10; | |
v9 = 0i64; | |
v4 = 0i64; | |
do | |
{ | |
v13 = *(WCHAR *)((char *)WideCharStr + v9); | |
v14 = 1i64; | |
if ( v13 > 0x7Fu ) | |
{ | |
v14 = 2i64; | |
if ( v13 >= 0x800u ) | |
v14 = 2i64 * ((unsigned __int16)(v13 + 8978) >= 0x312u) + 1; | |
} | |
v4 += v14; | |
v9 += 2i64; | |
} | |
while ( v12 != v9 ); | |
} | |
else | |
{ | |
v4 = 0i64; | |
} | |
} | |
a1[1] = v4; | |
*a1 = 0i64; | |
} | |
else | |
{ | |
LODWORD(v15) = GetLastError(); | |
v9 = (v15 << 32) | 2; | |
a1[1] = v9; | |
*a1 = 1i64; | |
} | |
return v9; | |
} | |
// 14000C910: variable 'v15' is possibly undefined | |
// 140020250: using guessed type char *off_140020250; | |
// 140020260: using guessed type void *off_140020260; | |
// 140020278: using guessed type void *off_140020278; | |
// 140020290: using guessed type void *off_140020290; | |
// 1400202A8: using guessed type void *off_1400202A8; | |
// 14000C780: using guessed type WCHAR WideCharStr[4116]; | |
//----- (000000014000C9D0) ---------------------------------------------------- | |
_QWORD *__fastcall sub_14000C9D0(_QWORD *a1, unsigned __int8 *a2, unsigned __int8 *a3, unsigned __int64 a4) | |
{ | |
sub_14000C440(a1, 0xFFFFFFF4, a3, a4, a2); | |
return a1; | |
} | |
//----- (000000014000C9F0) ---------------------------------------------------- | |
_QWORD *__fastcall sub_14000C9F0(__int64 a1, __int64 a2) | |
{ | |
_QWORD *result; // rax | |
__int64 v3; // rsi | |
__int64 v4; // rdi | |
HANDLE CurrentThread; // rax | |
__int64 v6[3]; // [rsp+28h] [rbp-40h] BYREF | |
__int64 v7; // [rsp+40h] [rbp-28h] BYREF | |
__int64 v8; // [rsp+48h] [rbp-20h] | |
result = (_QWORD *)sub_140016770((__int64)v6, a1, a2); | |
if ( !v6[0] ) | |
{ | |
sub_14000D3F0((__int64)&v7, v6[1], v6[2]); | |
v3 = v8; | |
if ( v8 ) | |
{ | |
v4 = v7; | |
CurrentThread = GetCurrentThread(); | |
result = (_QWORD *)off_140027038(CurrentThread, v3); | |
if ( v4 ) | |
return (_QWORD *)sub_1400010E0(v3, 2 * v4, 2i64); | |
} | |
else | |
{ | |
return sub_140001E60(&v7); | |
} | |
} | |
return result; | |
} | |
// 140027038: invalid function type has been ignored | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
// 140027038: using guessed type __int64 (__fastcall *off_140027038)(_QWORD, _QWORD); | |
//----- (000000014000CA80) ---------------------------------------------------- | |
__int64 __fastcall sub_14000CA80(__int64 a1, __int64 a2) | |
{ | |
__int64 v4; // rax | |
__int64 v5; // rcx | |
__int64 result; // rax | |
__int64 v7; // rdx | |
__int64 v8; // rcx | |
v4 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
v5 = *(_QWORD *)(v4 + 56); | |
if ( v5 == *(_QWORD *)(v4 + 40) ) | |
{ | |
sub_1400031A0(v5); | |
v5 = *(_QWORD *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 56i64); | |
} | |
result = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
v7 = *(_QWORD *)(result + 48); | |
v8 = 16 * v5; | |
*(_QWORD *)(v7 + v8) = a1; | |
*(_QWORD *)(v7 + v8 + 8) = a2; | |
++*(_QWORD *)(result + 56); | |
return result; | |
} | |
// 140027270: using guessed type int TlsIndex; | |
//----- (000000014000CB10) ---------------------------------------------------- | |
_QWORD *sub_14000CB10() | |
{ | |
__int64 i; // rax | |
__int64 v1; // rax | |
__int64 v2; // rsi | |
__int64 v3; // rdx | |
_QWORD *result; // rax | |
for ( i = *(_QWORD *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 56i64); | |
i; | |
i = *(_QWORD *)(v2 + 56) ) | |
{ | |
v1 = i - 1; | |
v2 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
*(_QWORD *)(v2 + 56) = v1; | |
(*(void (__fastcall **)(_QWORD))(*(_QWORD *)(v2 + 48) + 16 * v1 + 8))(*(_QWORD *)(*(_QWORD *)(v2 + 48) + 16 * v1)); | |
} | |
v3 = *(_QWORD *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 40i64); | |
if ( v3 ) | |
sub_1400010E0( | |
*(_QWORD *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 48i64), | |
16 * v3, | |
8i64); | |
result = (_QWORD *)*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
result[5] = 0i64; | |
result[6] = 8i64; | |
result[7] = 0i64; | |
return result; | |
} | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
// 140027270: using guessed type int TlsIndex; | |
//----- (000000014000CC00) ---------------------------------------------------- | |
void __fastcall TlsCallback_0(__int64 a1, int a2) | |
{ | |
__int64 v2; // r15 | |
char v3; // r12 | |
void (__fastcall *v4)(LPVOID); // r13 | |
DWORD v5; // esi | |
LPVOID Value; // rax | |
LPVOID v7; // rdi | |
__int64 v8; // r15 | |
char v9; // r12 | |
void (__fastcall *v10)(LPVOID); // r13 | |
DWORD v11; // esi | |
LPVOID v12; // rax | |
LPVOID v13; // rdi | |
__int64 v14; // r15 | |
char v15; // r12 | |
void (__fastcall *v16)(LPVOID); // r13 | |
DWORD v17; // esi | |
LPVOID v18; // rax | |
LPVOID v19; // rdi | |
__int64 v20; // r15 | |
char v21; // r12 | |
void (__fastcall *v22)(LPVOID); // r13 | |
DWORD v23; // esi | |
LPVOID v24; // rax | |
LPVOID v25; // rdi | |
__int64 i; // r15 | |
void (__fastcall *v27)(LPVOID); // r12 | |
DWORD v28; // esi | |
LPVOID v29; // rax | |
LPVOID v30; // rdi | |
if ( a2 != 3 && a2 ) | |
JUMPOUT(0x14000CDA0i64); | |
v2 = qword_1400271F8; | |
if ( qword_1400271F8 ) | |
{ | |
v3 = 0; | |
do | |
{ | |
v4 = *(void (__fastcall **)(LPVOID))v2; | |
if ( !*(_QWORD *)v2 ) | |
LABEL_45: | |
JUMPOUT(0x14000CDF3i64); | |
v5 = *(_DWORD *)(v2 + 24) - 1; | |
Value = TlsGetValue(v5); | |
if ( Value ) | |
{ | |
v7 = Value; | |
TlsSetValue(v5, 0i64); | |
v4(v7); | |
v3 = 1; | |
} | |
v2 = *(_QWORD *)(v2 + 8); | |
} | |
while ( v2 ); | |
if ( (v3 & 1) != 0 ) | |
{ | |
v8 = qword_1400271F8; | |
if ( qword_1400271F8 ) | |
{ | |
v9 = 0; | |
do | |
{ | |
v10 = *(void (__fastcall **)(LPVOID))v8; | |
if ( !*(_QWORD *)v8 ) | |
goto LABEL_45; | |
v11 = *(_DWORD *)(v8 + 24) - 1; | |
v12 = TlsGetValue(v11); | |
if ( v12 ) | |
{ | |
v13 = v12; | |
TlsSetValue(v11, 0i64); | |
v10(v13); | |
v9 = 1; | |
} | |
v8 = *(_QWORD *)(v8 + 8); | |
} | |
while ( v8 ); | |
if ( (v9 & 1) != 0 ) | |
{ | |
v14 = qword_1400271F8; | |
if ( qword_1400271F8 ) | |
{ | |
v15 = 0; | |
do | |
{ | |
v16 = *(void (__fastcall **)(LPVOID))v14; | |
if ( !*(_QWORD *)v14 ) | |
goto LABEL_45; | |
v17 = *(_DWORD *)(v14 + 24) - 1; | |
v18 = TlsGetValue(v17); | |
if ( v18 ) | |
{ | |
v19 = v18; | |
TlsSetValue(v17, 0i64); | |
v16(v19); | |
v15 = 1; | |
} | |
v14 = *(_QWORD *)(v14 + 8); | |
} | |
while ( v14 ); | |
if ( (v15 & 1) != 0 ) | |
{ | |
v20 = qword_1400271F8; | |
if ( qword_1400271F8 ) | |
{ | |
v21 = 0; | |
do | |
{ | |
v22 = *(void (__fastcall **)(LPVOID))v20; | |
if ( !*(_QWORD *)v20 ) | |
goto LABEL_45; | |
v23 = *(_DWORD *)(v20 + 24) - 1; | |
v24 = TlsGetValue(v23); | |
if ( v24 ) | |
{ | |
v25 = v24; | |
TlsSetValue(v23, 0i64); | |
v22(v25); | |
v21 = 1; | |
} | |
v20 = *(_QWORD *)(v20 + 8); | |
} | |
while ( v20 ); | |
if ( (v21 & 1) != 0 ) | |
{ | |
for ( i = qword_1400271F8; i; i = *(_QWORD *)(i + 8) ) | |
{ | |
v27 = *(void (__fastcall **)(LPVOID))i; | |
if ( !*(_QWORD *)i ) | |
goto LABEL_45; | |
v28 = *(_DWORD *)(i + 24) - 1; | |
v29 = TlsGetValue(v28); | |
if ( v29 ) | |
{ | |
v30 = v29; | |
TlsSetValue(v28, 0i64); | |
v27(v30); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
JUMPOUT(0x14000CD9Bi64); | |
} | |
// 14000CD99: control flows out of bounds to 14000CD9B | |
// 14000CC24: control flows out of bounds to 14000CDA0 | |
// 14000CC63: control flows out of bounds to 14000CDF3 | |
// 1400271F8: using guessed type __int64 qword_1400271F8; | |
//----- (000000014000CE30) ---------------------------------------------------- | |
char __fastcall sub_14000CE30(int a1) | |
{ | |
char result; // al | |
result = 1; | |
if ( a1 <= 1130 ) | |
{ | |
if ( a1 <= 205 ) | |
{ | |
switch ( a1 ) | |
{ | |
case 2: | |
case 3: | |
result = 0; | |
break; | |
case 5: | |
return result; | |
case 8: | |
case 14: | |
result = 38; | |
break; | |
case 17: | |
result = 31; | |
break; | |
case 19: | |
result = 17; | |
break; | |
case 39: | |
case 112: | |
result = 24; | |
break; | |
case 80: | |
case 183: | |
result = 12; | |
break; | |
case 87: | |
goto LABEL_7; | |
case 109: | |
return 11; | |
case 120: | |
result = 36; | |
break; | |
case 121: | |
return 22; | |
case 123: | |
return 33; | |
case 132: | |
result = 25; | |
break; | |
case 145: | |
result = 16; | |
break; | |
case 170: | |
result = 28; | |
break; | |
default: | |
return 40; | |
} | |
return result; | |
} | |
if ( a1 <= 335 ) | |
{ | |
if ( a1 <= 231 ) | |
{ | |
if ( a1 == 206 ) | |
return 33; | |
if ( a1 == 223 ) | |
return 27; | |
return 40; | |
} | |
if ( a1 == 232 ) | |
return 11; | |
if ( a1 != 258 ) | |
{ | |
if ( a1 == 267 ) | |
return 14; | |
return 40; | |
} | |
return 22; | |
} | |
if ( a1 <= 994 ) | |
{ | |
if ( a1 == 336 ) | |
return 15; | |
if ( a1 != 594 ) | |
return 40; | |
return 22; | |
} | |
if ( a1 == 995 || a1 == 1053 || a1 == 1121 ) | |
return 22; | |
return 40; | |
} | |
if ( a1 <= 10012 ) | |
{ | |
if ( a1 <= 5909 ) | |
{ | |
if ( a1 <= 1231 ) | |
{ | |
switch ( a1 ) | |
{ | |
case 1131: | |
return 30; | |
case 1142: | |
return 32; | |
case 1231: | |
return 5; | |
} | |
return 40; | |
} | |
if ( a1 == 1232 ) | |
return 4; | |
if ( a1 == 1295 ) | |
return 26; | |
if ( a1 != 1460 ) | |
return 40; | |
return 22; | |
} | |
if ( a1 > 8013 ) | |
{ | |
if ( a1 == 8014 || a1 == 8226 || a1 == 9705 ) | |
return 22; | |
} | |
else if ( a1 == 5910 || a1 == 7012 || a1 == 7040 ) | |
{ | |
return 22; | |
} | |
return 40; | |
} | |
switch ( a1 ) | |
{ | |
case 10013: | |
return result; | |
case 10014: | |
case 10015: | |
case 10016: | |
case 10017: | |
case 10018: | |
case 10019: | |
case 10020: | |
case 10021: | |
case 10023: | |
case 10024: | |
case 10025: | |
case 10026: | |
case 10027: | |
case 10028: | |
case 10029: | |
case 10030: | |
case 10031: | |
case 10032: | |
case 10033: | |
case 10034: | |
case 10036: | |
case 10037: | |
case 10038: | |
case 10039: | |
case 10040: | |
case 10041: | |
case 10042: | |
case 10043: | |
case 10044: | |
case 10045: | |
case 10046: | |
case 10047: | |
case 10052: | |
case 10055: | |
case 10056: | |
case 10058: | |
case 10059: | |
case 10062: | |
case 10063: | |
case 10064: | |
return 40; | |
case 10022: | |
LABEL_7: | |
result = 20; | |
break; | |
case 10035: | |
result = 13; | |
break; | |
case 10048: | |
result = 8; | |
break; | |
case 10049: | |
result = 9; | |
break; | |
case 10050: | |
result = 10; | |
break; | |
case 10051: | |
return 5; | |
case 10053: | |
result = 6; | |
break; | |
case 10054: | |
result = 3; | |
break; | |
case 10057: | |
result = 7; | |
break; | |
case 10060: | |
return 22; | |
case 10061: | |
result = 2; | |
break; | |
case 10065: | |
return 4; | |
default: | |
if ( (unsigned int)(a1 - 15402) >= 2 && a1 != 13805 ) | |
return 40; | |
return 22; | |
} | |
return result; | |
} | |
//----- (000000014000D3F0) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
void __fastcall sub_14000D3F0(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
unsigned __int64 v3; // r12 | |
__int64 v4; // r14 | |
__int64 v5; // r14 | |
v3 = a3 + 1; | |
if ( a3 != -1 ) | |
{ | |
v4 = 0i64; | |
if ( v3 >> 62 ) | |
sub_140015AA0(); | |
LOBYTE(v4) = 1; | |
v5 = 2 * v4; | |
if ( 2 * v3 ) | |
{ | |
if ( sub_1400010D0(2 * v3, v5) ) | |
goto LABEL_5; | |
LABEL_7: | |
sub_14001CB30(); | |
} | |
if ( !v5 ) | |
goto LABEL_7; | |
} | |
LABEL_5: | |
JUMPOUT(0x14000D47Ci64); | |
} | |
// 14000D579: positive sp value 98 has been found | |
// 14000D476: control flows out of bounds to 14000D47C | |
// 1400010D0: using guessed type __int64 __fastcall sub_1400010D0(_QWORD, _QWORD); | |
//----- (000000014000D5D0) ---------------------------------------------------- | |
__int64 __fastcall sub_14000D5D0(__int64 a1, __int64 a2) | |
{ | |
HMODULE ModuleHandleA; // rax | |
HRESULT (__stdcall *SetThreadDescription)(HANDLE, PCWSTR); // rax | |
ModuleHandleA = GetModuleHandleA("kernel32"); | |
if ( !ModuleHandleA | |
|| (SetThreadDescription = (HRESULT (__stdcall *)(HANDLE, PCWSTR))GetProcAddress( | |
ModuleHandleA, | |
"SetThreadDescription")) == 0i64 ) | |
{ | |
SetThreadDescription = (HRESULT (__stdcall *)(HANDLE, PCWSTR))sub_14000D620; | |
} | |
off_140027038 = (__int64 (__fastcall *)(_QWORD, _QWORD))SetThreadDescription; | |
return ((__int64 (__fastcall *)(__int64, __int64))SetThreadDescription)(a1, a2); | |
} | |
// 140027038: using guessed type __int64 (__fastcall *off_140027038)(_QWORD, _QWORD); | |
//----- (000000014000D620) ---------------------------------------------------- | |
__int64 sub_14000D620() | |
{ | |
SetLastError(0x78u); | |
return 2147500033i64; | |
} | |
//----- (000000014000D640) ---------------------------------------------------- | |
__int64 __fastcall sub_14000D640(__int64 a1, unsigned int a2, __int64 a3, unsigned int a4) | |
{ | |
HMODULE ModuleHandleA; // rax | |
NTSTATUS (__stdcall *NtCreateKeyedEvent)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG); // rax | |
ModuleHandleA = GetModuleHandleA("ntdll"); | |
if ( !ModuleHandleA | |
|| (NtCreateKeyedEvent = (NTSTATUS (__stdcall *)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG))GetProcAddress(ModuleHandleA, "NtCreateKeyedEvent")) == 0i64 ) | |
{ | |
NtCreateKeyedEvent = (NTSTATUS (__stdcall *)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG))sub_14000D6A0; | |
} | |
off_140027040 = (__int64 (__fastcall *)(_QWORD, _QWORD, _QWORD, _QWORD))NtCreateKeyedEvent; | |
return ((__int64 (__fastcall *)(__int64, _QWORD, __int64, _QWORD))NtCreateKeyedEvent)(a1, a2, a3, a4); | |
} | |
// 140027040: using guessed type __int64 (__fastcall *off_140027040)(_QWORD, _QWORD, _QWORD, _QWORD); | |
//----- (000000014000D6A0) ---------------------------------------------------- | |
void sub_14000D6A0() | |
{ | |
JUMPOUT(0x14000D6E0i64); | |
} | |
// 14000D6D8: control flows out of bounds to 14000D6E0 | |
//----- (000000014000D720) ---------------------------------------------------- | |
__int64 __fastcall sub_14000D720(__int64 a1, __int64 a2, unsigned int a3, __int64 a4) | |
{ | |
HMODULE ModuleHandleA; // rax | |
NTSTATUS (__stdcall *NtReleaseKeyedEvent)(HANDLE, PVOID, BOOLEAN, PLARGE_INTEGER); // rax | |
ModuleHandleA = GetModuleHandleA("ntdll"); | |
if ( !ModuleHandleA | |
|| (NtReleaseKeyedEvent = (NTSTATUS (__stdcall *)(HANDLE, PVOID, BOOLEAN, PLARGE_INTEGER))GetProcAddress( | |
ModuleHandleA, | |
"NtReleaseKeyedEvent")) == 0i64 ) | |
{ | |
NtReleaseKeyedEvent = (NTSTATUS (__stdcall *)(HANDLE, PVOID, BOOLEAN, PLARGE_INTEGER))sub_14000D790; | |
} | |
off_140027048 = (__int64 (__fastcall *)(_QWORD, _QWORD, _QWORD, _QWORD))NtReleaseKeyedEvent; | |
return ((__int64 (__fastcall *)(__int64, __int64, _QWORD, __int64))NtReleaseKeyedEvent)(a1, a2, a3, a4); | |
} | |
// 140027048: using guessed type __int64 (__fastcall *off_140027048)(_QWORD, _QWORD, _QWORD, _QWORD); | |
//----- (000000014000D790) ---------------------------------------------------- | |
void sub_14000D790() | |
{ | |
JUMPOUT(0x14000D7D0i64); | |
} | |
// 14000D7C8: control flows out of bounds to 14000D7D0 | |
//----- (000000014000D810) ---------------------------------------------------- | |
__int64 __fastcall sub_14000D810(__int64 a1, __int64 a2, unsigned int a3, __int64 a4) | |
{ | |
HMODULE ModuleHandleA; // rax | |
NTSTATUS (__stdcall *NtWaitForKeyedEvent)(HANDLE, PVOID, BOOLEAN, PLARGE_INTEGER); // rax | |
ModuleHandleA = GetModuleHandleA("ntdll"); | |
if ( !ModuleHandleA | |
|| (NtWaitForKeyedEvent = (NTSTATUS (__stdcall *)(HANDLE, PVOID, BOOLEAN, PLARGE_INTEGER))GetProcAddress( | |
ModuleHandleA, | |
"NtWaitForKeyedEvent")) == 0i64 ) | |
{ | |
NtWaitForKeyedEvent = (NTSTATUS (__stdcall *)(HANDLE, PVOID, BOOLEAN, PLARGE_INTEGER))sub_14000D880; | |
} | |
off_140027050 = (__int64 (__fastcall *)(_QWORD, _QWORD, _QWORD, _QWORD))NtWaitForKeyedEvent; | |
return ((__int64 (__fastcall *)(__int64, __int64, _QWORD, __int64))NtWaitForKeyedEvent)(a1, a2, a3, a4); | |
} | |
// 140027050: using guessed type __int64 (__fastcall *off_140027050)(_QWORD, _QWORD, _QWORD, _QWORD); | |
//----- (000000014000D880) ---------------------------------------------------- | |
void sub_14000D880() | |
{ | |
JUMPOUT(0x14000D8C0i64); | |
} | |
// 14000D8B8: control flows out of bounds to 14000D8C0 | |
//----- (000000014000D900) ---------------------------------------------------- | |
__int64 __fastcall Handler(struct _EXCEPTION_POINTERS *ExceptionInfo) | |
{ | |
if ( ExceptionInfo->ExceptionRecord->ExceptionCode == -1073741571 ) | |
JUMPOUT(0x14000D934i64); | |
return 0i64; | |
} | |
// 14000D92D: control flows out of bounds to 14000D934 | |
//----- (000000014000DAB0) ---------------------------------------------------- | |
__int64 __fastcall sub_14000DAB0(__int64 a1) | |
{ | |
__int64 v1; // rax | |
__int64 result; // rax | |
__int64 v3; // r15 | |
__int64 v4; // rdi | |
char v5; // al | |
__int64 v6; // rdi | |
volatile signed __int64 *v7; // rcx | |
HANDLE v8; // rcx | |
int v9; // eax | |
signed __int64 v10; // rax | |
void *v11; // rbx | |
HANDLE hObject; // [rsp+68h] [rbp-18h] BYREF | |
volatile signed __int64 *v13; // [rsp+70h] [rbp-10h] | |
int v14; // [rsp+7Ch] [rbp-4h] | |
__int64 v15; // [rsp+80h] [rbp+0h] | |
v15 = -2i64; | |
v1 = _InterlockedExchange64(*(volatile __int64 **)(a1 + 8), *(_QWORD *)a1); | |
if ( (v1 & 3) != 2 ) | |
JUMPOUT(0x14000DC58i64); | |
result = v1 - 2; | |
if ( result ) | |
{ | |
do | |
{ | |
v3 = *(_QWORD *)(result + 8); | |
v4 = *(_QWORD *)result; | |
*(_QWORD *)result = 0i64; | |
if ( !v4 ) | |
sub_14001CC50( | |
(__int64)"called `Option::unwrap()` on a `None` valueinternal error: entered unreachable code/rustc/90c541806f2" | |
"3a127002de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
43i64, | |
(__int64)&off_1400206D8); | |
v13 = (volatile signed __int64 *)v4; | |
*(_BYTE *)(result + 16) = 1; | |
v5 = *(_BYTE *)(v4 + 40); | |
*(_BYTE *)(v4 + 40) = 1; | |
if ( v5 == -1 ) | |
{ | |
v6 = v4 + 40; | |
if ( !qword_140027208 ) | |
{ | |
v8 = (HANDLE)qword_140027030; | |
if ( qword_140027030 == -1 ) | |
{ | |
hObject = (HANDLE)-1i64; | |
v9 = off_140027040(&hObject, 3221225472i64, 0i64, 0i64); | |
if ( v9 ) | |
{ | |
v14 = v9; | |
JUMPOUT(0x14000DC46i64); | |
} | |
v8 = hObject; | |
v10 = _InterlockedCompareExchange64(&qword_140027030, (signed __int64)hObject, -1i64); | |
if ( v10 != -1 ) | |
{ | |
v11 = (void *)v10; | |
CloseHandle(hObject); | |
v8 = v11; | |
} | |
} | |
off_140027048(v8, v6, 0i64, 0i64); | |
v7 = v13; | |
if ( _InterlockedDecrement64(v13) ) | |
goto LABEL_4; | |
LABEL_10: | |
sub_140002DF0((__int64)v7); | |
goto LABEL_4; | |
} | |
qword_140027208(v6); | |
} | |
v7 = v13; | |
if ( !_InterlockedDecrement64(v13) ) | |
goto LABEL_10; | |
LABEL_4: | |
result = v3; | |
} | |
while ( v3 ); | |
} | |
return result; | |
} | |
// 14000DC3E: control flows out of bounds to 14000DC46 | |
// 14000DAE6: control flows out of bounds to 14000DC58 | |
// 140027208: invalid function type has been ignored | |
// 140027040: invalid function type has been ignored | |
// 140027048: invalid function type has been ignored | |
// 1400206D8: using guessed type void *off_1400206D8; | |
// 140027030: using guessed type __int64 qword_140027030; | |
// 140027040: using guessed type __int64 (__fastcall *off_140027040)(_QWORD, _QWORD, _QWORD, _QWORD); | |
// 140027048: using guessed type __int64 (__fastcall *off_140027048)(_QWORD, _QWORD, _QWORD, _QWORD); | |
// 140027208: using guessed type __int64 (__fastcall *qword_140027208)(_QWORD); | |
//----- (000000014000DCE0) ---------------------------------------------------- | |
void __noreturn sub_14000DCE0() | |
{ | |
void (*v0)(void); // r8 | |
v0 = (void (*)(void))sub_140009770; | |
if ( qword_140027198 ) | |
v0 = (void (*)(void))qword_140027198; | |
v0(); | |
__fastfail(7u); | |
} | |
// 140027198: using guessed type __int64 qword_140027198; | |
//----- (000000014000DD10) ---------------------------------------------------- | |
void __noreturn sub_14000DD10() | |
{ | |
sub_14000DCE0(); | |
} | |
//----- (000000014000DD20) ---------------------------------------------------- | |
PRUNTIME_FUNCTION __fastcall sub_14000DD20(__int64 a1, ULONG64 a2) | |
{ | |
unsigned __int64 ImageBase; // [rsp+20h] [rbp-8h] BYREF | |
ImageBase = 0i64; | |
return RtlLookupFunctionEntry(a2, &ImageBase, 0i64); | |
} | |
//----- (000000014000DD50) ---------------------------------------------------- | |
unsigned __int64 __fastcall sub_14000DD50(__int64 a1, ULONG64 a2) | |
{ | |
unsigned __int64 ImageBase; // [rsp+20h] [rbp-8h] BYREF | |
ImageBase = 0i64; | |
RtlLookupFunctionEntry(a2, &ImageBase, 0i64); | |
return ImageBase; | |
} | |
//----- (000000014000DD80) ---------------------------------------------------- | |
char __fastcall sub_14000DD80(_QWORD *a1, __int64 *a2) | |
{ | |
unsigned __int64 v3; // rdi | |
__int64 v4; // rbx | |
unsigned __int8 *v5; // r12 | |
char v6; // bp | |
__int64 v7; // r13 | |
unsigned __int64 v8; // r12 | |
__int64 v10; // [rsp+20h] [rbp-58h] BYREF | |
unsigned __int8 *v11; // [rsp+28h] [rbp-50h] | |
unsigned __int64 v12; // [rsp+30h] [rbp-48h] | |
if ( *(_DWORD *)a1 != 2 ) | |
return sub_140015550(a1, a2); | |
v3 = a1[9]; | |
if ( !v3 ) | |
return 0; | |
v4 = a1[8]; | |
while ( 1 ) | |
{ | |
sub_140018DE0((__int64)&v10, v4, v3); | |
if ( !v10 ) | |
break; | |
v5 = v11; | |
v6 = v12; | |
v7 = BYTE1(v12); | |
if ( (unsigned __int8)sub_1400183F0(byte_14001F628, 3ui64, a2) ) | |
return 1; | |
if ( (v6 & 1) != 0 ) | |
{ | |
v8 = (unsigned __int64)&v5[v7]; | |
if ( v3 < v8 ) | |
sub_14001D030(v8, v3, (__int64)&off_14001FB98); | |
v4 += v8; | |
v3 -= v8; | |
if ( v3 ) | |
continue; | |
} | |
return 0; | |
} | |
return (unsigned __int8)sub_1400183F0(v11, v12, a2) != 0; | |
} | |
// 14001F628: using guessed type unsigned __int8 byte_14001F628[8]; | |
// 14001FB98: using guessed type char *off_14001FB98; | |
//----- (000000014000DE70) ---------------------------------------------------- | |
int __fastcall sub_14000DE70(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
__int64 v6; // rax | |
void *v7; // rdx | |
__int64 v8; // rdi | |
bool v9; // zf | |
__int64 v10; // rsi | |
unsigned int v11; // ebx | |
BOOL (__stdcall *v12)(HANDLE, DWORD64, ULONG, PDWORD64, PSYMBOL_INFOW); // r15 | |
BOOL (__stdcall *SymFromInlineContextW)(HANDLE, DWORD64, ULONG, PDWORD64, PSYMBOL_INFOW); // rax | |
HANDLE CurrentProcess; // rax | |
__int64 v15; // rdx | |
bool v16; // cf | |
__int64 v17; // rsi | |
unsigned __int64 v18; // rcx | |
_QWORD *v19; // rbx | |
BOOL (__stdcall *v20)(HANDLE, DWORD64, ULONG, DWORD64, PDWORD, PIMAGEHLP_LINEW64); // r12 | |
BOOL (__stdcall *SymGetLineFromInlineContextW)(HANDLE, DWORD64, ULONG, DWORD64, PDWORD, PIMAGEHLP_LINEW64); // rax | |
HANDLE v22; // rax | |
__int64 v23; // rsi | |
int v24; // eax | |
__int64 v25; // rdx | |
int v26; // r8d | |
_QWORD v28[511]; // [rsp+38h] [rbp-48h] BYREF | |
__int128 v29[16]; // [rsp+1030h] [rbp+FB0h] BYREF | |
__int128 v30; // [rsp+1130h] [rbp+10B0h] BYREF | |
__int128 v31; // [rsp+1140h] [rbp+10C0h] | |
__int64 v32; // [rsp+1150h] [rbp+10D0h] | |
__int64 v33[3]; // [rsp+1160h] [rbp+10E0h] BYREF | |
int v34; // [rsp+1178h] [rbp+10F8h] | |
int v35; // [rsp+117Ch] [rbp+10FCh] | |
__int64 v36; // [rsp+1180h] [rbp+1100h] | |
__int64 v37; // [rsp+1188h] [rbp+1108h] | |
__int64 v38; // [rsp+1190h] [rbp+1110h] | |
__int64 v39; // [rsp+1198h] [rbp+1118h] | |
HANDLE hMutex; // [rsp+11A0h] [rbp+1120h] | |
__int64 v41; // [rsp+11A8h] [rbp+1128h] | |
__int64 v42; // [rsp+11B0h] [rbp+1130h] | |
unsigned int v43; // [rsp+11B8h] [rbp+1138h] | |
__int16 v44; // [rsp+11BEh] [rbp+113Eh] | |
__int64 v45; // [rsp+11C0h] [rbp+1140h] | |
v45 = -2i64; | |
v6 = sub_14000B610(); | |
if ( !v6 ) | |
{ | |
v8 = (__int64)v7; | |
v9 = *(_QWORD *)(a1 + 8) == 0i64; | |
hMutex = v7; | |
if ( !v9 ) | |
JUMPOUT(0x14000DEC8i64); | |
v10 = *(_QWORD *)(a1 + 16); | |
v11 = *(_DWORD *)(a1 + 284); | |
memset((char *)v28 + 4, 0, 0xFF4ui64); | |
LODWORD(v28[10]) = 2000; | |
LODWORD(v28[0]) = 88; | |
v12 = (BOOL (__stdcall *)(HANDLE, DWORD64, ULONG, PDWORD64, PSYMBOL_INFOW))qword_140027250; | |
if ( !qword_140027250 ) | |
{ | |
SymFromInlineContextW = (BOOL (__stdcall *)(HANDLE, DWORD64, ULONG, PDWORD64, PSYMBOL_INFOW))GetProcAddress( | |
hModule, | |
"SymFromInlineContextW"); | |
if ( !SymFromInlineContextW ) | |
sub_14001CC50( | |
(__int64)"called `Option::unwrap()` on a `None` valueinternal error: entered unreachable code/rustc/90c541806f2" | |
"3a127002de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
43i64, | |
(__int64)&off_1400207E8); | |
v12 = SymFromInlineContextW; | |
qword_140027250 = (__int64)SymFromInlineContextW; | |
} | |
v42 = a2; | |
v41 = a3; | |
CurrentProcess = GetCurrentProcess(); | |
v15 = 0i64; | |
v16 = v10 == 0; | |
v17 = v10 - 1; | |
if ( !v16 ) | |
v15 = v17; | |
*(_QWORD *)&v29[0] = 0i64; | |
v39 = v15; | |
if ( ((unsigned int (__fastcall *)(HANDLE, __int64, _QWORD, __int128 *, _QWORD *))v12)( | |
CurrentProcess, | |
v15, | |
v11, | |
v29, | |
v28) == 1 ) | |
{ | |
v43 = v11; | |
v18 = LODWORD(v28[10]) - 1i64; | |
if ( HIDWORD(v28[9]) < v18 ) | |
v18 = HIDWORD(v28[9]); | |
memset(v29, 0, sizeof(v29)); | |
v19 = (_QWORD *)((char *)&v28[10] + 2 * v18 + 4); | |
if ( (_QWORD *)((char *)&v28[10] + 4) != v19 ) | |
{ | |
if ( (WORD2(v28[10]) & 0xF800) == 55296 | |
&& WORD2(v28[10]) <= 0xDBFFu | |
&& (_QWORD *)((char *)&v28[10] + 6) != v19 | |
&& (unsigned __int16)(HIWORD(v28[10]) + 0x2000) < 0xFC00u ) | |
{ | |
v44 = HIWORD(v28[10]); | |
} | |
JUMPOUT(0x14000E157i64); | |
} | |
v30 = 0i64; | |
v31 = 0i64; | |
v32 = 0i64; | |
LODWORD(v30) = 40; | |
v20 = (BOOL (__stdcall *)(HANDLE, DWORD64, ULONG, DWORD64, PDWORD, PIMAGEHLP_LINEW64))qword_140027258; | |
if ( !qword_140027258 ) | |
{ | |
SymGetLineFromInlineContextW = (BOOL (__stdcall *)(HANDLE, DWORD64, ULONG, DWORD64, PDWORD, PIMAGEHLP_LINEW64))GetProcAddress(hModule, "SymGetLineFromInlineContextW"); | |
if ( !SymGetLineFromInlineContextW ) | |
sub_14001CC50( | |
(__int64)"called `Option::unwrap()` on a `None` valueinternal error: entered unreachable code/rustc/90c541806" | |
"f23a127002de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
43i64, | |
(__int64)&off_1400207E8); | |
v20 = SymGetLineFromInlineContextW; | |
qword_140027258 = (__int64)SymGetLineFromInlineContextW; | |
} | |
v22 = GetCurrentProcess(); | |
LODWORD(v33[0]) = 0; | |
v23 = 0i64; | |
v24 = ((__int64 (__fastcall *)(HANDLE, __int64, _QWORD, _QWORD, __int64 *, __int128 *))v20)( | |
v22, | |
v39, | |
v43, | |
0i64, | |
v33, | |
&v30); | |
if ( v24 == 1 ) | |
{ | |
v24 = v31; | |
v25 = -1i64; | |
v8 = *((_QWORD *)&v31 + 1); | |
do | |
v9 = *(_WORD *)(*((_QWORD *)&v31 + 1) + 2 * v25++ + 2) == 0; | |
while ( !v9 ); | |
v26 = 1; | |
v23 = 1i64; | |
} | |
else | |
{ | |
v26 = 0; | |
} | |
v33[0] = (__int64)v29; | |
v33[1] = 0i64; | |
v33[2] = v28[7]; | |
v34 = v26; | |
v35 = v24; | |
v36 = v23; | |
v37 = v8; | |
v38 = v25; | |
JUMPOUT(0x14000E2DCi64); | |
} | |
LODWORD(v6) = ReleaseMutex(hMutex); | |
} | |
return v6; | |
} | |
// 14000DEC4: control flows out of bounds to 14000DEC8 | |
// 14000E155: control flows out of bounds to 14000E157 | |
// 14000E2D5: control flows out of bounds to 14000E2DC | |
// 14000E155: conditional instruction was optimized away because rdi.8 is in (1..4) | |
// 14000DEB3: variable 'v7' is possibly undefined | |
// 14000E2D5: variable 'v25' is possibly undefined | |
// 1400207E8: using guessed type char *off_1400207E8; | |
// 140027250: using guessed type __int64 qword_140027250; | |
// 140027258: using guessed type __int64 qword_140027258; | |
//----- (000000014000E3A0) ---------------------------------------------------- | |
__int64 __fastcall sub_14000E3A0(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
unsigned __int16 v3; // bp | |
BOOL (__stdcall *v7)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFOW); // r14 | |
BOOL (__stdcall *SymFromAddrW)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFOW); // rax | |
HANDLE CurrentProcess; // rax | |
__int128 *v10; // r15 | |
__int64 result; // rax | |
unsigned __int64 v12; // rcx | |
char *v13; // r12 | |
char *v14; // r13 | |
unsigned __int64 v15; // r8 | |
unsigned __int64 v16; // r14 | |
unsigned __int16 v17; // ax | |
unsigned __int64 v18; // rcx | |
__int16 v19; // si | |
unsigned __int64 v20; // rdi | |
unsigned __int16 v21; // dx | |
unsigned __int64 v22; // rbx | |
BOOL (__stdcall *v23)(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64); // r15 | |
BOOL (__stdcall *SymGetLineFromAddrW64)(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64); // rax | |
HANDLE v25; // rax | |
int v26; // eax | |
__int64 v27; // rdx | |
__int64 v28; // rcx | |
int v30; // r9d | |
__int64 v31; // r8 | |
__int64 v32; // [rsp+20h] [rbp-11B8h] | |
__int64 v33; // [rsp+28h] [rbp-11B0h] | |
__int64 v34; // [rsp+30h] [rbp-11A8h] | |
__int64 v35[3]; // [rsp+38h] [rbp-11A0h] BYREF | |
int v36; // [rsp+50h] [rbp-1188h] | |
int v37; // [rsp+54h] [rbp-1184h] | |
__int64 v38; // [rsp+58h] [rbp-1180h] | |
__int64 v39; // [rsp+60h] [rbp-1178h] | |
__int64 v40; // [rsp+68h] [rbp-1170h] | |
__int128 v41; // [rsp+70h] [rbp-1168h] BYREF | |
__int128 v42; // [rsp+80h] [rbp-1158h] | |
__int64 v43; // [rsp+90h] [rbp-1148h] | |
__int128 v44[16]; // [rsp+A0h] [rbp-1138h] BYREF | |
_QWORD v45[519]; // [rsp+1A0h] [rbp-1038h] BYREF | |
memset((char *)v45 + 4, 0, 0xFF4ui64); | |
LODWORD(v45[10]) = 2000; | |
LODWORD(v45[0]) = 88; | |
v7 = (BOOL (__stdcall *)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFOW))qword_140027238; | |
if ( !qword_140027238 ) | |
{ | |
SymFromAddrW = (BOOL (__stdcall *)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFOW))GetProcAddress(hModule, "SymFromAddrW"); | |
if ( !SymFromAddrW ) | |
goto LABEL_41; | |
v7 = SymFromAddrW; | |
qword_140027238 = (__int64)SymFromAddrW; | |
} | |
CurrentProcess = GetCurrentProcess(); | |
*(_QWORD *)&v44[0] = 0i64; | |
v10 = v44; | |
result = ((__int64 (__fastcall *)(HANDLE, __int64, __int128 *, _QWORD *))v7)(CurrentProcess, a1, v44, v45); | |
if ( (_DWORD)result != 1 ) | |
return result; | |
v32 = a1; | |
v33 = a2; | |
v34 = a3; | |
v12 = LODWORD(v45[10]) - 1i64; | |
if ( HIDWORD(v45[9]) < v12 ) | |
v12 = HIDWORD(v45[9]); | |
v13 = (char *)&v45[10] + 4; | |
memset(v44, 0, sizeof(v44)); | |
v14 = (char *)&v45[10] + 2 * v12 + 4; | |
v15 = 256i64; | |
v16 = 0i64; | |
LABEL_9: | |
if ( v13 != v14 ) | |
{ | |
v17 = *(_WORD *)v13; | |
v13 += 2; | |
while ( 1 ) | |
{ | |
if ( (v17 & 0xF800) == 55296 ) | |
{ | |
LODWORD(v18) = 65533; | |
if ( v17 > 0xDBFFu ) | |
{ | |
v19 = 0; | |
v20 = 3i64; | |
goto LABEL_24; | |
} | |
if ( v13 == v14 ) | |
{ | |
v19 = 0; | |
v13 = v14; | |
v20 = 3i64; | |
goto LABEL_24; | |
} | |
v21 = *(_WORD *)v13; | |
v13 += 2; | |
v19 = 1; | |
if ( (unsigned __int16)(v21 + 0x2000) < 0xFC00u ) | |
{ | |
v3 = v21; | |
v20 = 3i64; | |
goto LABEL_24; | |
} | |
v18 = ((((unsigned __int64)(v17 & 0x3FF) << 26) | ((unsigned __int64)(v21 & 0x3FF) << 16)) + 0x100000000i64) >> 16; | |
if ( (unsigned int)v18 < 0x80 ) | |
{ | |
LABEL_15: | |
v20 = 1i64; | |
LABEL_23: | |
v19 = 0; | |
goto LABEL_24; | |
} | |
} | |
else | |
{ | |
LODWORD(v18) = v17; | |
if ( v17 < 0x80u ) | |
goto LABEL_15; | |
} | |
if ( (unsigned int)v18 <= 0x7FF ) | |
{ | |
v20 = 2i64; | |
goto LABEL_23; | |
} | |
v20 = 4i64; | |
v19 = 0; | |
if ( (unsigned int)v18 <= 0xFFFF ) | |
v20 = 3i64; | |
LABEL_24: | |
v22 = v15 - v20; | |
if ( v15 <= v20 ) | |
break; | |
sub_140001F40(v18, v10, v15); | |
v10 = (__int128 *)((char *)v10 + v20); | |
v16 += v20; | |
v15 = v22; | |
if ( !v19 ) | |
goto LABEL_9; | |
v17 = v3; | |
} | |
} | |
if ( v16 >= 0x101 ) | |
sub_14001D040(v16, 256i64, (__int64)&off_140020728); | |
v41 = 0i64; | |
v42 = 0i64; | |
v43 = 0i64; | |
LODWORD(v41) = 40; | |
v23 = (BOOL (__stdcall *)(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64))qword_140027240; | |
if ( !qword_140027240 ) | |
{ | |
SymGetLineFromAddrW64 = (BOOL (__stdcall *)(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64))GetProcAddress( | |
hModule, | |
"SymGetLineFromAddrW64"); | |
if ( SymGetLineFromAddrW64 ) | |
{ | |
v23 = SymGetLineFromAddrW64; | |
qword_140027240 = (__int64)SymGetLineFromAddrW64; | |
goto LABEL_33; | |
} | |
LABEL_41: | |
sub_14001CC50( | |
(__int64)"called `Option::unwrap()` on a `None` valueinternal error: entered unreachable code/rustc/90c541806f23a12" | |
"7002de5b4038be731ba1458ca\\library\\alloc\\src\\vec\\mod.rs", | |
43i64, | |
(__int64)&off_1400207E8); | |
} | |
LABEL_33: | |
v25 = GetCurrentProcess(); | |
LODWORD(v35[0]) = 0; | |
v26 = ((__int64 (__fastcall *)(HANDLE, __int64, __int64 *, __int128 *))v23)(v25, v32, v35, &v41); | |
if ( v26 == 1 ) | |
{ | |
v26 = v42; | |
v27 = -1i64; | |
v28 = *((_QWORD *)&v42 + 1); | |
while ( *(_WORD *)(*((_QWORD *)&v42 + 1) + 2 * v27++ + 2) != 0 ) | |
; | |
v30 = 1; | |
v31 = 1i64; | |
} | |
else | |
{ | |
v31 = 0i64; | |
v30 = 0; | |
} | |
v35[0] = (__int64)v44; | |
v35[1] = v16; | |
v35[2] = v45[7]; | |
v36 = v30; | |
v37 = v26; | |
v38 = v31; | |
v39 = v28; | |
v40 = v27; | |
return (*(__int64 (__fastcall **)(__int64, __int64 *))(v34 + 32))(v33, v35); | |
} | |
// 14000E530: variable 'v3' is possibly undefined | |
// 14000E76D: variable 'v28' is possibly undefined | |
// 14000E772: variable 'v27' is possibly undefined | |
// 140020728: using guessed type void *off_140020728; | |
// 1400207E8: using guessed type char *off_1400207E8; | |
// 140027238: using guessed type __int64 qword_140027238; | |
// 140027240: using guessed type __int64 qword_140027240; | |
//----- (000000014000E7D0) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
void sub_14000E7D0() | |
{ | |
JUMPOUT(0x14000E7F0i64); | |
} | |
// 14000E80F: positive sp value 38 has been found | |
// 14000E7EC: control flows out of bounds to 14000E7F0 | |
//----- (000000014000E850) ---------------------------------------------------- | |
_QWORD *__fastcall sub_14000E850(_QWORD *a1, __int64 a2) | |
{ | |
__int64 v2; // rax | |
__int64 v3; // r8 | |
if ( !a2 || *(void ****)a2 != &off_140027080 ) | |
{ | |
sub_140009BE0(); | |
BUG(); | |
} | |
v2 = *(_QWORD *)(a2 + 8); | |
v3 = *(_QWORD *)(a2 + 16); | |
*(_QWORD *)(a2 + 8) = 0i64; | |
if ( !v2 ) | |
JUMPOUT(0x14000E89Fi64); | |
*a1 = v2; | |
a1[1] = v3; | |
return a1; | |
} | |
// 14000E886: control flows out of bounds to 14000E89F | |
// 140027080: using guessed type void **off_140027080; | |
//----- (000000014000E8E0) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14000E8E0(__int64 a1, __int64 a2) | |
{ | |
__int64 v2; // rax | |
__int64 v3; // rdx | |
__int64 pExceptionObject[3]; // [rsp+20h] [rbp-18h] BYREF | |
v2 = (*(__int64 (**)(void))(a2 + 24))(); | |
pExceptionObject[0] = (__int64)&off_140027080; | |
pExceptionObject[1] = v2; | |
pExceptionObject[2] = v3; | |
_InterlockedExchange(&pThrowInfo.pmfnUnwind, (unsigned int)sub_14000E960 - 0x40000000); | |
_InterlockedExchange(&pThrowInfo.pCatchableTypeArray, (unsigned int)&unk_140027058 - 0x40000000); | |
_InterlockedExchange(&dword_14002705C, (unsigned int)&unk_140027060 - 0x40000000); | |
_InterlockedExchange(dword_140027064, (unsigned int)&off_140027080 - 0x40000000); | |
_InterlockedExchange(&dword_140027078, (unsigned int)sub_14000E9C0 - 0x40000000); | |
CxxThrowException(pExceptionObject, &pThrowInfo); | |
} | |
// 14000E8F8: variable 'v3' is possibly undefined | |
// 14002705C: using guessed type int dword_14002705C; | |
// 140027064: using guessed type int dword_140027064[5]; | |
// 140027078: using guessed type int dword_140027078; | |
// 140027080: using guessed type void **off_140027080; | |
//----- (000000014000E960) ---------------------------------------------------- | |
__int64 __fastcall sub_14000E960(__int64 a1) | |
{ | |
__int64 result; // rax | |
result = *(_QWORD *)(a1 + 8); | |
if ( result ) | |
JUMPOUT(0x14000E98Di64); | |
return result; | |
} | |
// 14000E989: control flows out of bounds to 14000E98D | |
//----- (000000014000E9C0) ---------------------------------------------------- | |
void __noreturn sub_14000E9C0() | |
{ | |
__int64 v0[6]; // [rsp+28h] [rbp-30h] BYREF | |
v0[2] = (__int64)&off_140020888; | |
v0[3] = 1i64; | |
v0[0] = 0i64; | |
v0[4] = (__int64)"called `Option::unwrap()` on a `None` valuelibrary\\panic_unwind\\src\\seh.rs"; | |
v0[5] = 0i64; | |
sub_14001CBB0((__int64)v0, (__int64)&off_140020898); | |
} | |
// 140020888: using guessed type char *off_140020888; | |
// 140020898: using guessed type void *off_140020898; | |
//----- (000000014000EA10) ---------------------------------------------------- | |
__int64 __fastcall sub_14000EA10(unsigned __int8 **a1) | |
{ | |
unsigned __int8 *v1; // rdx | |
unsigned __int8 *v2; // rax | |
bool v3; // cf | |
unsigned __int64 v4; // rdx | |
__int64 result; // rax | |
unsigned __int8 *v6; // r8 | |
unsigned __int8 *v7; // r10 | |
int v8; // r9d | |
int v9; // r8d | |
unsigned int v10; // eax | |
int v11; // r9d | |
unsigned int v12; // r9d | |
unsigned int v13; // r9d | |
int v14; // r8d | |
unsigned int v15; // r8d | |
char v16; // r9 | |
unsigned __int64 v17; // r8 | |
char v18; // al | |
char *v19; // rcx | |
char v20; // r9 | |
char *v21; // r8 | |
unsigned __int8 *v22; // r11 | |
int v23; // ebx | |
int v24; // edi | |
int v25; // ebx | |
int v26; // ebx | |
unsigned int v27; // ebx | |
int v28; // edi | |
unsigned int v29; // edi | |
unsigned __int8 *v30; // r9 | |
int v31; // edi | |
int v32; // esi | |
int v33; // edi | |
int v34; // edi | |
unsigned int v35; // edi | |
int v36; // esi | |
unsigned int v37; // esi | |
int v38; // edx | |
int v39; // ecx | |
unsigned int v40; // eax | |
int v41; // edx | |
unsigned int v42; // edx | |
unsigned int v43; // edx | |
int v44; // ecx | |
unsigned int v45; // ecx | |
int v46; // eax | |
int v47; // r11d | |
int v48; // r10d | |
char v49; // r9 | |
bool v50; // r8 | |
char v51; // [rsp+24h] [rbp-A4h] BYREF | |
__int16 v52; // [rsp+25h] [rbp-A3h] | |
char v53; // [rsp+27h] [rbp-A1h] | |
char *v54; // [rsp+28h] [rbp-A0h] BYREF | |
unsigned __int64 v55; // [rsp+30h] [rbp-98h] | |
unsigned __int64 v56; // [rsp+38h] [rbp-90h] BYREF | |
__int64 *v57; // [rsp+40h] [rbp-88h] BYREF | |
char *v58; // [rsp+48h] [rbp-80h] | |
__int64 *v59; // [rsp+50h] [rbp-78h] | |
char (__fastcall *v60)(__int64, __int64 *); // [rsp+58h] [rbp-70h] | |
unsigned __int64 *v61; // [rsp+60h] [rbp-68h] | |
__int64 (__fastcall *v62)(unsigned __int64 *, __int64); // [rsp+68h] [rbp-60h] | |
__int64 v63[2]; // [rsp+70h] [rbp-58h] BYREF | |
__int64 v64[9]; // [rsp+80h] [rbp-48h] BYREF | |
v1 = a1[1]; | |
v2 = a1[4]; | |
v3 = v1 < v2; | |
v4 = v1 - v2; | |
if ( v3 ) | |
return 1114113i64; | |
v6 = *a1; | |
v7 = &v2[(_QWORD)*a1]; | |
*a1 = v7; | |
a1[1] = (unsigned __int8 *)v4; | |
if ( v2 != (unsigned __int8 *)2 ) | |
sub_14001CC50((__int64)&unk_140020F08, 40i64, (__int64)&off_140020F30); | |
v8 = *v6; | |
v9 = v6[1]; | |
LOBYTE(v10) = v8 - 48; | |
if ( (unsigned int)(v8 - 48) >= 0xA ) | |
{ | |
v11 = (v8 | 0x20) - 97; | |
v3 = __CFADD__(v11, 10); | |
v12 = v11 + 10; | |
v10 = -1; | |
if ( !v3 ) | |
v10 = v12; | |
if ( v10 >= 0x10 ) | |
goto LABEL_71; | |
} | |
LOBYTE(v13) = v9 - 48; | |
if ( (unsigned int)(v9 - 48) >= 0xA ) | |
{ | |
v14 = (v9 | 0x20) - 97; | |
v3 = __CFADD__(v14, 10); | |
v15 = v14 + 10; | |
v13 = -1; | |
if ( !v3 ) | |
v13 = v15; | |
if ( v13 >= 0x10 ) | |
goto LABEL_71; | |
} | |
v16 = (16 * v10) | v13; | |
if ( v16 < 0 ) | |
{ | |
result = 1114112i64; | |
if ( (unsigned __int8)v16 < 0xC0u ) | |
return result; | |
if ( (unsigned __int8)v16 >= 0xE0u ) | |
{ | |
if ( (unsigned __int8)v16 < 0xF0u ) | |
{ | |
v17 = 3i64; | |
v18 = 1; | |
LABEL_26: | |
v51 = v16; | |
v52 = 0; | |
v53 = 0; | |
v54 = &v51; | |
v55 = v17; | |
if ( v4 < 2 ) | |
return 1114112i64; | |
v22 = v7 + 2; | |
*a1 = v7 + 2; | |
a1[1] = (unsigned __int8 *)(v4 - 2); | |
v23 = *v7; | |
v24 = v7[1]; | |
LOBYTE(v7) = v23 - 48; | |
if ( (unsigned int)(v23 - 48) < 0xA ) | |
goto LABEL_34; | |
v25 = (v23 | 0x20) - 97; | |
v3 = __CFADD__(v25, 10); | |
v26 = v25 + 10; | |
LODWORD(v7) = -1; | |
if ( !v3 ) | |
LODWORD(v7) = v26; | |
if ( (unsigned int)v7 <= 0xF ) | |
{ | |
LABEL_34: | |
LOBYTE(v27) = v24 - 48; | |
if ( (unsigned int)(v24 - 48) < 0xA ) | |
goto LABEL_35; | |
v28 = (v24 | 0x20) - 97; | |
v3 = __CFADD__(v28, 10); | |
v29 = v28 + 10; | |
v27 = -1; | |
if ( !v3 ) | |
v27 = v29; | |
if ( v27 <= 0xF ) | |
{ | |
LABEL_35: | |
LOBYTE(v52) = (16 * (_BYTE)v7) | v27; | |
if ( (unsigned __int8)v16 < 0xE0u ) | |
goto LABEL_14; | |
if ( v4 - 2 < 2 ) | |
return 1114112i64; | |
v30 = v22 + 2; | |
*a1 = v22 + 2; | |
a1[1] = (unsigned __int8 *)(v4 - 4); | |
v31 = *v22; | |
v32 = v22[1]; | |
LOBYTE(v22) = v31 - 48; | |
if ( (unsigned int)(v31 - 48) < 0xA ) | |
goto LABEL_44; | |
v33 = (v31 | 0x20) - 97; | |
v3 = __CFADD__(v33, 10); | |
v34 = v33 + 10; | |
LODWORD(v22) = -1; | |
if ( !v3 ) | |
LODWORD(v22) = v34; | |
if ( (unsigned int)v22 <= 0xF ) | |
{ | |
LABEL_44: | |
LOBYTE(v35) = v32 - 48; | |
if ( (unsigned int)(v32 - 48) < 0xA ) | |
goto LABEL_45; | |
v36 = (v32 | 0x20) - 97; | |
v3 = __CFADD__(v36, 10); | |
v37 = v36 + 10; | |
v35 = -1; | |
if ( !v3 ) | |
v35 = v37; | |
if ( v35 <= 0xF ) | |
{ | |
LABEL_45: | |
HIBYTE(v52) = (16 * (_BYTE)v22) | v35; | |
if ( v18 ) | |
goto LABEL_14; | |
if ( v4 - 4 < 2 ) | |
return 1114112i64; | |
*a1 = v30 + 2; | |
a1[1] = (unsigned __int8 *)(v4 - 6); | |
v38 = *v30; | |
v39 = v30[1]; | |
LOBYTE(v40) = v38 - 48; | |
if ( (unsigned int)(v38 - 48) < 0xA ) | |
goto LABEL_54; | |
v41 = (v38 | 0x20) - 97; | |
v3 = __CFADD__(v41, 10); | |
v42 = v41 + 10; | |
v40 = -1; | |
if ( !v3 ) | |
v40 = v42; | |
if ( v40 <= 0xF ) | |
{ | |
LABEL_54: | |
LOBYTE(v43) = v39 - 48; | |
if ( (unsigned int)(v39 - 48) < 0xA ) | |
goto LABEL_55; | |
v44 = (v39 | 0x20) - 97; | |
v3 = __CFADD__(v44, 10); | |
v45 = v44 + 10; | |
v43 = -1; | |
if ( !v3 ) | |
v43 = v45; | |
if ( v43 <= 0xF ) | |
{ | |
LABEL_55: | |
v53 = (16 * v40) | v43; | |
goto LABEL_14; | |
} | |
} | |
} | |
} | |
} | |
} | |
LABEL_71: | |
sub_14001CC50((__int64)"called `Option::unwrap()` on a `None` value", 43i64, (__int64)&off_140020F48); | |
} | |
if ( (unsigned __int8)v16 >= 0xF8u ) | |
return result; | |
v17 = 4i64; | |
} | |
else | |
{ | |
v17 = 2i64; | |
} | |
v18 = 0; | |
goto LABEL_26; | |
} | |
v51 = v16; | |
v52 = 0; | |
v53 = 0; | |
v54 = &v51; | |
v55 = 1i64; | |
v17 = 1i64; | |
LABEL_14: | |
sub_140018DE0((__int64)&v57, (__int64)&v51, v17); | |
if ( v57 ) | |
return 1114112i64; | |
v63[0] = (__int64)v58; | |
v63[1] = (__int64)v59; | |
v19 = (char *)v59 + (_QWORD)v58; | |
if ( v59 ) | |
{ | |
v20 = *v58; | |
if ( *v58 < 0 ) | |
{ | |
v46 = v20 & 0x1F; | |
v47 = v58[1] & 0x3F; | |
if ( (unsigned __int8)v20 <= 0xDFu ) | |
{ | |
v21 = v58 + 2; | |
result = v47 | (unsigned int)(v46 << 6); | |
} | |
else | |
{ | |
v48 = (v47 << 6) | v58[2] & 0x3F; | |
if ( (unsigned __int8)v20 < 0xF0u ) | |
{ | |
v21 = v58 + 3; | |
result = v48 | (unsigned int)(v46 << 12); | |
} | |
else | |
{ | |
v21 = v58 + 4; | |
result = (v48 << 6) | v58[3] & 0x3F | ((unsigned __int8)(v20 & 7) << 18); | |
} | |
} | |
} | |
else | |
{ | |
v21 = v58 + 1; | |
result = (unsigned __int8)*v58; | |
} | |
} | |
else | |
{ | |
result = 1114112i64; | |
v21 = v58; | |
} | |
if ( v21 == v19 ) | |
{ | |
v50 = 1; | |
if ( (_DWORD)result == 1114112 ) | |
goto LABEL_73; | |
} | |
else | |
{ | |
v49 = *v21; | |
if ( *v21 >= 0 | |
|| (unsigned __int8)v49 < 0xF0u | |
|| (v50 = (((v49 & 7) << 18) | ((v21[1] & 0x3F) << 12) | ((v21[2] & 0x3F) << 6) | v21[3] & 0x3F) == 1114112, | |
(_DWORD)result == 1114112) ) | |
{ | |
LABEL_73: | |
v56 = sub_14000F5C0((__int64)v19, v58); | |
v57 = (__int64 *)&v54; | |
v58 = (char *)sub_14000F010; | |
v59 = v63; | |
v60 = sub_14000EF30; | |
v61 = &v56; | |
v62 = sub_14001AD00; | |
v64[2] = (__int64)&off_140020FD0; | |
v64[3] = 4i64; | |
v64[0] = 0i64; | |
v64[4] = (__int64)&v57; | |
v64[5] = 3i64; | |
sub_14001CBB0((__int64)v64, (__int64)&off_140021010); | |
} | |
} | |
if ( !v50 ) | |
goto LABEL_73; | |
return result; | |
} | |
// 140020F30: using guessed type char *off_140020F30; | |
// 140020F48: using guessed type char *off_140020F48; | |
// 140020FD0: using guessed type void *off_140020FD0; | |
// 140021010: using guessed type char *off_140021010; | |
//----- (000000014000EED0) ---------------------------------------------------- | |
__int64 __fastcall sub_14000EED0(unsigned __int8 **a1, __int64 a2) | |
{ | |
unsigned __int8 *v3; // rdi | |
v3 = *a1; | |
if ( sub_140017C50(a2) ) | |
return sub_14001A310(v3, a2); | |
if ( sub_140017C60(a2) ) | |
return sub_14001A3B0(v3, a2); | |
return sub_14001AA00(v3, a2); | |
} | |
//----- (000000014000EF30) ---------------------------------------------------- | |
char __fastcall sub_14000EF30(__int64 a1, __int64 *a2) | |
{ | |
return sub_140017EB0(*(char **)a1, *(_QWORD *)(a1 + 8), a2); | |
} | |
//----- (000000014000EF50) ---------------------------------------------------- | |
char __fastcall sub_14000EF50(__int64 *a1, __int64 *a2) | |
{ | |
__int64 v2; // rcx | |
__int128 v4; // [rsp+28h] [rbp-30h] BYREF | |
__int64 v5; // [rsp+38h] [rbp-20h] | |
int v6; // [rsp+40h] [rbp-18h] | |
__int64 *v7; // [rsp+48h] [rbp-10h] | |
int v8; // [rsp+50h] [rbp-8h] | |
v2 = *a1; | |
if ( *(_QWORD *)v2 ) | |
return sub_14000F7F0(v2, a2); | |
v4 = *(_OWORD *)(v2 + 8); | |
v5 = 0i64; | |
v6 = 0; | |
v7 = a2; | |
v8 = 0; | |
LOBYTE(a2) = 1; | |
return sub_140012370((__int64)&v4, (unsigned int)a2); | |
} | |
//----- (000000014000EFA0) ---------------------------------------------------- | |
__int64 __fastcall sub_14000EFA0(__int64 a1, __int64 *a2) | |
{ | |
return sub_140017890(a2, byte_1400208B0, 2ui64); | |
} | |
// 1400208B0: using guessed type unsigned __int8 byte_1400208B0[8]; | |
//----- (000000014000EFC0) ---------------------------------------------------- | |
char *__fastcall sub_14000EFC0(unsigned __int64 a1, char *a2, unsigned __int64 a3, __int64 a4) | |
{ | |
if ( a1 ) | |
{ | |
if ( a3 <= a1 ) | |
{ | |
if ( a3 != a1 ) | |
LABEL_4: | |
sub_14001D0B0(a2, a3, a1, a3, a4); | |
} | |
else if ( a2[a1] <= -65 ) | |
{ | |
goto LABEL_4; | |
} | |
} | |
return &a2[a1]; | |
} | |
//----- (000000014000F010) ---------------------------------------------------- | |
char __fastcall sub_14000F010(__int64 *a1, _QWORD *a2) | |
{ | |
__int64 v2; // r14 | |
__int64 v3; // r15 | |
__int64 v5; // [rsp+28h] [rbp-40h] BYREF | |
char v6[56]; // [rsp+30h] [rbp-38h] BYREF | |
v2 = *a1; | |
v3 = a1[1]; | |
sub_140017E50((__int64)v6, a2); | |
for ( ; v3; --v3 ) | |
{ | |
v5 = v2++; | |
sub_140017010(v6, (__int64)&v5, (__int64)&off_1400208E8); | |
} | |
return sub_140017030((__int64)v6); | |
} | |
// 1400208E8: using guessed type __int64 (__fastcall *off_1400208E8)(); | |
//----- (000000014000F090) ---------------------------------------------------- | |
char __fastcall sub_14000F090(__int64 *a1, unsigned int a2) | |
{ | |
__int64 v2; // rcx | |
unsigned __int64 v3; // r8 | |
bool v4; // al | |
bool v5; // cf | |
__int64 v6; // rdx | |
char result; // al | |
v2 = *a1; | |
if ( a2 >= 0x80 ) | |
{ | |
if ( a2 >= 0x800 ) | |
{ | |
if ( a2 >= 0x10000 ) | |
v3 = 4i64; | |
else | |
v3 = 3i64; | |
} | |
else | |
{ | |
v3 = 2i64; | |
} | |
} | |
else | |
{ | |
v3 = 1i64; | |
} | |
v4 = *(_QWORD *)v2 != 0i64; | |
v5 = *(_QWORD *)(v2 + 8) < v3; | |
*(_QWORD *)(v2 + 8) -= v3; | |
v6 = v4 | (unsigned __int8)v5; | |
*(_QWORD *)v2 = v6; | |
result = 1; | |
if ( !(_BYTE)v6 ) | |
return sub_140017BE0(*(_QWORD **)(v2 + 16)); | |
return result; | |
} | |
//----- (000000014000F170) ---------------------------------------------------- | |
bool __fastcall sub_14000F170(__int64 *a1, __int128 *a2) | |
{ | |
__int64 v2; // rax | |
__int128 v3; // xmm0 | |
__int128 v4; // xmm1 | |
__int64 v6; // [rsp+28h] [rbp-40h] BYREF | |
__int128 v7[3]; // [rsp+30h] [rbp-38h] BYREF | |
v2 = *a1; | |
v3 = *a2; | |
v4 = a2[1]; | |
v7[2] = a2[2]; | |
v7[1] = v4; | |
v7[0] = v3; | |
v6 = v2; | |
return sub_1400172A0((__int64)&v6, (__int64)&off_1400208B8, (__int64 *)v7); | |
} | |
// 1400208B8: using guessed type __int64 (__fastcall *off_1400208B8)(); | |
//----- (000000014000F1C0) ---------------------------------------------------- | |
char __fastcall sub_14000F1C0(_QWORD **a1, __int64 a2, unsigned __int64 a3) | |
{ | |
_QWORD *v3; // rax | |
bool v4; // cl | |
bool v5; // cf | |
__int64 v6; // rcx | |
v3 = *a1; | |
v4 = **a1 != 0i64; | |
v5 = v3[1] < a3; | |
v3[1] -= a3; | |
v6 = v4 | (unsigned __int8)v5; | |
*v3 = v6; | |
if ( (_BYTE)v6 ) | |
return 1; | |
else | |
return sub_140017BE0((_QWORD *)v3[2]); | |
} | |
//----- (000000014000F1F0) ---------------------------------------------------- | |
void __fastcall sub_14000F1F0(_QWORD *a1, __int64 a2) | |
{ | |
unsigned __int64 v2; // rax | |
unsigned __int64 v3; // r8 | |
char *v4; // rsi | |
unsigned __int64 v5; // r11 | |
unsigned __int64 v6; // r9 | |
unsigned __int64 v7; // r10 | |
unsigned __int64 v8; // r13 | |
__int64 v9; // r14 | |
__int64 v10; // rcx | |
unsigned __int64 v11; // r12 | |
__int64 v12; // r10 | |
unsigned __int64 v13; // r15 | |
char v14; // r10 | |
char *v15; // rax | |
unsigned __int64 v16; // r9 | |
unsigned __int64 v17; // r9 | |
unsigned __int64 v18; // r9 | |
unsigned __int64 v19; // rbx | |
unsigned __int64 v20; // r10 | |
bool v21; // zf | |
unsigned __int64 v22; // rbx | |
unsigned __int64 v23; // r9 | |
__int64 v24; // r10 | |
char v25; // bl | |
unsigned int v26; // r9d | |
int v27; // r11d | |
int v28; // esi | |
int v29; // r9d | |
unsigned __int64 v30; // r9 | |
__int64 v31; // rax | |
unsigned __int64 v32; // r9 | |
char **v33; // r8 | |
__int64 v34; // rcx | |
unsigned __int64 v35; // [rsp+28h] [rbp-70h] | |
_QWORD *v36; // [rsp+30h] [rbp-68h] | |
unsigned __int64 v37; // [rsp+38h] [rbp-60h] | |
unsigned __int64 v38; // [rsp+40h] [rbp-58h] | |
unsigned __int64 v39; // [rsp+50h] [rbp-48h] | |
if ( *(_QWORD *)(a2 + 32) ) | |
{ | |
v2 = *(_QWORD *)(a2 + 8); | |
v3 = *(_QWORD *)(a2 + 72); | |
if ( v3 != v2 ) | |
{ | |
v36 = a1; | |
v4 = *(char **)a2; | |
v5 = *(_QWORD *)(a2 + 24); | |
v6 = v3 + v5 - 1; | |
v7 = *(_QWORD *)(a2 + 8); | |
if ( v6 < v2 ) | |
{ | |
v8 = *(_QWORD *)(a2 + 88); | |
v9 = *(_QWORD *)(a2 + 16); | |
v35 = v3 + v5; | |
v10 = *(_QWORD *)(a2 + 64); | |
v11 = *(_QWORD *)(a2 + 40); | |
v12 = *(_QWORD *)(a2 + 56); | |
v37 = v5 - v12; | |
v38 = v3 + v12; | |
v39 = v5 - 1; | |
v13 = v8; | |
v7 = *(_QWORD *)(a2 + 72); | |
while ( v3 == v7 ) | |
{ | |
if ( _bittest64(&v10, (unsigned __int8)v4[v6]) ) | |
{ | |
v18 = v13; | |
if ( v11 > v13 ) | |
v18 = v11; | |
if ( v8 == -1i64 ) | |
v18 = v11; | |
v19 = v18; | |
do | |
{ | |
if ( v19 >= v5 ) | |
{ | |
v22 = v13; | |
if ( v8 == -1i64 ) | |
v22 = 0i64; | |
v23 = v11; | |
do | |
{ | |
if ( v22 >= v23 ) | |
{ | |
*(_QWORD *)(a2 + 72) = v35; | |
if ( v8 != -1i64 ) | |
*(_QWORD *)(a2 + 88) = 0i64; | |
*v36 = 0i64; | |
v36[1] = v3; | |
v36[2] = v35; | |
return; | |
} | |
if ( --v23 >= v5 ) | |
sub_14001CD00(v23, v5, (__int64)&off_1400209D8); | |
v24 = v23 + v3; | |
if ( v23 + v3 >= v2 ) | |
{ | |
v33 = &off_1400209F0; | |
v34 = v24; | |
goto LABEL_77; | |
} | |
} | |
while ( *(_BYTE *)(v9 + v23) == v4[v24] ); | |
v7 = v38; | |
*(_QWORD *)(a2 + 72) = v38; | |
v17 = v37; | |
if ( v8 != -1i64 ) | |
goto LABEL_12; | |
goto LABEL_13; | |
} | |
if ( v3 + v19 >= v2 ) | |
{ | |
v32 = v3 + v18; | |
if ( v2 > v32 ) | |
v32 = v2; | |
v33 = &off_1400209C0; | |
v34 = v32; | |
LABEL_77: | |
sub_14001CD00(v34, v2, (__int64)v33); | |
} | |
v20 = v19 + 1; | |
v21 = *(_BYTE *)(v9 + v19) == (unsigned __int8)v4[v3 + v19]; | |
++v19; | |
} | |
while ( v21 ); | |
v7 = v3 - v11 + v20; | |
*(_QWORD *)(a2 + 72) = v7; | |
if ( v8 != -1i64 ) | |
{ | |
v17 = 0i64; | |
goto LABEL_12; | |
} | |
} | |
else | |
{ | |
v7 = v3 + v5; | |
*(_QWORD *)(a2 + 72) = v35; | |
if ( v8 != -1i64 ) | |
{ | |
v17 = 0i64; | |
v7 = v3 + v5; | |
LABEL_12: | |
*(_QWORD *)(a2 + 88) = v17; | |
v13 = v17; | |
} | |
} | |
LABEL_13: | |
v6 = v7 + v39; | |
if ( v7 + v39 >= v2 ) | |
{ | |
v7 = v2; | |
break; | |
} | |
} | |
} | |
if ( v7 ) | |
{ | |
v30 = v7; | |
a1 = v36; | |
do | |
{ | |
if ( v30 >= v2 ) | |
{ | |
if ( v30 == v2 ) | |
goto LABEL_58; | |
} | |
else if ( v4[v30] >= -64 ) | |
{ | |
v2 = v30; | |
goto LABEL_58; | |
} | |
++v30; | |
} | |
while ( v30 ); | |
v2 = 0i64; | |
} | |
else | |
{ | |
v2 = 0i64; | |
a1 = v36; | |
} | |
LABEL_58: | |
if ( v2 > v7 ) | |
v7 = v2; | |
*(_QWORD *)(a2 + 72) = v7; | |
goto LABEL_61; | |
} | |
LABEL_6: | |
*a1 = 2i64; | |
return; | |
} | |
if ( *(_BYTE *)(a2 + 58) ) | |
goto LABEL_6; | |
v14 = *(_BYTE *)(a2 + 56); | |
*(_BYTE *)(a2 + 56) = v14 ^ 1; | |
v3 = *(_QWORD *)(a2 + 40); | |
v15 = *(char **)a2; | |
v16 = *(_QWORD *)(a2 + 8); | |
if ( v3 ) | |
{ | |
if ( v16 <= v3 ) | |
{ | |
if ( v16 != v3 ) | |
LABEL_10: | |
sub_14001D0B0(v15, v16, v3, v16, (__int64)&off_140020AB8); | |
} | |
else if ( v15[v3] <= -65 ) | |
{ | |
goto LABEL_10; | |
} | |
} | |
if ( v3 == v16 ) | |
{ | |
if ( !v14 ) | |
{ | |
LABEL_67: | |
*(_BYTE *)(a2 + 58) = 1; | |
goto LABEL_6; | |
} | |
} | |
else | |
{ | |
v25 = v15[v3]; | |
v26 = (unsigned __int8)v25; | |
if ( v25 < 0 ) | |
{ | |
v27 = v25 & 0x1F; | |
v28 = v15[v3 + 1] & 0x3F; | |
if ( (unsigned __int8)v25 <= 0xDFu ) | |
{ | |
v26 = v28 | (v27 << 6); | |
} | |
else | |
{ | |
v29 = (v28 << 6) | v15[v3 + 2] & 0x3F; | |
if ( (unsigned __int8)v25 < 0xF0u ) | |
v26 = (v27 << 12) | v29; | |
else | |
v26 = ((v25 & 7) << 18) | (v29 << 6) | v15[v3 + 3] & 0x3F; | |
} | |
} | |
if ( !v14 ) | |
{ | |
if ( v26 != 1114112 ) | |
{ | |
v31 = 1i64; | |
if ( v26 >= 0x80 ) | |
{ | |
v31 = 2i64; | |
if ( v26 > 0x7FF ) | |
v31 = 4i64 - (v26 < 0x10000); | |
} | |
v2 = v3 + v31; | |
*(_QWORD *)(a2 + 40) = v2; | |
LABEL_61: | |
a1[1] = v3; | |
a1[2] = v2; | |
*a1 = 1i64; | |
return; | |
} | |
goto LABEL_67; | |
} | |
} | |
a1[1] = v3; | |
a1[2] = v3; | |
*a1 = 0i64; | |
} | |
// 1400209C0: using guessed type char *off_1400209C0; | |
// 1400209D8: using guessed type char *off_1400209D8; | |
// 1400209F0: using guessed type char *off_1400209F0; | |
// 140020AB8: using guessed type char *off_140020AB8; | |
//----- (000000014000F5C0) ---------------------------------------------------- | |
unsigned __int64 __fastcall sub_14000F5C0(__int64 a1, _BYTE *a2) | |
{ | |
unsigned __int64 v3; // rdx | |
_BYTE *v4; // rcx | |
unsigned __int64 result; // rax | |
_BYTE *v6; // r8 | |
unsigned __int64 v7; // r9 | |
__m128i v8; // xmm0 | |
__int64 v9; // rax | |
__m128i si128; // xmm2 | |
__m128i v11; // xmm3 | |
__m128i v12; // xmm1 | |
__m128i v13; // xmm4 | |
__m128i v14; // xmm5 | |
__m128i v15; // xmm1 | |
_BYTE *v16; // rcx | |
v3 = a1 - (_QWORD)a2; | |
v4 = a2; | |
if ( v3 >= 0x20 ) | |
return sub_140018FF0(a2, v3); | |
if ( !v3 ) | |
return 0i64; | |
if ( v3 < 4 ) | |
{ | |
result = 0i64; | |
v6 = v4; | |
LABEL_10: | |
v16 = &v4[v3]; | |
do | |
result += *v6++ >= 0xC0; | |
while ( v6 != v16 ); | |
return result; | |
} | |
v7 = v3 & 0x1C; | |
v6 = &a2[v3 & 0xFFFFFFFFFFFFFFFCui64]; | |
v8 = 0i64; | |
v9 = 0i64; | |
si128 = _mm_load_si128((const __m128i *)&xmmword_1400216E0); | |
v11 = _mm_load_si128((const __m128i *)&xmmword_1400216F0); | |
v12 = 0i64; | |
do | |
{ | |
v13 = _mm_cmpgt_epi8(_mm_cvtsi32_si128(*(unsigned __int16 *)&v4[v9]), si128); | |
v8 = _mm_add_epi64( | |
v8, | |
_mm_and_si128(_mm_shuffle_epi32(_mm_shufflelo_epi16(_mm_unpacklo_epi8(v13, v13), 212), 212), v11)); | |
v14 = _mm_cmpgt_epi8(_mm_cvtsi32_si128(*(unsigned __int16 *)&v4[v9 + 2]), si128); | |
v12 = _mm_add_epi64( | |
v12, | |
_mm_and_si128(_mm_shuffle_epi32(_mm_shufflelo_epi16(_mm_unpacklo_epi8(v14, v14), 212), 212), v11)); | |
v9 += 4i64; | |
} | |
while ( v7 != v9 ); | |
v15 = _mm_add_epi64(v12, v8); | |
result = _mm_add_epi64(_mm_shuffle_epi32(v15, 238), v15).m128i_u64[0]; | |
if ( v7 != v3 ) | |
goto LABEL_10; | |
return result; | |
} | |
// 14001942B: mask 0xFFFFFFFFFFFFFFFC is shortened because rdx.8 <= 0x1F | |
// 1400216E0: using guessed type __int128 xmmword_1400216E0; | |
// 1400216F0: using guessed type __int128 xmmword_1400216F0; | |
//----- (000000014000F5E0) ---------------------------------------------------- | |
__int64 __fastcall sub_14000F5E0(__int64 *a1, __int64 *a2) | |
{ | |
unsigned __int64 v2; // r12 | |
unsigned __int64 v3; // r15 | |
__int64 result; // rax | |
unsigned __int64 v5; // r8 | |
unsigned __int64 v7; // rbp | |
__int64 v8; // rsi | |
__int64 v9; // rdx | |
_QWORD *v10; // r14 | |
size_t v11; // rbx | |
unsigned __int8 v12; // cl | |
__int64 v13; // r9 | |
__int64 v14; // rax | |
__int64 v15; // rdx | |
unsigned __int8 v16; // cl | |
__int64 v17; // r9 | |
__int64 v18; // rax | |
__int64 v19; // rdx | |
__int64 v20; // r13 | |
__int64 *v21; // [rsp+20h] [rbp-48h] | |
v2 = a2[3]; | |
v3 = a2[2]; | |
result = 0i64; | |
v5 = v2 - v3; | |
if ( v2 >= v3 ) | |
{ | |
v7 = a2[1]; | |
if ( v2 <= v7 ) | |
{ | |
v21 = a1; | |
v8 = *a2; | |
v9 = *a2 + v3; | |
v10 = a2 + 5; | |
v11 = a2[4]; | |
if ( v11 <= 4 ) | |
{ | |
while ( 1 ) | |
{ | |
v16 = *((_BYTE *)v10 + v11 - 1); | |
if ( v5 >= 0x10 ) | |
{ | |
v18 = sub_140018A00(v16, v9, v5); | |
v17 = v19; | |
if ( v18 != 1 ) | |
{ | |
LABEL_26: | |
a2[2] = v2; | |
result = 0i64; | |
a1 = v21; | |
goto LABEL_28; | |
} | |
} | |
else | |
{ | |
v17 = 0i64; | |
if ( !v5 ) | |
goto LABEL_26; | |
while ( *(_BYTE *)(v9 + v17) != v16 ) | |
{ | |
if ( v5 == ++v17 ) | |
goto LABEL_26; | |
} | |
} | |
v3 += v17 + 1; | |
a2[2] = v3; | |
v20 = v3 - v11; | |
if ( v3 >= v11 && v3 <= v7 && !memcmp((const void *)(v8 + v20), a2 + 5, v11) ) | |
{ | |
a1 = v21; | |
v21[1] = v20; | |
v21[2] = v3; | |
result = 1i64; | |
goto LABEL_28; | |
} | |
v9 = v8 + v3; | |
v5 = v2 - v3; | |
if ( v2 < v3 ) | |
goto LABEL_27; | |
} | |
} | |
do | |
{ | |
v12 = *((_BYTE *)v10 + v11 - 1); | |
if ( v5 >= 0x10 ) | |
{ | |
v14 = sub_140018A00(v12, v9, v5); | |
v13 = v15; | |
if ( v14 != 1 ) | |
goto LABEL_26; | |
} | |
else | |
{ | |
v13 = 0i64; | |
if ( !v5 ) | |
goto LABEL_26; | |
while ( *(_BYTE *)(v9 + v13) != v12 ) | |
{ | |
if ( v5 == ++v13 ) | |
goto LABEL_26; | |
} | |
} | |
v3 += v13 + 1; | |
a2[2] = v3; | |
if ( v3 >= v11 && v3 <= v7 ) | |
sub_14001D040(v11, 4i64, (__int64)&off_140020AD0); | |
v9 = v8 + v3; | |
v5 = v2 - v3; | |
} | |
while ( v2 >= v3 ); | |
LABEL_27: | |
a1 = v21; | |
result = 0i64; | |
} | |
} | |
LABEL_28: | |
*a1 = result; | |
return result; | |
} | |
// 14000F695: variable 'v15' is possibly undefined | |
// 14000F755: variable 'v19' is possibly undefined | |
// 140020AD0: using guessed type char *off_140020AD0; | |
//----- (000000014000F7F0) ---------------------------------------------------- | |
char __fastcall sub_14000F7F0(__int64 a1, __int64 *a2) | |
{ | |
char *v2; // rbx | |
unsigned __int64 v3; // rsi | |
__int64 v4; // rdi | |
char *v5; // r15 | |
char v6; // al | |
unsigned __int64 v7; // rbp | |
unsigned __int64 v8; // r14 | |
int v9; // ecx | |
int v10; // r8d | |
int v11; // edx | |
int v12; // eax | |
char *v13; // r12 | |
unsigned __int64 v14; // r13 | |
__int64 v15; // rsi | |
char *v16; // rbx | |
char v17; // al | |
int v18; // edx | |
char *v19; // rax | |
int v20; // r8d | |
int v21; // r10d | |
int v22; // r9d | |
int v23; // edx | |
bool v24; // cf | |
unsigned int v25; // edx | |
char *v26; // r15 | |
unsigned __int64 v27; // rbp | |
int v28; // eax | |
char v29; // dl | |
char *v30; // r15 | |
unsigned __int64 v31; // rbp | |
char *v32; // r8 | |
char *v33; // rcx | |
unsigned __int64 v34; // r14 | |
int v35; // edx | |
char *v36; // r9 | |
int v37; // r8d | |
int v38; // edi | |
int v39; // r10d | |
char *v40; // r14 | |
unsigned __int64 v41; // rdx | |
unsigned __int64 v42; // r9 | |
unsigned __int64 v43; // r8 | |
unsigned __int64 v44; // rax | |
int v45; // eax | |
int v46; // ecx | |
int v47; // r8d | |
int v48; // eax | |
char *v49; // rcx | |
unsigned __int8 *v50; // r14 | |
unsigned __int64 v51; // rdx | |
unsigned __int8 *v52; // rax | |
int v53; // r8d | |
unsigned __int8 v54; // r11 | |
int v55; // r9d | |
int v56; // edi | |
int v57; // r10d | |
char v58; // di | |
unsigned __int64 v59; // rax | |
unsigned __int64 v60; // rax | |
char *v62; // r15 | |
char **v63; // rax | |
char **v64; // rax | |
__int64 v66; // [rsp+38h] [rbp-A0h] | |
unsigned int v67; // [rsp+44h] [rbp-94h] BYREF | |
__int64 v68; // [rsp+48h] [rbp-90h] | |
char *v69; // [rsp+50h] [rbp-88h] BYREF | |
unsigned __int64 v70; // [rsp+58h] [rbp-80h] | |
__int64 v71; // [rsp+60h] [rbp-78h] | |
unsigned __int64 v72; // [rsp+68h] [rbp-70h] | |
__int64 v73; // [rsp+70h] [rbp-68h] | |
__int64 v74; // [rsp+78h] [rbp-60h] | |
__int64 v75; // [rsp+80h] [rbp-58h] BYREF | |
unsigned __int64 v76; // [rsp+88h] [rbp-50h] | |
v2 = *(char **)a1; | |
v3 = *(_QWORD *)(a1 + 8); | |
v68 = *(_QWORD *)(a1 + 16); | |
v66 = 0i64; | |
LABEL_3: | |
v4 = v66; | |
if ( v66 == v68 ) | |
return 0; | |
if ( !v3 ) | |
goto LABEL_171; | |
v5 = v2; | |
++v66; | |
v6 = *v2; | |
v7 = 0i64; | |
v8 = v3; | |
if ( *v2 >= 0 ) | |
goto LABEL_9; | |
while ( 1 ) | |
{ | |
v9 = v6 & 0x1F; | |
v10 = v2[v7 + 1] & 0x3F; | |
if ( (unsigned __int8)v6 <= 0xDFu ) | |
{ | |
v12 = v10 | (v9 << 6); | |
goto LABEL_18; | |
} | |
v11 = (v10 << 6) | v2[v7 + 2] & 0x3F; | |
if ( (unsigned __int8)v6 < 0xF0u ) | |
break; | |
v12 = ((v6 & 7) << 18) | (v11 << 6) | v2[v7 + 3] & 0x3F; | |
if ( v12 == 1114112 ) | |
goto LABEL_171; | |
LABEL_18: | |
if ( (unsigned int)(v12 - 48) >= 0xA ) | |
goto LABEL_19; | |
while ( 1 ) | |
{ | |
LABEL_10: | |
if ( v8 <= 1 ) | |
{ | |
if ( v3 - 1 != v7 ) | |
LABEL_172: | |
sub_14001D0B0(&v2[v7], v8, 1ui64, v8, (__int64)&off_140020BB8); | |
LABEL_171: | |
sub_14001CC50((__int64)"called `Option::unwrap()` on a `None` value", 43i64, (__int64)&off_140020D70); | |
} | |
v6 = v2[v7 + 1]; | |
if ( v6 <= -65 ) | |
goto LABEL_172; | |
--v8; | |
++v7; | |
if ( v6 < 0 ) | |
break; | |
LABEL_9: | |
if ( (unsigned int)(unsigned __int8)v6 - 48 >= 0xA ) | |
goto LABEL_19; | |
} | |
} | |
if ( ((v9 << 12) | (unsigned int)v11) - 48 < 0xA ) | |
goto LABEL_10; | |
LABEL_19: | |
if ( v7 && (v3 < v8 || v2[v7] <= -65) ) | |
sub_14001D0B0(v2, v3, 0i64, v7, (__int64)&off_140020D28); | |
sub_14001A250((__int64)&v69, (unsigned __int8 *)v2, v7); | |
if ( (_BYTE)v69 ) | |
{ | |
LOBYTE(v75) = BYTE1(v69); | |
sub_14001CF90( | |
(__int64)"called `Result::unwrap()` on an `Err` value", | |
43i64, | |
(__int64)&v75, | |
(__int64)&off_140020A78, | |
(__int64)&off_140020BD0); | |
} | |
v13 = &v2[v7]; | |
v14 = v70; | |
v15 = v3 - v70; | |
v2 += v7; | |
if ( v70 ) | |
{ | |
if ( v8 <= v70 ) | |
{ | |
if ( v15 != v7 ) | |
LABEL_179: | |
sub_14001D0B0(&v5[v7], v8, v70, v8, (__int64)&off_140020BE8); | |
v16 = &v5[v70]; | |
} | |
else | |
{ | |
v16 = &v5[v70]; | |
if ( v5[v70 + v7] <= -65 ) | |
goto LABEL_179; | |
} | |
v2 = &v16[v7]; | |
} | |
v17 = sub_140017C40((__int64)a2); | |
if ( v14 && v17 && v66 == v68 && *v13 == 104 ) | |
{ | |
if ( v14 < 2 ) | |
return 0; | |
LOBYTE(v18) = v5[v7 + 1]; | |
if ( (char)v18 <= -65 ) | |
{ | |
v62 = &v5[v7]; | |
v63 = &off_140020BA0; | |
goto LABEL_186; | |
} | |
v19 = &v5[v7 + 1]; | |
if ( (v18 & 0x80u) == 0 ) | |
goto LABEL_46; | |
LABEL_37: | |
v20 = v18 & 0x1F; | |
v21 = v19[1] & 0x3F; | |
if ( (unsigned __int8)v18 <= 0xDFu ) | |
{ | |
v19 += 2; | |
v18 = v21 | (v20 << 6); | |
if ( (unsigned int)(v18 - 48) >= 0xA ) | |
goto LABEL_47; | |
} | |
else | |
{ | |
v22 = (v21 << 6) | v19[2] & 0x3F; | |
if ( (unsigned __int8)v18 < 0xF0u ) | |
{ | |
v19 += 3; | |
v18 = (v20 << 12) | v22; | |
if ( (unsigned int)(v18 - 48) >= 0xA ) | |
goto LABEL_47; | |
} | |
else | |
{ | |
v18 = ((v18 & 7) << 18) | (v22 << 6) | v19[3] & 0x3F; | |
if ( v18 == 1114112 ) | |
return 0; | |
v19 += 4; | |
if ( (unsigned int)(v18 - 48) >= 0xA ) | |
goto LABEL_47; | |
} | |
} | |
do | |
{ | |
do | |
{ | |
if ( &v5[v14 + v7] == v19 ) | |
return 0; | |
LOBYTE(v18) = *v19; | |
if ( *v19 < 0 ) | |
goto LABEL_37; | |
LABEL_46: | |
++v19; | |
v18 = (unsigned __int8)v18; | |
} | |
while ( (unsigned int)(unsigned __int8)v18 - 48 < 0xA ); | |
LABEL_47: | |
v23 = (v18 | 0x20) - 97; | |
v24 = __CFADD__(v23, 10); | |
v25 = v23 + 10; | |
if ( v24 ) | |
v25 = -1; | |
} | |
while ( v25 <= 0xF ); | |
} | |
if ( v4 && (unsigned __int8)sub_140017BE0(a2) ) | |
return 1; | |
if ( v14 >= 2 && *(_WORD *)v13 == 9311 ) | |
{ | |
if ( v5[v7 + 1] <= -65 ) | |
{ | |
v62 = &v5[v7]; | |
v63 = &off_140020C08; | |
LABEL_186: | |
sub_14001D0B0(v62, v14, 1ui64, v14, (__int64)v63); | |
} | |
v13 = &v5[v7 + 1]; | |
--v14; | |
} | |
v3 = v15 - v7; | |
LABEL_60: | |
while ( 2 ) | |
{ | |
while ( 1 ) | |
{ | |
v26 = v13; | |
v27 = v14; | |
if ( !v14 ) | |
break; | |
v28 = (unsigned __int8)*v13; | |
if ( v28 == 36 ) | |
{ | |
if ( v14 >= 2 && v13[1] <= -65 ) | |
{ | |
v64 = &off_140020C70; | |
LABEL_183: | |
sub_14001D0B0(v26, v27, 1ui64, v27, (__int64)v64); | |
} | |
v40 = v13 + 1; | |
v69 = v13 + 1; | |
v70 = v14 - 1; | |
v71 = 0i64; | |
v72 = v14 - 1; | |
v73 = 1i64; | |
v74 = 0x2400000024i64; | |
sub_14000F5E0(&v75, (__int64 *)&v69); | |
if ( !v75 ) | |
goto LABEL_2; | |
v41 = v76; | |
if ( v76 == -1i64 ) | |
sub_14001D060((__int64)&off_140020C88); | |
v42 = v76 + 1; | |
if ( v14 >= 2 && *v40 < -64 ) | |
LABEL_175: | |
sub_14001D0B0(v13, v14, 1ui64, v42, (__int64)&off_140020C88); | |
if ( v42 < v14 ) | |
{ | |
if ( v13[v42] < -64 ) | |
goto LABEL_175; | |
v43 = v76 + 2; | |
goto LABEL_108; | |
} | |
if ( v42 != v14 ) | |
goto LABEL_175; | |
v43 = v76 + 2; | |
if ( v76 == -2i64 ) | |
{ | |
v41 = -2i64; | |
goto LABEL_143; | |
} | |
LABEL_108: | |
if ( v14 <= v43 ) | |
{ | |
v44 = v14; | |
if ( v14 != v43 ) | |
LABEL_178: | |
sub_14001D0B0(v13, v14, v43, v14, (__int64)&off_140020CA0); | |
} | |
else | |
{ | |
if ( v13[v43] <= -65 ) | |
goto LABEL_178; | |
v44 = v43; | |
} | |
v13 += v44; | |
v14 -= v44; | |
switch ( v76 ) | |
{ | |
case 1ui64: | |
v45 = (unsigned __int8)*v40; | |
if ( v45 == 67 ) | |
goto LABEL_123; | |
if ( v45 != 117 ) | |
goto LABEL_2; | |
v41 = 1i64; | |
break; | |
case 2ui64: | |
if ( *(_WORD *)v40 != 20563 | |
&& *(_WORD *)v40 != 20546 | |
&& *(_WORD *)v40 != 18002 | |
&& *(_WORD *)v40 != 21580 | |
&& *(_WORD *)v40 != 21575 | |
&& *(_WORD *)v40 != 20556 | |
&& *(_WORD *)v40 != 20562 ) | |
{ | |
v41 = 2i64; | |
goto LABEL_143; | |
} | |
LABEL_123: | |
if ( (unsigned __int8)sub_140017BE0(a2) ) | |
return 1; | |
continue; | |
case 0ui64: | |
goto LABEL_2; | |
default: | |
LABEL_143: | |
if ( v26[1] != 117 ) | |
goto LABEL_2; | |
if ( v41 < 2 || v26[2] <= -65 ) | |
sub_14001D0B0(v26 + 1, v41, 1ui64, v41, (__int64)&off_140020CC8); | |
break; | |
} | |
v49 = v26 + 2; | |
v50 = (unsigned __int8 *)&v40[v41]; | |
v51 = v41 - 1; | |
v52 = (unsigned __int8 *)(v26 + 2); | |
while ( 1 ) | |
{ | |
if ( v52 == v50 ) | |
{ | |
LABEL_160: | |
v58 = 0; | |
v59 = sub_14001A240(v49, v51, 16i64); | |
if ( (v59 & 1) == 0 ) | |
goto LABEL_163; | |
LABEL_2: | |
if ( (unsigned __int8)sub_140017BE0(a2) ) | |
return 1; | |
goto LABEL_3; | |
} | |
v54 = *v52; | |
v53 = *v52; | |
if ( (*v52 & 0x80u) != 0 ) | |
{ | |
v55 = v53 & 0x1F; | |
v56 = v52[1] & 0x3F; | |
if ( (unsigned __int8)v53 <= 0xDFu ) | |
{ | |
v52 += 2; | |
v53 = v56 | (v55 << 6); | |
if ( (unsigned int)(v53 - 48) < 0xA ) | |
continue; | |
} | |
else | |
{ | |
v57 = (v56 << 6) | v52[2] & 0x3F; | |
if ( v54 < 0xF0u ) | |
{ | |
v52 += 3; | |
v53 = (v55 << 12) | v57; | |
if ( (unsigned int)(v53 - 48) < 0xA ) | |
continue; | |
} | |
else | |
{ | |
v53 = ((v53 & 7) << 18) | (v57 << 6) | v52[3] & 0x3F; | |
if ( v53 == 1114112 ) | |
goto LABEL_160; | |
v52 += 4; | |
if ( (unsigned int)(v53 - 48) < 0xA ) | |
continue; | |
} | |
} | |
} | |
else | |
{ | |
++v52; | |
if ( (unsigned int)v54 - 48 < 0xA ) | |
continue; | |
} | |
if ( (unsigned int)(v53 - 97) >= 6 ) | |
{ | |
v58 = 1; | |
v59 = sub_14001A240(v49, v51, 16i64); | |
if ( (v59 & 1) != 0 ) | |
goto LABEL_2; | |
LABEL_163: | |
v60 = HIDWORD(v59); | |
if ( ((unsigned int)v60 ^ 0xD800) - 1114112 < 0xFFEF0800 ) | |
LODWORD(v60) = 1114112; | |
if ( ((_DWORD)v60 == 1114112) | (unsigned __int8)v58 ) | |
goto LABEL_2; | |
v67 = v60; | |
if ( sub_14001B0D0(v60) ) | |
goto LABEL_2; | |
if ( (unsigned __int8)sub_140018820(&v67, a2) ) | |
return 1; | |
goto LABEL_60; | |
} | |
} | |
} | |
if ( v28 != 46 ) | |
break; | |
++v13; | |
if ( v14 < 2 ) | |
{ | |
v14 = 0i64; | |
if ( (unsigned __int8)sub_140017BE0(a2) ) | |
return 1; | |
continue; | |
} | |
if ( *v13 <= -65 ) | |
{ | |
v64 = &off_140020C20; | |
goto LABEL_183; | |
} | |
v29 = v26[1]; | |
if ( v29 < 0 ) | |
{ | |
v46 = v29 & 0x1F; | |
v47 = v26[2] & 0x3F; | |
if ( (unsigned __int8)v29 <= 0xDFu ) | |
{ | |
if ( (v47 | (v46 << 6)) == 46 ) | |
goto LABEL_67; | |
} | |
else | |
{ | |
v48 = (v47 << 6) | v26[3] & 0x3F; | |
if ( (unsigned __int8)v29 < 0xF0u ) | |
{ | |
if ( ((v46 << 12) | v48) == 46 ) | |
{ | |
LABEL_67: | |
if ( !(unsigned __int8)sub_140017BE0(a2) ) | |
{ | |
if ( v14 >= 3 && v26[2] <= -65 ) | |
sub_14001D0B0(v26, v14, 2ui64, v14, (__int64)&off_140020C58); | |
v30 = v26 + 2; | |
v31 = v14 - 2; | |
goto LABEL_127; | |
} | |
return 1; | |
} | |
} | |
else if ( (((v29 & 7) << 18) | (v48 << 6) | v26[4] & 0x3F) == 46 ) | |
{ | |
goto LABEL_67; | |
} | |
} | |
} | |
else if ( v29 == 46 ) | |
{ | |
goto LABEL_67; | |
} | |
if ( (unsigned __int8)sub_140017BE0(a2) ) | |
return 1; | |
v13 = v26 + 1; | |
--v14; | |
if ( v27 >= 2 && *v13 <= -65 ) | |
{ | |
v64 = &off_140020C40; | |
goto LABEL_183; | |
} | |
} | |
v32 = 0i64; | |
v33 = v13; | |
while ( 2 ) | |
{ | |
if ( v33 == &v13[v14] ) | |
goto LABEL_2; | |
v34 = (unsigned __int64)v32; | |
v35 = (unsigned __int8)*v33; | |
if ( *v33 >= 0 ) | |
{ | |
v36 = v33 + 1; | |
LABEL_82: | |
v32 = &v36[v34 - (_QWORD)v33]; | |
v33 = v36; | |
if ( v35 == 36 ) | |
break; | |
goto LABEL_83; | |
} | |
v37 = v35 & 0x1F; | |
v38 = v33[1] & 0x3F; | |
if ( (unsigned __int8)v35 <= 0xDFu ) | |
{ | |
v36 = v33 + 2; | |
v35 = v38 | (v37 << 6); | |
goto LABEL_82; | |
} | |
v36 = v33 + 3; | |
v39 = (v38 << 6) | v33[2] & 0x3F; | |
if ( (unsigned __int8)*v33 < 0xF0u ) | |
{ | |
v35 = (v37 << 12) | v39; | |
goto LABEL_82; | |
} | |
v35 = ((v35 & 7) << 18) | (v39 << 6) | *v36 & 0x3F; | |
if ( v35 == 1114112 ) | |
goto LABEL_2; | |
v33 += 4; | |
v32 = (char *)(v34 + 4); | |
if ( v35 != 36 ) | |
{ | |
LABEL_83: | |
if ( v35 == 46 ) | |
break; | |
continue; | |
} | |
break; | |
} | |
if ( v34 ) | |
{ | |
if ( v14 <= v34 ) | |
{ | |
if ( v14 != v34 ) | |
goto LABEL_176; | |
} | |
else if ( v13[v34] <= -65 ) | |
{ | |
LABEL_176: | |
sub_14001D0B0(v13, v14, 0i64, v34, (__int64)&off_140020CF8); | |
} | |
if ( (unsigned __int8)sub_140017BE0(a2) ) | |
return 1; | |
if ( v14 <= v34 ) | |
{ | |
if ( v14 != v34 ) | |
goto LABEL_180; | |
} | |
else if ( v13[v34] <= -65 ) | |
{ | |
LABEL_180: | |
sub_14001D0B0(v13, v14, v34, v14, (__int64)&off_140020CE0); | |
} | |
LABEL_126: | |
v30 = &v13[v34]; | |
v31 = v14 - v34; | |
LABEL_127: | |
v14 = v31; | |
v13 = v30; | |
continue; | |
} | |
break; | |
} | |
if ( !(unsigned __int8)sub_140017BE0(a2) ) | |
goto LABEL_126; | |
return 1; | |
} | |
// 14000FDFB: conditional instruction was optimized away because r14.8!=0 | |
// 14001A240: using guessed type __int64 __fastcall sub_14001A240(_QWORD, _QWORD, _QWORD); | |
// 140020A78: using guessed type __int64 (__fastcall *off_140020A78)(); | |
// 140020BA0: using guessed type char *off_140020BA0; | |
// 140020BB8: using guessed type char *off_140020BB8; | |
// 140020BD0: using guessed type char *off_140020BD0; | |
// 140020BE8: using guessed type char *off_140020BE8; | |
// 140020C08: using guessed type char *off_140020C08; | |
// 140020C20: using guessed type char *off_140020C20; | |
// 140020C40: using guessed type char *off_140020C40; | |
// 140020C58: using guessed type char *off_140020C58; | |
// 140020C70: using guessed type char *off_140020C70; | |
// 140020C88: using guessed type char *off_140020C88; | |
// 140020CA0: using guessed type char *off_140020CA0; | |
// 140020CC8: using guessed type char *off_140020CC8; | |
// 140020CE0: using guessed type char *off_140020CE0; | |
// 140020CF8: using guessed type char *off_140020CF8; | |
// 140020D28: using guessed type char *off_140020D28; | |
// 140020D70: using guessed type char *off_140020D70; | |
//----- (00000001400103E0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400103E0(char **a1, __int64 *a2) | |
{ | |
unsigned __int64 v2; // rbp | |
char v5; // bl | |
char *v6; // rcx | |
char *v7; // rax | |
unsigned __int8 *v8; // rax | |
unsigned __int64 v9; // r14 | |
int v10; // edx | |
int v11; // r8d | |
int v12; // r11d | |
int v13; // r9d | |
char *v15; // r15 | |
int *v16; // r12 | |
char v17; // r10 | |
unsigned __int64 v18; // rax | |
unsigned __int64 v19; // r9 | |
unsigned __int64 v20; // rax | |
unsigned __int8 v21; // cl | |
unsigned __int64 v22; // r11 | |
unsigned __int64 v23; // r9 | |
unsigned __int64 v24; // r8 | |
unsigned __int64 v25; // rcx | |
unsigned __int64 v26; // rax | |
unsigned __int64 v27; // r9 | |
unsigned __int64 v28; // rcx | |
unsigned __int64 v29; // rbx | |
unsigned __int64 v30; // rdi | |
char v31; // al | |
unsigned __int8 v32; // dl | |
unsigned __int64 v33; // rax | |
bool v34; // of | |
unsigned __int64 v35; // rsi | |
bool v36; // cf | |
unsigned __int64 v37; // rbx | |
unsigned __int64 v38; // rdi | |
unsigned __int64 v39; // rdx | |
__int64 v40; // rdi | |
unsigned __int64 v41; // r13 | |
unsigned __int64 v42; // r11 | |
__int64 v43; // rdi | |
unsigned __int64 v44; // r13 | |
bool v45; // cc | |
__int64 *v46; // rsi | |
unsigned int *v47; // rbx | |
__int64 v48; // r14 | |
__int64 v49; // [rsp+28h] [rbp-2B0h] | |
__int64 v50; // [rsp+30h] [rbp-2A8h] | |
unsigned __int64 v51; // [rsp+38h] [rbp-2A0h] | |
unsigned int v52; // [rsp+44h] [rbp-294h] BYREF | |
__int64 v53; // [rsp+48h] [rbp-290h] | |
__int64 v54; // [rsp+50h] [rbp-288h] | |
char *v55; // [rsp+58h] [rbp-280h] | |
__int64 *v56; // [rsp+60h] [rbp-278h] | |
unsigned __int64 v57; // [rsp+68h] [rbp-270h] | |
char *v58; // [rsp+70h] [rbp-268h] | |
char *v59; // [rsp+78h] [rbp-260h] | |
unsigned __int64 v60; // [rsp+80h] [rbp-258h] | |
char *v61; // [rsp+88h] [rbp-250h] | |
char *v62; // [rsp+90h] [rbp-248h] | |
int v63[144]; // [rsp+98h] [rbp-240h] BYREF | |
memset(v63, 0, 0x200ui64); | |
v58 = a1[3]; | |
if ( !v58 ) | |
return sub_140017BE0(a2); | |
v56 = a2; | |
v55 = a1[2]; | |
v5 = *v55; | |
v6 = *a1; | |
v7 = a1[1]; | |
v61 = *a1; | |
v62 = v7; | |
if ( v7 ) | |
{ | |
v8 = (unsigned __int8 *)&v7[(_QWORD)v6]; | |
v9 = 0i64; | |
do | |
{ | |
v10 = (unsigned __int8)*v6; | |
if ( *v6 < 0 ) | |
{ | |
v11 = v10 & 0x1F; | |
v12 = v6[1] & 0x3F; | |
if ( (unsigned __int8)v10 <= 0xDFu ) | |
{ | |
v6 += 2; | |
v10 = v12 | (v11 << 6); | |
if ( v9 == 128 ) | |
goto LABEL_81; | |
} | |
else | |
{ | |
v13 = (v12 << 6) | v6[2] & 0x3F; | |
if ( (unsigned __int8)*v6 < 0xF0u ) | |
{ | |
v6 += 3; | |
v10 = (v11 << 12) | v13; | |
if ( v9 == 128 ) | |
goto LABEL_81; | |
} | |
else | |
{ | |
v10 = ((v10 & 7) << 18) | (v13 << 6) | v6[3] & 0x3F; | |
if ( v10 == 1114112 ) | |
break; | |
v6 += 4; | |
if ( v9 == 128 ) | |
goto LABEL_81; | |
} | |
} | |
} | |
else | |
{ | |
++v6; | |
if ( v9 == 128 ) | |
goto LABEL_81; | |
} | |
v63[v9++] = v10; | |
} | |
while ( v6 != (char *)v8 ); | |
} | |
else | |
{ | |
v9 = 0i64; | |
} | |
v15 = v55; | |
v59 = &v58[(_QWORD)v55]; | |
v60 = v9 - 1; | |
v50 = 4 * v9 + 4; | |
v16 = &v63[v9]; | |
v53 = -(__int64)v9; | |
v17 = v9 ^ 3; | |
v18 = v9 + 1; | |
v51 = 700i64; | |
v2 = 72i64; | |
v49 = 128i64; | |
v54 = 0i64; | |
v19 = 0i64; | |
while ( 1 ) | |
{ | |
v57 = v18; | |
v20 = 0i64; | |
if ( v2 <= 0x24 ) | |
v20 = 36 - v2; | |
if ( v20 < 2 ) | |
v20 = 1i64; | |
if ( v20 >= 0x1A ) | |
v20 = 26i64; | |
v21 = v5 - 97; | |
if ( (unsigned __int8)(v5 - 97) >= 0x1Au ) | |
{ | |
if ( (unsigned __int8)(v5 - 48) > 9u ) | |
goto LABEL_81; | |
v21 = v5 - 22; | |
} | |
++v15; | |
v22 = v21; | |
if ( v20 <= v21 ) | |
break; | |
LABEL_30: | |
v36 = __CFADD__(v22, v19); | |
v23 = v22 + v19; | |
if ( v36 ) | |
goto LABEL_81; | |
v24 = v23; | |
v25 = v9 + 1; | |
if ( ((v9 + 1) | v23) >> 32 ) | |
{ | |
v26 = v23 / v25; | |
v27 = v23 % v25; | |
} | |
else | |
{ | |
v26 = (unsigned int)v23 / (unsigned int)v25; | |
v27 = (unsigned int)v23 % (unsigned int)v25; | |
} | |
v35 = v49; | |
v36 = __CFADD__(v26, v49); | |
if ( !__CFADD__(v26, v49) ) | |
v35 = v26 + v49; | |
v49 = v35; | |
if ( v36 || HIDWORD(v35) || ((unsigned int)v35 ^ 0xD800) - 2048 > 0x10F7FF || (_DWORD)v35 == 1114112 || v9 > 0x7F ) | |
goto LABEL_81; | |
if ( v9 <= v27 ) | |
{ | |
if ( v27 >= 0x80 ) | |
goto LABEL_92; | |
} | |
else | |
{ | |
v37 = v60 + v54 - v27; | |
v38 = v9; | |
if ( (((_BYTE)v9 - (_BYTE)v27) & 3) != 0 ) | |
{ | |
if ( (v57 | v24) >> 32 ) | |
v39 = v24 / v57; | |
else | |
LODWORD(v39) = (unsigned int)v24 / (unsigned int)v57; | |
v40 = 0i64; | |
do | |
{ | |
v16[v40] = v16[v40 - 1]; | |
--v40; | |
} | |
while ( v40 + (((_BYTE)v9 - ((_BYTE)v24 + (_BYTE)v39 * v17)) & 3) ); | |
v38 = v40 - v53; | |
} | |
if ( v37 >= 3 ) | |
{ | |
do | |
{ | |
*(_OWORD *)((char *)&v61 + 4 * v38 + 4) = *(_OWORD *)((char *)&v61 + 4 * v38); | |
v38 -= 4i64; | |
} | |
while ( v38 > v27 ); | |
} | |
if ( v27 >= 0x80 ) | |
LABEL_92: | |
sub_14001CD00(v27, 128i64, (__int64)&off_140020EC8); | |
} | |
v63[v27] = v35; | |
if ( v15 == v59 ) | |
{ | |
v46 = v56; | |
v47 = (unsigned int *)v63; | |
v48 = v50; | |
do | |
{ | |
v52 = *v47; | |
LODWORD(v2) = sub_140018820(&v52, v46); | |
if ( (_BYTE)v2 ) | |
break; | |
++v47; | |
v48 -= 4i64; | |
} | |
while ( v48 ); | |
return (unsigned int)v2; | |
} | |
v5 = *v15; | |
if ( HIDWORD(v22) ) | |
v41 = v22 / v51; | |
else | |
v41 = (unsigned int)v22 / (unsigned int)v51; | |
if ( (v25 | v41) >> 32 ) | |
{ | |
v42 = v41 + v41 / v25; | |
v43 = 0i64; | |
if ( v42 < 0x1C8 ) | |
goto LABEL_80; | |
} | |
else | |
{ | |
v42 = v41 + (unsigned int)v41 / (unsigned int)v25; | |
v43 = 0i64; | |
if ( v42 < 0x1C8 ) | |
goto LABEL_80; | |
} | |
v44 = v42; | |
do | |
{ | |
v42 = v44 / 0x23; | |
v43 += 36i64; | |
v45 = v44 <= 0x3E57; | |
v44 /= 0x23ui64; | |
} | |
while ( !v45 ); | |
LABEL_80: | |
v19 = v27 + 1; | |
v2 = v43 + (unsigned __int16)((unsigned __int16)(36 * v42) / (unsigned __int16)(v42 + 38)); | |
++v54; | |
v50 += 4i64; | |
++v16; | |
--v53; | |
v17 += 3; | |
v18 = v57 + 1; | |
v51 = 2i64; | |
++v9; | |
} | |
v28 = 36 - v20; | |
v29 = 72i64; | |
do | |
{ | |
v30 = 0i64; | |
if ( v29 >= v2 ) | |
v30 = v29 - v2; | |
if ( v30 < 2 ) | |
v30 = 1i64; | |
if ( v30 >= 0x1A ) | |
v30 = 26i64; | |
if ( v15 == v59 ) | |
break; | |
v31 = *v15; | |
v32 = *v15 - 97; | |
if ( v32 >= 0x1Au ) | |
{ | |
if ( (unsigned __int8)(v31 - 48) >= 0xAu ) | |
break; | |
v32 = v31 - 22; | |
} | |
v33 = v28 * v32; | |
if ( !is_mul_ok(v28, v32) ) | |
break; | |
v36 = __CFADD__(v33, v22); | |
v22 += v33; | |
if ( v36 ) | |
break; | |
++v15; | |
if ( v30 > v32 ) | |
goto LABEL_30; | |
v29 += 36i64; | |
v34 = ((36 - v30) * (unsigned __int128)v28) >> 64 != 0; | |
v28 *= 36 - v30; | |
} | |
while ( !v34 ); | |
LABEL_81: | |
a2 = v56; | |
LOBYTE(v2) = 1; | |
if ( !(unsigned __int8)sub_140017BE0(v56) | |
&& (!v62 || !(unsigned __int8)sub_140017BE0(v56) && !(unsigned __int8)sub_140017BE0(v56)) | |
&& !(unsigned __int8)sub_140017BE0(v56) ) | |
{ | |
return sub_140017BE0(a2); | |
} | |
return (unsigned int)v2; | |
} | |
// 140010A0B: conditional instruction was optimized away because r14.8<80u | |
// 1400109DC: variable 'v2' is possibly undefined | |
// 140020EC8: using guessed type char *off_140020EC8; | |
// 1400103E0: using guessed type int var_240[144]; | |
//----- (0000000140010A80) ---------------------------------------------------- | |
__int64 __fastcall sub_140010A80(__int64 a1, __int64 a2) | |
{ | |
__int64 v4; // rcx | |
__int64 result; // rax | |
unsigned __int8 *v6; // rsi | |
char *v7; // rcx | |
__int64 v8; // rdx | |
int v9; // r9d | |
unsigned int v10; // r10d | |
int v11; // r10d | |
int v12; // edi | |
int v13; // r11d | |
int v14; // r9d | |
bool v15; // cf | |
unsigned int v16; // r9d | |
__int64 v17; // [rsp+28h] [rbp-A0h] BYREF | |
__int64 v18; // [rsp+30h] [rbp-98h] | |
char v19[136]; // [rsp+40h] [rbp-88h] BYREF | |
sub_1400194E0((__int64)v19, a1, a2, "0", 1ui64); | |
while ( 1 ) | |
{ | |
sub_14000F1F0(&v17, (__int64)v19); | |
if ( v17 == 1 ) | |
break; | |
if ( (_DWORD)v17 == 2 ) | |
{ | |
v4 = a2; | |
goto LABEL_5; | |
} | |
} | |
v4 = v18; | |
if ( (unsigned __int64)(a2 - v18) <= 0x10 ) | |
{ | |
LABEL_5: | |
result = 1i64; | |
if ( v4 == a2 ) | |
return result; | |
v6 = (unsigned __int8 *)(a1 + a2); | |
v7 = (char *)(a1 + v4); | |
v8 = 0i64; | |
while ( 1 ) | |
{ | |
v9 = (unsigned __int8)*v7; | |
if ( *v7 < 0 ) | |
{ | |
v11 = v9 & 0x1F; | |
v12 = v7[1] & 0x3F; | |
if ( (unsigned __int8)v9 <= 0xDFu ) | |
{ | |
v7 += 2; | |
v9 = v12 | (v11 << 6); | |
v10 = v9 - 48; | |
if ( (unsigned int)(v9 - 48) >= 0xA ) | |
goto LABEL_23; | |
} | |
else | |
{ | |
v13 = (v12 << 6) | v7[2] & 0x3F; | |
if ( (unsigned __int8)*v7 < 0xF0u ) | |
{ | |
v7 += 3; | |
v9 = (v11 << 12) | v13; | |
v10 = v9 - 48; | |
if ( (unsigned int)(v9 - 48) >= 0xA ) | |
goto LABEL_23; | |
} | |
else | |
{ | |
v9 = ((v9 & 7) << 18) | (v13 << 6) | v7[3] & 0x3F; | |
if ( v9 == 1114112 ) | |
return result; | |
v7 += 4; | |
v10 = v9 - 48; | |
if ( (unsigned int)(v9 - 48) >= 0xA ) | |
{ | |
LABEL_23: | |
v14 = (v9 | 0x20) - 97; | |
v15 = __CFADD__(v14, 10); | |
v16 = v14 + 10; | |
if ( v15 ) | |
v16 = -1; | |
v10 = v16; | |
if ( v16 >= 0x10 ) | |
sub_14001CC50((__int64)"called `Option::unwrap()` on a `None` value", 43i64, (__int64)&off_140020EF0); | |
} | |
} | |
} | |
} | |
else | |
{ | |
++v7; | |
v10 = v9 - 48; | |
if ( (unsigned int)(v9 - 48) >= 0xA ) | |
goto LABEL_23; | |
} | |
v8 = (16 * v8) | v10; | |
if ( v7 == (char *)v6 ) | |
return result; | |
} | |
} | |
return 0i64; | |
} | |
// 140020EF0: using guessed type char *off_140020EF0; | |
//----- (0000000140010C40) ---------------------------------------------------- | |
_QWORD *__fastcall sub_140010C40(_QWORD *a1, __int64 a2) | |
{ | |
_QWORD *result; // rax | |
char *v3; // rcx | |
unsigned __int64 v5; // r8 | |
unsigned __int64 v6; // rdx | |
__int64 v7; // r10 | |
__int64 v8; // r11 | |
char *v9; // rsi | |
char v10; // di | |
unsigned __int64 v11; // r9 | |
result = a1; | |
v3 = *(char **)a2; | |
if ( !*(_QWORD *)a2 ) | |
goto LABEL_12; | |
v5 = *(_QWORD *)(a2 + 16); | |
v6 = *(_QWORD *)(a2 + 8); | |
v7 = 1i64; | |
v8 = 0i64; | |
v9 = v3; | |
do | |
{ | |
if ( v5 + v8 >= v6 ) | |
goto LABEL_12; | |
v10 = v9[v5]; | |
*(_QWORD *)(a2 + 16) = v5 + v8 + 1; | |
--v7; | |
++v8; | |
++v9; | |
} | |
while ( (unsigned __int8)(v10 - 48) < 0xAu || (unsigned __int8)(v10 - 97) < 6u ); | |
if ( v10 == 95 ) | |
{ | |
v11 = v5 - v7; | |
if ( v5 - v7 < v5 ) | |
goto LABEL_17; | |
if ( v5 ) | |
{ | |
if ( v5 >= v6 ) | |
{ | |
if ( v5 != v6 ) | |
goto LABEL_17; | |
} | |
else if ( v3[v5] < -64 ) | |
{ | |
LABEL_17: | |
sub_14001D0B0(v3, v6, v5, v11, (__int64)&off_140021068); | |
} | |
} | |
if ( v5 != v7 ) | |
{ | |
if ( v11 >= v6 ) | |
{ | |
if ( v5 - v6 + v8 != 1 ) | |
goto LABEL_17; | |
} | |
else if ( v9[v5 - 1] <= -65 ) | |
{ | |
goto LABEL_17; | |
} | |
} | |
*result = &v3[v5]; | |
result[1] = -v7; | |
} | |
else | |
{ | |
LABEL_12: | |
*((_BYTE *)result + 8) = 0; | |
*result = 0i64; | |
} | |
return result; | |
} | |
// 140021068: using guessed type char *off_140021068; | |
//----- (0000000140010D20) ---------------------------------------------------- | |
char __fastcall sub_140010D20(__int64 a1, __int64 *a2) | |
{ | |
__int64 v3; // r10 | |
unsigned __int64 v4; // r11 | |
unsigned __int64 v5; // r9 | |
char result; // al | |
unsigned __int64 v7; // rax | |
char v8; // dl | |
unsigned __int8 v9; // di | |
unsigned __int8 v10; // dl | |
__int64 v11; // rax | |
unsigned __int64 v12; // kr00_8 | |
bool v13; // cf | |
unsigned __int64 v14; // rax | |
v3 = *a2; | |
v4 = a2[1]; | |
v5 = a2[2]; | |
if ( v5 >= v4 || !v3 ) | |
{ | |
if ( !v3 ) | |
{ | |
LABEL_19: | |
*(_BYTE *)(a1 + 1) = 0; | |
result = 1; | |
goto LABEL_20; | |
} | |
LABEL_6: | |
v7 = 0i64; | |
while ( v5 < v4 ) | |
{ | |
if ( *(_BYTE *)(v3 + v5) == 95 ) | |
{ | |
a2[2] = v5 + 1; | |
v14 = v7 + 1; | |
if ( !v14 ) | |
goto LABEL_19; | |
*(_QWORD *)(a1 + 8) = v14; | |
result = 0; | |
goto LABEL_20; | |
} | |
v8 = *(_BYTE *)(v3 + v5); | |
v9 = v8 - 48; | |
if ( (unsigned __int8)(v8 - 48) >= 0xAu ) | |
{ | |
if ( (unsigned __int8)(v8 - 97) >= 0x1Au ) | |
{ | |
if ( (unsigned __int8)(v8 - 65) >= 0x1Au ) | |
goto LABEL_19; | |
v10 = v8 - 29; | |
} | |
else | |
{ | |
v10 = v8 - 87; | |
} | |
v9 = v10; | |
} | |
a2[2] = ++v5; | |
v12 = v7; | |
v11 = 62 * v7; | |
if ( is_mul_ok(0x3Eui64, v12) ) | |
{ | |
v13 = __CFADD__(v9, v11); | |
v7 = v9 + v11; | |
if ( !v13 ) | |
continue; | |
} | |
goto LABEL_19; | |
} | |
goto LABEL_19; | |
} | |
if ( *(_BYTE *)(v3 + v5) != 95 ) | |
goto LABEL_6; | |
a2[2] = v5 + 1; | |
*(_QWORD *)(a1 + 8) = 0i64; | |
result = 0; | |
LABEL_20: | |
*(_BYTE *)a1 = result; | |
return result; | |
} | |
//----- (0000000140010DE0) ---------------------------------------------------- | |
char __fastcall sub_140010DE0(__int64 a1, __int64 *a2) | |
{ | |
unsigned __int64 v2; // r9 | |
unsigned __int64 v3; // rax | |
__int64 v5; // r10 | |
unsigned __int64 v6; // r11 | |
unsigned __int64 v7; // rax | |
char result; // al | |
unsigned __int64 v9; // rax | |
char v10; // dl | |
unsigned __int8 v11; // di | |
unsigned __int8 v12; // dl | |
__int64 v13; // rax | |
unsigned __int64 v14; // kr00_8 | |
bool v15; // cf | |
unsigned __int64 v16; // rax | |
v2 = a2[1]; | |
v3 = a2[2]; | |
if ( v3 < v2 && (v5 = *a2) != 0 && *(_BYTE *)(v5 + v3) == 115 ) | |
{ | |
v6 = v3 + 1; | |
a2[2] = v3 + 1; | |
if ( v3 + 1 >= v2 || *(_BYTE *)(v5 + v6) != 95 ) | |
{ | |
v9 = 0i64; | |
while ( v6 < v2 ) | |
{ | |
v10 = *(_BYTE *)(v5 + v6); | |
if ( v10 == 95 ) | |
{ | |
a2[2] = v6 + 1; | |
v7 = v9 + 1; | |
if ( !v7 ) | |
goto LABEL_23; | |
goto LABEL_22; | |
} | |
v11 = v10 - 48; | |
if ( (unsigned __int8)(v10 - 48) >= 0xAu ) | |
{ | |
if ( (unsigned __int8)(v10 - 97) >= 0x1Au ) | |
{ | |
if ( (unsigned __int8)(v10 - 65) >= 0x1Au ) | |
goto LABEL_23; | |
v12 = v10 - 29; | |
} | |
else | |
{ | |
v12 = v10 - 87; | |
} | |
v11 = v12; | |
} | |
a2[2] = ++v6; | |
v14 = v9; | |
v13 = 62 * v9; | |
if ( is_mul_ok(0x3Eui64, v14) ) | |
{ | |
v15 = __CFADD__(v11, v13); | |
v9 = v11 + v13; | |
if ( !v15 ) | |
continue; | |
} | |
goto LABEL_23; | |
} | |
goto LABEL_23; | |
} | |
a2[2] = v3 + 2; | |
v7 = 0i64; | |
LABEL_22: | |
v16 = v7 + 1; | |
if ( !v16 ) | |
{ | |
LABEL_23: | |
*(_BYTE *)(a1 + 1) = 0; | |
result = 1; | |
goto LABEL_24; | |
} | |
*(_QWORD *)(a1 + 8) = v16; | |
} | |
else | |
{ | |
*(_QWORD *)(a1 + 8) = 0i64; | |
} | |
result = 0; | |
LABEL_24: | |
*(_BYTE *)a1 = result; | |
return result; | |
} | |
//----- (0000000140010EC0) ---------------------------------------------------- | |
unsigned __int64 __fastcall sub_140010EC0(_QWORD *a1) | |
{ | |
unsigned __int64 v1; // r8 | |
__int64 v2; // rax | |
__int64 v3; // rdx | |
bool v5; // cf | |
__int64 v6; // rax | |
v1 = a1[2]; | |
v2 = 0i64; | |
v3 = 1i64; | |
if ( v1 >= a1[1] || !*a1 ) | |
return v3 | (v2 << 32); | |
v2 = *(unsigned __int8 *)(*a1 + v1); | |
a1[2] = v1 + 1; | |
if ( (unsigned __int8)(v2 - 65) < 0x1Au ) | |
{ | |
v3 = 0i64; | |
return v3 | (v2 << 32); | |
} | |
v5 = (unsigned __int8)(v2 - 123) < 0xE6u; | |
v6 = 1114112i64; | |
if ( v5 ) | |
v6 = 0i64; | |
return v5 | (unsigned __int64)(v6 << 32); | |
} | |
//----- (0000000140010F20) ---------------------------------------------------- | |
void __fastcall sub_140010F20(__int64 a1, __int64 a2) | |
{ | |
char *v3; // rcx | |
unsigned __int64 v4; // r11 | |
unsigned __int64 v5; // r8 | |
char v6; // bl | |
unsigned __int64 v7; // rax | |
unsigned __int64 v8; // r8 | |
unsigned __int8 v9; // di | |
__int64 v10; // rax | |
unsigned __int64 v11; // kr00_8 | |
bool v12; // cf | |
unsigned __int64 v13; // r9 | |
char *v14; // rdi | |
unsigned __int64 v15; // r10 | |
char *v16; // r9 | |
unsigned __int64 v17; // rbx | |
char *v18; // rdx | |
__int64 v19; // r8 | |
char *v20; // r14 | |
char *v22; // rax | |
unsigned __int64 v23; // rdx | |
v3 = *(char **)a2; | |
v4 = *(_QWORD *)(a2 + 8); | |
v5 = *(_QWORD *)(a2 + 16); | |
v6 = 0; | |
if ( v5 >= v4 || !v3 ) | |
{ | |
LABEL_5: | |
if ( v5 >= v4 ) | |
goto LABEL_23; | |
goto LABEL_8; | |
} | |
if ( v3[v5] == 117 ) | |
{ | |
*(_QWORD *)(a2 + 16) = ++v5; | |
v6 = 1; | |
goto LABEL_5; | |
} | |
v6 = 0; | |
if ( v5 >= v4 ) | |
{ | |
LABEL_23: | |
*(_BYTE *)(a1 + 8) = 0; | |
*(_QWORD *)a1 = 0i64; | |
return; | |
} | |
LABEL_8: | |
if ( !v3 ) | |
goto LABEL_23; | |
LOBYTE(v7) = v3[v5] - 48; | |
if ( (unsigned __int8)v7 > 9u ) | |
goto LABEL_23; | |
v8 = v5 + 1; | |
*(_QWORD *)(a2 + 16) = v8; | |
if ( (_BYTE)v7 ) | |
{ | |
v7 = (unsigned __int8)v7; | |
while ( v8 < v4 ) | |
{ | |
v9 = v3[v8] - 48; | |
if ( v9 > 9u ) | |
break; | |
*(_QWORD *)(a2 + 16) = ++v8; | |
v11 = v7; | |
v10 = 10 * v7; | |
if ( is_mul_ok(0xAui64, v11) ) | |
{ | |
v12 = __CFADD__(v9, v10); | |
v7 = v9 + v10; | |
if ( !v12 ) | |
continue; | |
} | |
goto LABEL_23; | |
} | |
} | |
else | |
{ | |
v7 = 0i64; | |
} | |
if ( v8 < v4 && v3[v8] == 95 ) | |
*(_QWORD *)(a2 + 16) = ++v8; | |
v13 = v7 + v8; | |
if ( __CFADD__(v7, v8) ) | |
goto LABEL_23; | |
*(_QWORD *)(a2 + 16) = v13; | |
if ( v13 > v4 ) | |
goto LABEL_23; | |
if ( v8 >= v4 ) | |
{ | |
if ( v8 != v4 ) | |
goto LABEL_31; | |
} | |
else if ( v3[v8] < -64 ) | |
{ | |
LABEL_31: | |
sub_14001D0B0(v3, v4, v8, v13, (__int64)&off_140021080); | |
} | |
if ( v13 ) | |
{ | |
if ( v13 >= v4 ) | |
{ | |
if ( v13 != v4 ) | |
goto LABEL_31; | |
} | |
else if ( v3[v13] <= -65 ) | |
{ | |
goto LABEL_31; | |
} | |
} | |
v14 = &v3[v8]; | |
v15 = v7; | |
if ( v6 ) | |
{ | |
v16 = &v3[v13]; | |
v17 = 0i64; | |
v18 = (char *)&unk_140020908; | |
v19 = 0i64; | |
do | |
{ | |
if ( v19 == v7 ) | |
goto LABEL_44; | |
v20 = v16 - 1; | |
++v19; | |
} | |
while ( *--v16 != 95 ); | |
v17 = v7 - v19; | |
if ( v19 != v7 ) | |
{ | |
if ( v17 >= v7 ) | |
{ | |
if ( v19 ) | |
goto LABEL_46; | |
} | |
else if ( *v20 <= -65 ) | |
{ | |
LABEL_46: | |
sub_14001D0B0(v14, v7, 0i64, v17, (__int64)&off_1400210B0); | |
} | |
} | |
v22 = sub_14000EFC0(1 - (v19 - v7), v14, v7, (__int64)&off_140021098); | |
v15 = v23; | |
v18 = v14; | |
v14 = v22; | |
LABEL_44: | |
if ( !v15 ) | |
goto LABEL_23; | |
*(_QWORD *)a1 = v18; | |
*(_QWORD *)(a1 + 8) = v17; | |
*(_QWORD *)(a1 + 16) = v14; | |
*(_QWORD *)(a1 + 24) = v15; | |
} | |
else | |
{ | |
*(_QWORD *)a1 = v14; | |
*(_QWORD *)(a1 + 8) = v7; | |
*(_QWORD *)(a1 + 16) = &unk_140020908; | |
*(_QWORD *)(a1 + 24) = 0i64; | |
} | |
} | |
// 140010FC5: conditional instruction was optimized away because rcx.8!=0 | |
// 1400110BE: conditional instruction was optimized away because rcx.8!=0 | |
// 1400110DA: variable 'v23' is possibly undefined | |
// 140021080: using guessed type char *off_140021080; | |
// 140021098: using guessed type char *off_140021098; | |
// 1400210B0: using guessed type char *off_1400210B0; | |
//----- (0000000140011120) ---------------------------------------------------- | |
__int64 __fastcall sub_140011120(__int64 a1) | |
{ | |
__int64 v2; // rdi | |
__int64 result; // rax | |
char v4[24]; // [rsp+30h] [rbp-18h] BYREF | |
v2 = *(_QWORD *)(a1 + 32); | |
*(_QWORD *)(a1 + 32) = 0i64; | |
result = sub_140012370(a1, 0); | |
if ( (_BYTE)result ) | |
sub_14001CF90( | |
(__int64)"`fmt::Error`s should be impossible without a `fmt::Formatter`", | |
61i64, | |
(__int64)v4, | |
(__int64)&off_140020A08, | |
(__int64)&off_1400210F8); | |
*(_QWORD *)(a1 + 32) = v2; | |
return result; | |
} | |
// 140020A08: using guessed type __int64 (__fastcall *off_140020A08)(); | |
// 1400210F8: using guessed type char *off_1400210F8; | |
// 140011120: using guessed type char var_18[24]; | |
//----- (0000000140011180) ---------------------------------------------------- | |
char __fastcall sub_140011180(__int64 *a1, __int64 a2) | |
{ | |
__int64 v3; // r10 | |
char v4; // r8 | |
unsigned __int64 v5; // r11 | |
unsigned __int64 v6; // rcx | |
unsigned __int64 v7; // rax | |
unsigned __int64 v8; // rax | |
unsigned __int64 v9; // rdi | |
char v10; // r9 | |
char v11; // dl | |
unsigned __int8 v12; // bp | |
unsigned __int8 v13; // dl | |
__int64 v14; // rax | |
unsigned __int64 v15; // kr00_8 | |
bool v16; // cf | |
__int64 *v17; // r8 | |
char result; // al | |
unsigned int v19; // ecx | |
char v20; // di | |
__int64 *v21; // r8 | |
unsigned __int8 *v22; // rcx | |
char v23; // cl | |
__int128 v24; // [rsp+20h] [rbp-48h] | |
__int128 v25; // [rsp+30h] [rbp-38h] | |
v3 = *a1; | |
if ( !*a1 ) | |
{ | |
v17 = (__int64 *)a1[4]; | |
if ( v17 ) | |
return sub_1400183F0("?'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", 1ui64, v17); | |
return 0; | |
} | |
v4 = a2; | |
v5 = a1[1]; | |
v6 = a1[2]; | |
if ( v6 < v5 && *(_BYTE *)(v3 + v6) == 95 ) | |
{ | |
a1[2] = v6 + 1; | |
v7 = 0i64; | |
LABEL_20: | |
if ( v7 < v6 - 1 ) | |
{ | |
v19 = *((_DWORD *)a1 + 6) + 1; | |
if ( v19 < 0x1F5 ) | |
{ | |
if ( a1[4] ) | |
{ | |
v25 = *((_OWORD *)a1 + 1); | |
v24 = *(_OWORD *)a1; | |
a1[2] = v7; | |
*((_DWORD *)a1 + 6) = v19; | |
result = sub_140012370((__int64)a1, v4 != 0); | |
*(_OWORD *)a1 = v24; | |
*((_OWORD *)a1 + 1) = v25; | |
return result; | |
} | |
return 0; | |
} | |
v20 = 1; | |
v10 = 0; | |
v21 = (__int64 *)a1[4]; | |
if ( !v21 ) | |
goto LABEL_29; | |
goto LABEL_26; | |
} | |
v10 = 1; | |
} | |
else | |
{ | |
v8 = 0i64; | |
v9 = a1[2]; | |
while ( 1 ) | |
{ | |
v10 = 1; | |
if ( v9 >= v5 ) | |
break; | |
v11 = *(_BYTE *)(v3 + v9); | |
if ( v11 == 95 ) | |
{ | |
a1[2] = v9 + 1; | |
v7 = v8 + 1; | |
if ( !v7 ) | |
break; | |
goto LABEL_20; | |
} | |
v12 = v11 - 48; | |
if ( (unsigned __int8)(v11 - 48) >= 0xAu ) | |
{ | |
if ( (unsigned __int8)(v11 - 97) >= 0x1Au ) | |
{ | |
if ( (unsigned __int8)(v11 - 65) >= 0x1Au ) | |
break; | |
v13 = v11 - 29; | |
} | |
else | |
{ | |
v13 = v11 - 87; | |
} | |
v12 = v13; | |
} | |
a1[2] = ++v9; | |
v15 = v8; | |
v14 = 62 * v8; | |
if ( is_mul_ok(0x3Eui64, v15) ) | |
{ | |
v16 = __CFADD__(v12, v14); | |
v8 = v12 + v14; | |
if ( !v16 ) | |
continue; | |
} | |
break; | |
} | |
} | |
v20 = 0; | |
v21 = (__int64 *)a1[4]; | |
if ( !v21 ) | |
{ | |
LABEL_29: | |
*a1 = 0i64; | |
*((_BYTE *)a1 + 8) = v20; | |
return 0; | |
} | |
LABEL_26: | |
v22 = byte_1400210C8; | |
if ( v10 ) | |
v22 = "{invalid syntax}"; | |
v23 = sub_1400183F0(v22, (9i64 * ((unsigned __int8)v10 ^ 1u)) | 0x10, v21); | |
result = 1; | |
if ( !v23 ) | |
goto LABEL_29; | |
return result; | |
} | |
// 1400210C8: using guessed type unsigned __int8 byte_1400210C8[25]; | |
//----- (0000000140011330) ---------------------------------------------------- | |
char __fastcall sub_140011330(__int64 *a1, __int64 a2) | |
{ | |
__int64 v3; // r10 | |
char v4; // r8 | |
unsigned __int64 v5; // r11 | |
unsigned __int64 v6; // rcx | |
unsigned __int64 v7; // rax | |
unsigned __int64 v8; // rax | |
unsigned __int64 v9; // rdi | |
char v10; // r9 | |
unsigned __int8 v11; // bp | |
unsigned __int8 v12; // dl | |
__int64 v13; // rax | |
unsigned __int64 v14; // kr00_8 | |
bool v15; // cf | |
__int64 *v16; // r8 | |
char result; // al | |
unsigned int v18; // ecx | |
char v19; // di | |
__int64 *v20; // r8 | |
unsigned __int8 *v21; // rcx | |
char v22; // cl | |
__int128 v23; // [rsp+20h] [rbp-48h] | |
__int128 v24; // [rsp+30h] [rbp-38h] | |
v3 = *a1; | |
if ( !*a1 ) | |
{ | |
v16 = (__int64 *)a1[4]; | |
if ( v16 ) | |
return sub_1400183F0("?'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", 1ui64, v16); | |
return 0; | |
} | |
v4 = a2; | |
v5 = a1[1]; | |
v6 = a1[2]; | |
if ( v6 < v5 && *(_BYTE *)(v3 + v6) == 95 ) | |
{ | |
a1[2] = v6 + 1; | |
v7 = 0i64; | |
LABEL_20: | |
if ( v7 < v6 - 1 ) | |
{ | |
v18 = *((_DWORD *)a1 + 6) + 1; | |
if ( v18 < 0x1F5 ) | |
{ | |
if ( a1[4] ) | |
{ | |
v24 = *((_OWORD *)a1 + 1); | |
v23 = *(_OWORD *)a1; | |
a1[2] = v7; | |
*((_DWORD *)a1 + 6) = v18; | |
LOBYTE(a2) = v4 != 0; | |
result = sub_140013AF0((__int64)a1, a2); | |
*(_OWORD *)a1 = v23; | |
*((_OWORD *)a1 + 1) = v24; | |
return result; | |
} | |
return 0; | |
} | |
v19 = 1; | |
v10 = 0; | |
v20 = (__int64 *)a1[4]; | |
if ( !v20 ) | |
goto LABEL_29; | |
goto LABEL_26; | |
} | |
v10 = 1; | |
} | |
else | |
{ | |
v8 = 0i64; | |
v9 = a1[2]; | |
while ( 1 ) | |
{ | |
v10 = 1; | |
if ( v9 >= v5 ) | |
break; | |
a2 = *(unsigned __int8 *)(v3 + v9); | |
if ( (_BYTE)a2 == 95 ) | |
{ | |
a1[2] = v9 + 1; | |
v7 = v8 + 1; | |
if ( !v7 ) | |
break; | |
goto LABEL_20; | |
} | |
v11 = a2 - 48; | |
if ( (unsigned __int8)(a2 - 48) >= 0xAu ) | |
{ | |
if ( (unsigned __int8)(a2 - 97) >= 0x1Au ) | |
{ | |
if ( (unsigned __int8)(a2 - 65) >= 0x1Au ) | |
break; | |
v12 = a2 - 29; | |
} | |
else | |
{ | |
v12 = a2 - 87; | |
} | |
v11 = v12; | |
} | |
a1[2] = ++v9; | |
v14 = v8; | |
v13 = 62 * v8; | |
if ( is_mul_ok(0x3Eui64, v14) ) | |
{ | |
v15 = __CFADD__(v11, v13); | |
v8 = v11 + v13; | |
if ( !v15 ) | |
continue; | |
} | |
break; | |
} | |
} | |
v19 = 0; | |
v20 = (__int64 *)a1[4]; | |
if ( !v20 ) | |
{ | |
LABEL_29: | |
*a1 = 0i64; | |
*((_BYTE *)a1 + 8) = v19; | |
return 0; | |
} | |
LABEL_26: | |
v21 = byte_1400210C8; | |
if ( v10 ) | |
v21 = "{invalid syntax}"; | |
v22 = sub_1400183F0(v21, (9i64 * ((unsigned __int8)v10 ^ 1u)) | 0x10, v20); | |
result = 1; | |
if ( !v22 ) | |
goto LABEL_29; | |
return result; | |
} | |
// 1400210C8: using guessed type unsigned __int8 byte_1400210C8[25]; | |
//----- (00000001400114E0) ---------------------------------------------------- | |
char __fastcall sub_1400114E0(__int64 *a1) | |
{ | |
__int64 v2; // r8 | |
unsigned __int64 v3; // r10 | |
unsigned __int64 v4; // rcx | |
unsigned __int64 v5; // rax | |
unsigned __int64 v6; // rax | |
unsigned __int64 v7; // r11 | |
char v8; // r9 | |
char v9; // dl | |
unsigned __int8 v10; // bl | |
unsigned __int8 v11; // dl | |
__int64 v12; // rax | |
unsigned __int64 v13; // kr00_8 | |
bool v14; // cf | |
__int64 *v15; // r8 | |
char result; // al | |
unsigned int v17; // ecx | |
char v18; // di | |
__int64 *v19; // r8 | |
unsigned __int8 *v20; // rcx | |
char v21; // cl | |
__int128 v22; // [rsp+20h] [rbp-38h] | |
__int128 v23; // [rsp+30h] [rbp-28h] | |
v2 = *a1; | |
if ( !*a1 ) | |
{ | |
v15 = (__int64 *)a1[4]; | |
if ( v15 ) | |
return sub_1400183F0("?'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", 1ui64, v15); | |
return 0; | |
} | |
v3 = a1[1]; | |
v4 = a1[2]; | |
if ( v4 < v3 && *(_BYTE *)(v2 + v4) == 95 ) | |
{ | |
a1[2] = v4 + 1; | |
v5 = 0i64; | |
LABEL_20: | |
if ( v5 < v4 - 1 ) | |
{ | |
v17 = *((_DWORD *)a1 + 6) + 1; | |
if ( v17 < 0x1F5 ) | |
{ | |
if ( a1[4] ) | |
{ | |
v23 = *((_OWORD *)a1 + 1); | |
v22 = *(_OWORD *)a1; | |
a1[2] = v5; | |
*((_DWORD *)a1 + 6) = v17; | |
result = sub_140012C00((__int64)a1); | |
*(_OWORD *)a1 = v22; | |
*((_OWORD *)a1 + 1) = v23; | |
return result; | |
} | |
return 0; | |
} | |
v18 = 1; | |
v8 = 0; | |
v19 = (__int64 *)a1[4]; | |
if ( !v19 ) | |
goto LABEL_29; | |
goto LABEL_26; | |
} | |
v8 = 1; | |
} | |
else | |
{ | |
v6 = 0i64; | |
v7 = a1[2]; | |
while ( 1 ) | |
{ | |
v8 = 1; | |
if ( v7 >= v3 ) | |
break; | |
v9 = *(_BYTE *)(v2 + v7); | |
if ( v9 == 95 ) | |
{ | |
a1[2] = v7 + 1; | |
v5 = v6 + 1; | |
if ( !v5 ) | |
break; | |
goto LABEL_20; | |
} | |
v10 = v9 - 48; | |
if ( (unsigned __int8)(v9 - 48) >= 0xAu ) | |
{ | |
if ( (unsigned __int8)(v9 - 97) >= 0x1Au ) | |
{ | |
if ( (unsigned __int8)(v9 - 65) >= 0x1Au ) | |
break; | |
v11 = v9 - 29; | |
} | |
else | |
{ | |
v11 = v9 - 87; | |
} | |
v10 = v11; | |
} | |
a1[2] = ++v7; | |
v13 = v6; | |
v12 = 62 * v6; | |
if ( is_mul_ok(0x3Eui64, v13) ) | |
{ | |
v14 = __CFADD__(v10, v12); | |
v6 = v10 + v12; | |
if ( !v14 ) | |
continue; | |
} | |
break; | |
} | |
} | |
v18 = 0; | |
v19 = (__int64 *)a1[4]; | |
if ( !v19 ) | |
{ | |
LABEL_29: | |
*a1 = 0i64; | |
*((_BYTE *)a1 + 8) = v18; | |
return 0; | |
} | |
LABEL_26: | |
v20 = byte_1400210C8; | |
if ( v8 ) | |
v20 = "{invalid syntax}"; | |
v21 = sub_1400183F0(v20, (9i64 * ((unsigned __int8)v8 ^ 1u)) | 0x10, v19); | |
result = 1; | |
if ( !v21 ) | |
goto LABEL_29; | |
return result; | |
} | |
// 1400210C8: using guessed type unsigned __int8 byte_1400210C8[25]; | |
//----- (0000000140011680) ---------------------------------------------------- | |
__int64 __fastcall sub_140011680(_QWORD *a1, unsigned int a2) | |
{ | |
unsigned int v2; // esi | |
unsigned int v5; // ecx | |
unsigned int v6; // eax | |
char v7; // al | |
unsigned int v8; // eax | |
unsigned int v10[14]; // [rsp+20h] [rbp-38h] BYREF | |
if ( a1 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( !(unsigned __int8)sub_140017E90(a1) ) | |
{ | |
while ( 1 ) | |
{ | |
v5 = 1114114; | |
v6 = 48; | |
switch ( a2 ) | |
{ | |
case 0u: | |
goto LABEL_18; | |
case 1u: | |
case 2u: | |
case 3u: | |
case 4u: | |
case 5u: | |
case 6u: | |
case 7u: | |
case 8u: | |
case 0xBu: | |
case 0xCu: | |
case 0xEu: | |
case 0xFu: | |
case 0x10u: | |
case 0x11u: | |
case 0x12u: | |
case 0x13u: | |
case 0x14u: | |
case 0x15u: | |
case 0x16u: | |
case 0x17u: | |
case 0x18u: | |
case 0x19u: | |
case 0x1Au: | |
case 0x1Bu: | |
case 0x1Cu: | |
case 0x1Du: | |
case 0x1Eu: | |
case 0x1Fu: | |
case 0x20u: | |
case 0x21u: | |
case 0x23u: | |
case 0x24u: | |
case 0x25u: | |
case 0x26u: | |
goto LABEL_10; | |
case 9u: | |
v6 = 116; | |
goto LABEL_18; | |
case 0xAu: | |
v6 = 110; | |
goto LABEL_18; | |
case 0xDu: | |
v6 = 114; | |
goto LABEL_18; | |
case 0x22u: | |
a2 = 1114112; | |
if ( !(unsigned __int8)sub_140017E90(a1) ) | |
continue; | |
return v2; | |
case 0x27u: | |
goto LABEL_12; | |
default: | |
if ( a2 == 92 ) | |
goto LABEL_12; | |
if ( a2 == 1114112 ) | |
return (unsigned int)sub_140017E90(a1); | |
LABEL_10: | |
if ( sub_14001B110(a2) || (v7 = sub_14001A050(a2), v5 = 1114113, !v7) ) | |
{ | |
_BitScanReverse(&v8, a2 | 1); | |
v6 = ((v8 ^ 0x1C) >> 2) ^ 7; | |
v5 = a2; | |
} | |
else | |
{ | |
LABEL_12: | |
v6 = a2; | |
} | |
LABEL_18: | |
v10[0] = v6; | |
v10[1] = 0; | |
v10[2] = v5; | |
v10[3] = 5; | |
while ( (unsigned int)sub_140016690(v10) != 1114112 ) | |
{ | |
if ( (unsigned __int8)sub_140017E90(a1) ) | |
return v2; | |
} | |
a2 = 1114112; | |
break; | |
} | |
} | |
} | |
} | |
else | |
{ | |
return 0; | |
} | |
return v2; | |
} | |
// 140011791: variable 'v2' is possibly undefined | |
//----- (0000000140011850) ---------------------------------------------------- | |
__int64 __fastcall sub_140011850(__int64 a1, unsigned __int64 a2) | |
{ | |
unsigned int v2; // edi | |
__int64 *v3; // rsi | |
unsigned __int64 v6; // r15 | |
bool v7; // cf | |
unsigned __int64 v8; // r15 | |
unsigned int v11; // [rsp+24h] [rbp-34h] BYREF | |
unsigned __int64 v12[6]; // [rsp+28h] [rbp-30h] BYREF | |
v3 = *(__int64 **)(a1 + 32); | |
if ( !v3 ) | |
return 0; | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)"'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
1ui64, | |
v3) ) | |
return v2; | |
if ( a2 ) | |
{ | |
v6 = *(unsigned int *)(a1 + 40); | |
v7 = v6 < a2; | |
v8 = v6 - a2; | |
if ( !v7 ) | |
{ | |
if ( v8 >= 0x1A ) | |
{ | |
if ( (unsigned __int8)sub_1400183F0("_!f64f32usizeu128u64u32u16u8isizei128i64i32i16i8strcharbool", 1ui64, v3) ) | |
return v2; | |
v12[0] = v8; | |
return (unsigned int)sub_14001AD00(v12, (__int64)v3); | |
} | |
else | |
{ | |
v11 = v8 + 97; | |
return (unsigned int)sub_140018820(&v11, v3); | |
} | |
} | |
if ( !(unsigned __int8)sub_1400183F0("{invalid syntax}", 0x10ui64, v3) ) | |
{ | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = 0; | |
return 0; | |
} | |
return v2; | |
} | |
return sub_1400183F0("_!f64f32usizeu128u64u32u16u8isizei128i64i32i16i8strcharbool", 1ui64, v3); | |
} | |
// 1400118B8: variable 'v2' is possibly undefined | |
// 140011850: using guessed type unsigned __int64 var_30[6]; | |
//----- (0000000140011940) ---------------------------------------------------- | |
__int64 __fastcall sub_140011940(__int64 a1) | |
{ | |
char *v1; // rbx | |
__int64 v3; // rcx | |
unsigned __int64 v4; // r8 | |
unsigned __int64 v5; // rax | |
unsigned __int64 v6; // r9 | |
unsigned __int64 v7; // rdi | |
unsigned __int64 v8; // rdi | |
__int64 *v9; // r8 | |
__int64 v10; // r15 | |
__int64 *v11; // r8 | |
__int64 *v12; // r8 | |
unsigned __int64 v14; // rax | |
bool v15; // cf | |
__int64 *v16; // r8 | |
unsigned __int64 v17; // rdi | |
char v18; // al | |
unsigned __int8 v19; // r11 | |
unsigned __int8 v20; // al | |
__int64 v21; // rax | |
__int64 *v22; // r8 | |
__int64 *v23; // r8 | |
__int64 v24; // rax | |
__int64 v25; // r14 | |
unsigned __int64 v26; // rcx | |
__int64 *v27; // r8 | |
v3 = *(_QWORD *)a1; | |
if ( v3 ) | |
{ | |
v4 = *(_QWORD *)(a1 + 8); | |
v5 = *(_QWORD *)(a1 + 16); | |
if ( v5 < v4 && *(_BYTE *)(v3 + v5) == 71 ) | |
{ | |
v6 = v5 + 1; | |
*(_QWORD *)(a1 + 16) = v5 + 1; | |
if ( v5 + 1 >= v4 || *(_BYTE *)(v3 + v6) != 95 ) | |
{ | |
v17 = 0i64; | |
while ( v6 < v4 ) | |
{ | |
v18 = *(_BYTE *)(v3 + v6); | |
if ( v18 == 95 ) | |
{ | |
*(_QWORD *)(a1 + 16) = v6 + 1; | |
v7 = v17 + 1; | |
if ( !v7 ) | |
goto LABEL_46; | |
goto LABEL_45; | |
} | |
v19 = v18 - 48; | |
if ( (unsigned __int8)(v18 - 48) >= 0xAu ) | |
{ | |
if ( (unsigned __int8)(v18 - 97) >= 0x1Au ) | |
{ | |
if ( (unsigned __int8)(v18 - 65) >= 0x1Au ) | |
goto LABEL_46; | |
v20 = v18 - 29; | |
} | |
else | |
{ | |
v20 = v18 - 87; | |
} | |
v19 = v20; | |
} | |
*(_QWORD *)(a1 + 16) = ++v6; | |
v21 = 62 * v17; | |
if ( is_mul_ok(0x3Eui64, v17) ) | |
{ | |
v17 = v19 + v21; | |
if ( !__CFADD__(v19, v21) ) | |
continue; | |
} | |
goto LABEL_46; | |
} | |
goto LABEL_46; | |
} | |
*(_QWORD *)(a1 + 16) = v5 + 2; | |
v7 = 0i64; | |
LABEL_45: | |
v8 = v7 + 1; | |
if ( !v8 ) | |
{ | |
LABEL_46: | |
v22 = *(__int64 **)(a1 + 32); | |
if ( !v22 || (LOBYTE(v1) = 1, !(unsigned __int8)sub_1400183F0("{invalid syntax}", 0x10ui64, v22)) ) | |
{ | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = 0; | |
LODWORD(v1) = 0; | |
} | |
return (unsigned int)v1; | |
} | |
} | |
else | |
{ | |
v8 = 0i64; | |
} | |
v9 = *(__int64 **)(a1 + 32); | |
if ( v9 ) | |
{ | |
if ( !v8 ) | |
goto LABEL_51; | |
LOBYTE(v1) = 1; | |
if ( !(unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)"for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
4ui64, | |
v9) ) | |
{ | |
++*(_DWORD *)(a1 + 40); | |
v10 = 1i64; | |
if ( !(unsigned __int8)sub_140011850(a1, 1ui64) ) | |
{ | |
while ( v8 != v10 ) | |
{ | |
if ( !v10 | |
|| (v11 = *(__int64 **)(a1 + 32)) == 0i64 | |
|| !(unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)", > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
2ui64, | |
v11) ) | |
{ | |
++*(_DWORD *)(a1 + 40); | |
++v10; | |
if ( !(unsigned __int8)sub_140011850(a1, 1ui64) ) | |
continue; | |
} | |
return (unsigned int)v1; | |
} | |
v23 = *(__int64 **)(a1 + 32); | |
if ( !v23 | |
|| !(unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)"> as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
2ui64, | |
v23) ) | |
{ | |
LABEL_51: | |
v24 = *(_QWORD *)a1; | |
if ( *(_QWORD *)a1 ) | |
{ | |
v25 = 0i64; | |
v1 = " + ; mut const unsafe extern \"\" fn( -> "; | |
while ( 1 ) | |
{ | |
v26 = *(_QWORD *)(a1 + 16); | |
if ( v26 < *(_QWORD *)(a1 + 8) && *(_BYTE *)(v24 + v26) == 69 ) | |
break; | |
v15 = v25-- == 0; | |
if ( !v15 | |
&& (v27 = *(__int64 **)(a1 + 32)) != 0i64 | |
&& (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)" + ; mut const unsafe extern \"\" fn( -> ", | |
3ui64, | |
v27) | |
|| (unsigned __int8)sub_140013900((__int64 *)a1) ) | |
{ | |
LOBYTE(v1) = 1; | |
goto LABEL_64; | |
} | |
v24 = *(_QWORD *)a1; | |
if ( !*(_QWORD *)a1 ) | |
goto LABEL_63; | |
} | |
*(_QWORD *)(a1 + 16) = v26 + 1; | |
} | |
LABEL_63: | |
LODWORD(v1) = 0; | |
LABEL_64: | |
*(_DWORD *)(a1 + 40) -= v8; | |
} | |
} | |
} | |
} | |
else | |
{ | |
v1 = 0i64; | |
while ( 1 ) | |
{ | |
v14 = *(_QWORD *)(a1 + 16); | |
if ( v14 < *(_QWORD *)(a1 + 8) && *(_BYTE *)(v3 + v14) == 69 ) | |
break; | |
v15 = v1-- == 0i64; | |
if ( !v15 | |
&& (v16 = *(__int64 **)(a1 + 32)) != 0i64 | |
&& (unsigned __int8)sub_1400183F0((unsigned __int8 *)" + ; mut const unsafe extern \"\" fn( -> ", 3ui64, v16) | |
|| (unsigned __int8)sub_140013900((__int64 *)a1) ) | |
{ | |
LOBYTE(v1) = 1; | |
return (unsigned int)v1; | |
} | |
v3 = *(_QWORD *)a1; | |
if ( !*(_QWORD *)a1 ) | |
goto LABEL_29; | |
} | |
*(_QWORD *)(a1 + 16) = v14 + 1; | |
LODWORD(v1) = 0; | |
} | |
return (unsigned int)v1; | |
} | |
v12 = *(__int64 **)(a1 + 32); | |
if ( v12 ) | |
return sub_1400183F0("?'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", 1ui64, v12); | |
LABEL_29: | |
LODWORD(v1) = 0; | |
return (unsigned int)v1; | |
} | |
// 140011C26: variable 'v1' is possibly undefined | |
//----- (0000000140011C40) ---------------------------------------------------- | |
char __fastcall sub_140011C40(__int64 a1) | |
{ | |
__int64 v2; // rcx | |
unsigned __int64 v3; // r8 | |
unsigned __int64 v4; // rax | |
unsigned __int64 v5; // r9 | |
unsigned __int64 v6; // rdi | |
unsigned __int64 v7; // rdi | |
__int64 *v8; // r8 | |
char v9; // bl | |
__int64 v10; // r15 | |
__int64 *v11; // r8 | |
__int64 *v12; // r8 | |
char result; // al | |
unsigned __int64 v14; // rdi | |
char v15; // al | |
unsigned __int8 v16; // r11 | |
unsigned __int8 v17; // al | |
__int64 v18; // rax | |
__int64 *v19; // r8 | |
__int64 *v20; // r8 | |
v2 = *(_QWORD *)a1; | |
if ( !v2 ) | |
{ | |
v12 = *(__int64 **)(a1 + 32); | |
if ( v12 ) | |
return sub_1400183F0("?'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", 1ui64, v12); | |
return 0; | |
} | |
v3 = *(_QWORD *)(a1 + 8); | |
v4 = *(_QWORD *)(a1 + 16); | |
if ( v4 < v3 && *(_BYTE *)(v2 + v4) == 71 ) | |
{ | |
v5 = v4 + 1; | |
*(_QWORD *)(a1 + 16) = v4 + 1; | |
if ( v4 + 1 >= v3 || *(_BYTE *)(v2 + v5) != 95 ) | |
{ | |
v14 = 0i64; | |
while ( v5 < v3 ) | |
{ | |
v15 = *(_BYTE *)(v2 + v5); | |
if ( v15 == 95 ) | |
{ | |
*(_QWORD *)(a1 + 16) = v5 + 1; | |
v6 = v14 + 1; | |
if ( !v6 ) | |
goto LABEL_36; | |
goto LABEL_35; | |
} | |
v16 = v15 - 48; | |
if ( (unsigned __int8)(v15 - 48) >= 0xAu ) | |
{ | |
if ( (unsigned __int8)(v15 - 97) >= 0x1Au ) | |
{ | |
if ( (unsigned __int8)(v15 - 65) >= 0x1Au ) | |
goto LABEL_36; | |
v17 = v15 - 29; | |
} | |
else | |
{ | |
v17 = v15 - 87; | |
} | |
v16 = v17; | |
} | |
*(_QWORD *)(a1 + 16) = ++v5; | |
v18 = 62 * v14; | |
if ( is_mul_ok(0x3Eui64, v14) ) | |
{ | |
v14 = v16 + v18; | |
if ( !__CFADD__(v16, v18) ) | |
continue; | |
} | |
goto LABEL_36; | |
} | |
goto LABEL_36; | |
} | |
*(_QWORD *)(a1 + 16) = v4 + 2; | |
v6 = 0i64; | |
LABEL_35: | |
v7 = v6 + 1; | |
if ( !v7 ) | |
{ | |
LABEL_36: | |
v19 = *(__int64 **)(a1 + 32); | |
if ( v19 ) | |
{ | |
v9 = 1; | |
if ( (unsigned __int8)sub_1400183F0("{invalid syntax}", 0x10ui64, v19) ) | |
return v9; | |
} | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = 0; | |
return 0; | |
} | |
} | |
else | |
{ | |
v7 = 0i64; | |
} | |
v8 = *(__int64 **)(a1 + 32); | |
if ( !v8 ) | |
return sub_140013160((__int64 *)a1); | |
if ( v7 ) | |
{ | |
v9 = 1; | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)"for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
4ui64, | |
v8) ) | |
return v9; | |
++*(_DWORD *)(a1 + 40); | |
v10 = 1i64; | |
if ( (unsigned __int8)sub_140011850(a1, 1ui64) ) | |
return v9; | |
while ( v7 != v10 ) | |
{ | |
if ( !v10 | |
|| (v11 = *(__int64 **)(a1 + 32)) == 0i64 | |
|| !(unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)", > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
2ui64, | |
v11) ) | |
{ | |
++*(_DWORD *)(a1 + 40); | |
++v10; | |
if ( !(unsigned __int8)sub_140011850(a1, 1ui64) ) | |
continue; | |
} | |
return v9; | |
} | |
v20 = *(__int64 **)(a1 + 32); | |
if ( v20 ) | |
{ | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)"> as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
2ui64, | |
v20) ) | |
return v9; | |
} | |
} | |
result = sub_140013160((__int64 *)a1); | |
*(_DWORD *)(a1 + 40) -= v7; | |
return result; | |
} | |
//----- (0000000140011E70) ---------------------------------------------------- | |
__int64 __fastcall sub_140011E70(__int64 *a1) | |
{ | |
__int64 v1; // rax | |
__int64 v3; // rdi | |
__int64 i; // rsi | |
unsigned __int64 v5; // rcx | |
__int64 *v6; // r8 | |
v1 = *a1; | |
if ( !*a1 ) | |
return 0i64; | |
v3 = 0i64; | |
for ( i = 0i64; ; ++i ) | |
{ | |
v5 = a1[2]; | |
if ( v5 < a1[1] && *(_BYTE *)(v1 + v5) == 69 ) | |
break; | |
if ( i ) | |
{ | |
v6 = (__int64 *)a1[4]; | |
if ( v6 ) | |
{ | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)", > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
2ui64, | |
v6) ) | |
return 1i64; | |
} | |
} | |
if ( (unsigned __int8)sub_140012C00((__int64)a1) ) | |
return 1i64; | |
v1 = *a1; | |
if ( !*a1 ) | |
return v3; | |
} | |
a1[2] = v5 + 1; | |
return 0i64; | |
} | |
//----- (0000000140011F00) ---------------------------------------------------- | |
__int64 __fastcall sub_140011F00(__int64 *a1) | |
{ | |
__int64 v1; // rax | |
__int64 v3; // rsi | |
__int64 v4; // r14 | |
unsigned __int64 v5; // rcx | |
__int64 *v7; // r8 | |
v1 = *a1; | |
if ( !*a1 ) | |
return 0i64; | |
v3 = 0i64; | |
v4 = 0i64; | |
while ( 1 ) | |
{ | |
v5 = a1[2]; | |
if ( v5 < a1[1] && *(_BYTE *)(v1 + v5) == 69 ) | |
break; | |
if ( v4-- != 0 ) | |
{ | |
v7 = (__int64 *)a1[4]; | |
if ( v7 ) | |
{ | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)", > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
2ui64, | |
v7) ) | |
return 1i64; | |
} | |
} | |
if ( sub_140012AD0(a1) ) | |
return 1i64; | |
v1 = *a1; | |
if ( !*a1 ) | |
return v3; | |
} | |
a1[2] = v5 + 1; | |
return 0i64; | |
} | |
//----- (0000000140011F90) ---------------------------------------------------- | |
__int64 __fastcall sub_140011F90(__int64 *a1, __int64 a2) | |
{ | |
__int64 v2; // rax | |
__int64 v4; // rsi | |
__int64 v5; // r14 | |
unsigned __int64 v6; // rcx | |
__int64 *v8; // r8 | |
v2 = *a1; | |
if ( !*a1 ) | |
return 0i64; | |
v4 = 0i64; | |
v5 = 0i64; | |
while ( 1 ) | |
{ | |
v6 = a1[2]; | |
if ( v6 < a1[1] && *(_BYTE *)(v2 + v6) == 69 ) | |
break; | |
if ( v5-- != 0 ) | |
{ | |
v8 = (__int64 *)a1[4]; | |
if ( v8 ) | |
{ | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)", > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
2ui64, | |
v8) ) | |
return 1i64; | |
} | |
} | |
LOBYTE(a2) = 1; | |
if ( (unsigned __int8)sub_140013AF0((__int64)a1, a2) ) | |
return 1i64; | |
v2 = *a1; | |
if ( !*a1 ) | |
return v4; | |
} | |
a1[2] = v6 + 1; | |
return 0i64; | |
} | |
// 140011FE5: variable 'a2' is possibly undefined | |
//----- (0000000140012020) ---------------------------------------------------- | |
__int64 __fastcall sub_140012020(__int64 *a1) | |
{ | |
__int64 v2; // rcx | |
__int64 i; // r12 | |
unsigned __int64 v4; // rax | |
__int64 *v5; // r8 | |
unsigned __int64 v6; // r8 | |
unsigned __int64 v7; // rax | |
unsigned __int64 v8; // r9 | |
unsigned __int64 v9; // rax | |
char v10; // dl | |
unsigned __int8 v11; // r10 | |
unsigned __int8 v12; // dl | |
__int64 v13; // rax | |
unsigned __int64 v14; // kr00_8 | |
bool v15; // cf | |
__int64 *v16; // r8 | |
__int64 v17; // r13 | |
unsigned __int64 v18; // rax | |
__int64 v19; // rdx | |
__int64 *v20; // r13 | |
char v21; // r13 | |
__int64 *v22; // r8 | |
unsigned __int8 *v23; // rcx | |
__int64 *v24; // r8 | |
__int128 v26[2]; // [rsp+20h] [rbp-88h] BYREF | |
__int128 v27[6]; // [rsp+40h] [rbp-68h] BYREF | |
v2 = *a1; | |
if ( v2 ) | |
{ | |
for ( i = 0i64; ; ++i ) | |
{ | |
v4 = a1[2]; | |
if ( v4 < a1[1] && *(_BYTE *)(v2 + v4) == 69 ) | |
break; | |
if ( !i ) | |
goto LABEL_11; | |
v5 = (__int64 *)a1[4]; | |
if ( !v5 ) | |
goto LABEL_11; | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)", > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
2ui64, | |
v5) ) | |
return 1i64; | |
v2 = *a1; | |
if ( !*a1 ) | |
{ | |
v16 = (__int64 *)a1[4]; | |
if ( !v16 ) | |
return 0i64; | |
v17 = 1i64; | |
if ( (unsigned __int8)sub_1400183F0( | |
"?'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
1ui64, | |
v16) ) | |
return v17; | |
} | |
else | |
{ | |
LABEL_11: | |
v6 = a1[1]; | |
v7 = a1[2]; | |
if ( v7 < v6 && *(_BYTE *)(v2 + v7) == 115 ) | |
{ | |
v8 = v7 + 1; | |
a1[2] = v7 + 1; | |
if ( v7 + 1 >= v6 || *(_BYTE *)(v2 + v8) != 95 ) | |
{ | |
v9 = 0i64; | |
while ( v8 < v6 ) | |
{ | |
v10 = *(_BYTE *)(v2 + v8); | |
if ( v10 == 95 ) | |
{ | |
a1[2] = v8 + 1; | |
v18 = v9 + 1; | |
if ( v18 && v18 != -1i64 ) | |
goto LABEL_33; | |
break; | |
} | |
v11 = v10 - 48; | |
if ( (unsigned __int8)(v10 - 48) >= 0xAu ) | |
{ | |
if ( (unsigned __int8)(v10 - 97) >= 0x1Au ) | |
{ | |
if ( (unsigned __int8)(v10 - 65) >= 0x1Au ) | |
break; | |
v12 = v10 - 29; | |
} | |
else | |
{ | |
v12 = v10 - 87; | |
} | |
v11 = v12; | |
} | |
a1[2] = ++v8; | |
v14 = v9; | |
v13 = 62 * v9; | |
if ( is_mul_ok(0x3Eui64, v14) ) | |
{ | |
v15 = __CFADD__(v11, v13); | |
v9 = v11 + v13; | |
if ( !v15 ) | |
continue; | |
} | |
break; | |
} | |
v24 = (__int64 *)a1[4]; | |
if ( !v24 || !(unsigned __int8)sub_1400183F0("{invalid syntax}", 0x10ui64, v24) ) | |
{ | |
*a1 = 0i64; | |
*((_BYTE *)a1 + 8) = 0; | |
return 0i64; | |
} | |
return 1i64; | |
} | |
a1[2] = v7 + 2; | |
} | |
LABEL_33: | |
sub_140010F20((__int64)v26, (__int64)a1); | |
if ( *(_QWORD *)&v26[0] ) | |
{ | |
v27[1] = v26[1]; | |
v27[0] = v26[0]; | |
v20 = (__int64 *)a1[4]; | |
if ( v20 | |
&& ((unsigned __int8)sub_1400103E0((char **)v27, (__int64 *)a1[4]) | |
|| (unsigned __int8)sub_1400183F0(": 0x", 2ui64, v20)) ) | |
{ | |
return 1i64; | |
} | |
LOBYTE(v19) = 1; | |
if ( (unsigned __int8)sub_140013AF0((__int64)a1, v19) ) | |
return 1i64; | |
} | |
else | |
{ | |
v21 = BYTE8(v26[0]); | |
v22 = (__int64 *)a1[4]; | |
if ( v22 ) | |
{ | |
v23 = byte_1400210C8; | |
if ( !BYTE8(v26[0]) ) | |
v23 = "{invalid syntax}"; | |
if ( (unsigned __int8)sub_1400183F0(v23, (9i64 * BYTE8(v26[0])) | 0x10, v22) ) | |
return 1i64; | |
} | |
*a1 = 0i64; | |
*((_BYTE *)a1 + 8) = v21; | |
} | |
} | |
v2 = *a1; | |
if ( !*a1 ) | |
return 0i64; | |
} | |
a1[2] = v4 + 1; | |
} | |
return 0i64; | |
} | |
// 140012075: variable 'v19' is possibly undefined | |
// 1400210C8: using guessed type unsigned __int8 byte_1400210C8[25]; | |
//----- (00000001400122E0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400122E0(__int64 *a1, __int64 a2) | |
{ | |
__int64 v2; // rax | |
__int64 v4; // rdi | |
__int64 i; // rsi | |
unsigned __int64 v6; // rcx | |
__int64 *v7; // r8 | |
v2 = *a1; | |
if ( !*a1 ) | |
return 0i64; | |
v4 = 0i64; | |
for ( i = 0i64; ; ++i ) | |
{ | |
v6 = a1[2]; | |
if ( v6 < a1[1] && *(_BYTE *)(v2 + v6) == 69 ) | |
break; | |
if ( i ) | |
{ | |
v7 = (__int64 *)a1[4]; | |
if ( v7 ) | |
{ | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)", > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
2ui64, | |
v7) ) | |
return 1i64; | |
} | |
} | |
LOBYTE(a2) = 1; | |
if ( (unsigned __int8)sub_140013AF0((__int64)a1, a2) ) | |
return 1i64; | |
v2 = *a1; | |
if ( !*a1 ) | |
return v4; | |
} | |
a1[2] = v6 + 1; | |
return 0i64; | |
} | |
// 140012334: variable 'a2' is possibly undefined | |
//----- (0000000140012370) ---------------------------------------------------- | |
__int64 __fastcall sub_140012370(__int64 a1, unsigned int a2) | |
{ | |
unsigned int v2; // edi | |
__int64 v4; // rcx | |
unsigned int v5; // eax | |
char v6; // bl | |
unsigned __int64 v7; // r8 | |
unsigned __int64 v8; // rax | |
int v10; // ebx | |
unsigned __int64 v11; // rdx | |
unsigned __int64 v12; // r9 | |
__int64 *v13; // r8 | |
char v14; // al | |
unsigned __int8 v15; // bl | |
__int64 *v16; // r8 | |
unsigned __int8 *v17; // rcx | |
__int64 *v18; // r8 | |
__int64 *v19; // r8 | |
unsigned __int64 v20; // rax | |
unsigned __int64 v21; // rbx | |
__int64 v22; // r14 | |
unsigned __int64 v23; // rbx | |
__int64 *v24; // r8 | |
__int64 *v25; // rdx | |
unsigned __int8 v26; // bl | |
__int64 *v27; // r8 | |
unsigned __int8 *v28; // rcx | |
unsigned __int64 v29; // rax | |
char v30; // dl | |
unsigned __int8 v31; // r11 | |
unsigned __int8 v32; // dl | |
__int64 v33; // rax | |
unsigned __int64 v34; // kr00_8 | |
bool v35; // cf | |
__int64 *v36; // rdx | |
__int64 v37; // rcx | |
__int64 *v38; // r8 | |
__int64 *v39; // r8 | |
__int64 *v40; // r8 | |
unsigned __int64 v42; // rax | |
__int64 *v43; // r8 | |
__int64 *v44; // r8 | |
__int64 *v45; // r8 | |
char *v46; // rcx | |
__int64 *v47; // r8 | |
__int64 *v48; // r8 | |
__int64 *v49; // r8 | |
char *v50; // rcx | |
unsigned __int64 v51; // rdx | |
char v52; // al | |
__int64 *v53; // rdx | |
__int64 *v54; // r8 | |
__int64 *v55; // rdx | |
__int64 *v56; // r8 | |
__int64 v57; // rdx | |
__int128 v58; // [rsp+20h] [rbp-98h] BYREF | |
__int128 v59; // [rsp+30h] [rbp-88h] | |
__int128 v60; // [rsp+40h] [rbp-78h] BYREF | |
__int128 v61; // [rsp+50h] [rbp-68h] | |
unsigned __int64 v62; // [rsp+68h] [rbp-50h] BYREF | |
__int128 v63[4]; // [rsp+70h] [rbp-48h] BYREF | |
v4 = *(_QWORD *)a1; | |
if ( !v4 ) | |
{ | |
LABEL_74: | |
v40 = *(__int64 **)(a1 + 32); | |
if ( v40 ) | |
return sub_1400183F0("?'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", 1ui64, v40); | |
return 0; | |
} | |
v5 = *(_DWORD *)(a1 + 24) + 1; | |
v6 = (v5 < 0x1F5) + 1; | |
*(_DWORD *)(a1 + 24) = v5; | |
if ( v5 >= 0x1F5 ) | |
{ | |
v13 = *(__int64 **)(a1 + 32); | |
if ( v13 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0(byte_1400210C8, 0x19ui64, v13) ) | |
return v2; | |
} | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = v6; | |
return 0; | |
} | |
v7 = *(_QWORD *)(a1 + 8); | |
v8 = *(_QWORD *)(a1 + 16); | |
if ( v8 >= v7 ) | |
{ | |
LABEL_92: | |
v47 = *(__int64 **)(a1 + 32); | |
if ( v47 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0("{invalid syntax}", 0x10ui64, v47) ) | |
return v2; | |
} | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = 0; | |
return 0; | |
} | |
v10 = *(unsigned __int8 *)(v4 + v8); | |
v11 = v8 + 1; | |
*(_QWORD *)(a1 + 16) = v8 + 1; | |
switch ( v10 ) | |
{ | |
case 'B': | |
v14 = sub_140011180((__int64 *)a1, a2); | |
LOBYTE(v2) = 1; | |
goto LABEL_89; | |
case 'C': | |
sub_140010DE0((__int64)&v58, (__int64 *)a1); | |
if ( (_BYTE)v58 ) | |
goto LABEL_15; | |
v62 = *((_QWORD *)&v58 + 1); | |
if ( *(_QWORD *)a1 ) | |
{ | |
sub_140010F20((__int64)&v58, a1); | |
if ( !(_QWORD)v58 ) | |
goto LABEL_69; | |
v63[1] = v59; | |
v63[0] = v58; | |
v36 = *(__int64 **)(a1 + 32); | |
if ( v36 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400103E0((char **)v63, v36) ) | |
return v2; | |
v37 = *(_QWORD *)(a1 + 32); | |
if ( v37 ) | |
{ | |
if ( !sub_140017C40(v37) | |
&& ((unsigned __int8)sub_140017BE0(*(_QWORD **)(a1 + 32)) | |
|| (unsigned __int8)sub_14001A4F0(&v62, *(_QWORD *)(a1 + 32)) | |
|| (unsigned __int8)sub_140017BE0(*(_QWORD **)(a1 + 32))) ) | |
{ | |
LOBYTE(v2) = 1; | |
return v2; | |
} | |
} | |
} | |
goto LABEL_90; | |
} | |
v38 = *(__int64 **)(a1 + 32); | |
if ( !v38 ) | |
return 0; | |
return (unsigned int)sub_1400183F0( | |
"?'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
1ui64, | |
v38); | |
case 'I': | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_140012370(a1, a2) ) | |
return v2; | |
if ( (_BYTE)a2 ) | |
{ | |
v18 = *(__int64 **)(a1 + 32); | |
if ( v18 ) | |
{ | |
if ( (unsigned __int8)sub_1400183F0(byte_140020C00, 2ui64, v18) ) | |
return v2; | |
} | |
} | |
v19 = *(__int64 **)(a1 + 32); | |
if ( v19 ) | |
{ | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)"<>()C,", 1ui64, v19) ) | |
return v2; | |
} | |
if ( sub_140011F00((__int64 *)a1) ) | |
return v2; | |
goto LABEL_86; | |
case 'M': | |
case 'X': | |
if ( v11 >= v7 || *(_BYTE *)(v4 + v11) != 115 ) | |
goto LABEL_78; | |
v12 = v8 + 2; | |
*(_QWORD *)(a1 + 16) = v8 + 2; | |
if ( v8 + 2 < v7 && *(_BYTE *)(v4 + v12) == 95 ) | |
{ | |
*(_QWORD *)(a1 + 16) = v8 + 3; | |
} | |
else | |
{ | |
v29 = 0i64; | |
while ( 1 ) | |
{ | |
if ( v12 >= v7 ) | |
goto LABEL_92; | |
v30 = *(_BYTE *)(v4 + v12); | |
if ( v30 == 95 ) | |
break; | |
v31 = v30 - 48; | |
if ( (unsigned __int8)(v30 - 48) >= 0xAu ) | |
{ | |
if ( (unsigned __int8)(v30 - 97) >= 0x1Au ) | |
{ | |
if ( (unsigned __int8)(v30 - 65) >= 0x1Au ) | |
goto LABEL_92; | |
v32 = v30 - 29; | |
} | |
else | |
{ | |
v32 = v30 - 87; | |
} | |
v31 = v32; | |
} | |
*(_QWORD *)(a1 + 16) = ++v12; | |
v34 = v29; | |
v33 = 62 * v29; | |
if ( is_mul_ok(0x3Eui64, v34) ) | |
{ | |
v35 = __CFADD__(v31, v33); | |
v29 = v31 + v33; | |
if ( !v35 ) | |
continue; | |
} | |
goto LABEL_92; | |
} | |
*(_QWORD *)(a1 + 16) = v12 + 1; | |
v42 = v29 + 1; | |
if ( !v42 || v42 == -1i64 ) | |
goto LABEL_92; | |
} | |
LABEL_78: | |
sub_140011120(a1); | |
LABEL_79: | |
v43 = *(__int64 **)(a1 + 32); | |
if ( v43 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)"<>()C,", 1ui64, v43) ) | |
return v2; | |
} | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_140012C00(a1) ) | |
return v2; | |
if ( (_BYTE)v10 != 77 ) | |
{ | |
v44 = *(__int64 **)(a1 + 32); | |
if ( v44 ) | |
{ | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)" as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
4ui64, | |
v44) ) | |
return v2; | |
} | |
if ( (unsigned __int8)sub_140012370(a1, 0i64) ) | |
return v2; | |
} | |
LABEL_86: | |
v45 = *(__int64 **)(a1 + 32); | |
if ( !v45 ) | |
goto LABEL_90; | |
v46 = ">()C,"; | |
goto LABEL_88; | |
case 'N': | |
v20 = sub_140010EC0((_QWORD *)a1); | |
v21 = v20; | |
if ( (v20 & 1) != 0 ) | |
{ | |
v26 = BYTE1(v20) & 1; | |
v27 = *(__int64 **)(a1 + 32); | |
if ( v27 ) | |
{ | |
v28 = byte_1400210C8; | |
if ( !v26 ) | |
v28 = "{invalid syntax}"; | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0(v28, (9i64 * v26) | 0x10, v27) ) | |
return v2; | |
} | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = v26; | |
return 0; | |
} | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_140012370(a1, a2) ) | |
return v2; | |
if ( *(_QWORD *)a1 ) | |
goto LABEL_31; | |
v39 = *(__int64 **)(a1 + 32); | |
if ( !v39 ) | |
return 0; | |
if ( (unsigned __int8)sub_1400183F0(byte_140020C00, 2ui64, v39) ) | |
return v2; | |
if ( !*(_QWORD *)a1 ) | |
goto LABEL_74; | |
LABEL_31: | |
sub_140010DE0((__int64)&v58, (__int64 *)a1); | |
if ( (_BYTE)v58 ) | |
{ | |
LABEL_15: | |
v15 = BYTE1(v58); | |
v16 = *(__int64 **)(a1 + 32); | |
if ( !v16 ) | |
goto LABEL_19; | |
goto LABEL_16; | |
} | |
if ( !*(_QWORD *)a1 ) | |
goto LABEL_74; | |
v22 = *((_QWORD *)&v58 + 1); | |
sub_140010F20((__int64)&v58, a1); | |
if ( !(_QWORD)v58 ) | |
{ | |
LABEL_69: | |
v15 = BYTE8(v58); | |
v16 = *(__int64 **)(a1 + 32); | |
if ( !v16 ) | |
goto LABEL_19; | |
LABEL_16: | |
v17 = byte_1400210C8; | |
if ( !v15 ) | |
v17 = "{invalid syntax}"; | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0(v17, (9i64 * v15) | 0x10, v16) ) | |
return v2; | |
LABEL_19: | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = v15; | |
return 0; | |
} | |
v23 = HIDWORD(v21); | |
v61 = v59; | |
v60 = v58; | |
if ( (_DWORD)v23 != 1114112 ) | |
{ | |
v48 = *(__int64 **)(a1 + 32); | |
if ( v48 | |
&& (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)"::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
3ui64, | |
v48) ) | |
{ | |
return v2; | |
} | |
if ( (_DWORD)v23 == 67 ) | |
{ | |
v49 = *(__int64 **)(a1 + 32); | |
if ( v49 ) | |
{ | |
v50 = "closure:#[]dyn + ; mut const unsafe extern \"\" fn( -> "; | |
v51 = 7i64; | |
goto LABEL_105; | |
} | |
} | |
else if ( (_DWORD)v23 == 83 ) | |
{ | |
v49 = *(__int64 **)(a1 + 32); | |
if ( v49 ) | |
{ | |
v50 = "shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> "; | |
v51 = 4i64; | |
LABEL_105: | |
v52 = sub_1400183F0((unsigned __int8 *)v50, v51, v49); | |
goto LABEL_108; | |
} | |
} | |
else | |
{ | |
v53 = *(__int64 **)(a1 + 32); | |
LODWORD(v58) = v23; | |
if ( v53 ) | |
{ | |
v52 = sub_140018820((unsigned int *)&v58, v53); | |
LABEL_108: | |
if ( v52 ) | |
return v2; | |
} | |
} | |
if ( *((_QWORD *)&v61 + 1) | *((_QWORD *)&v60 + 1) ) | |
{ | |
v54 = *(__int64 **)(a1 + 32); | |
if ( !v54 ) | |
goto LABEL_90; | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)":#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
1ui64, | |
v54) ) | |
return v2; | |
v55 = *(__int64 **)(a1 + 32); | |
if ( !v55 ) | |
goto LABEL_90; | |
if ( (unsigned __int8)sub_1400103E0((char **)&v60, v55) ) | |
return v2; | |
} | |
v56 = *(__int64 **)(a1 + 32); | |
if ( !v56 ) | |
goto LABEL_90; | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)"#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
1ui64, | |
v56) ) | |
return v2; | |
v57 = *(_QWORD *)(a1 + 32); | |
*(_QWORD *)&v58 = v22; | |
if ( !v57 ) | |
goto LABEL_90; | |
if ( (unsigned __int8)sub_14001AD00((unsigned __int64 *)&v58, v57) ) | |
return v2; | |
v45 = *(__int64 **)(a1 + 32); | |
if ( !v45 ) | |
{ | |
LABEL_90: | |
if ( *(_QWORD *)a1 ) | |
--*(_DWORD *)(a1 + 24); | |
return 0; | |
} | |
v46 = "}0"; | |
LABEL_88: | |
v14 = sub_1400183F0((unsigned __int8 *)v46, 1ui64, v45); | |
goto LABEL_89; | |
} | |
if ( !(*((_QWORD *)&v61 + 1) | *((_QWORD *)&v60 + 1)) ) | |
goto LABEL_90; | |
v24 = *(__int64 **)(a1 + 32); | |
if ( !v24 ) | |
goto LABEL_90; | |
if ( (unsigned __int8)sub_1400183F0(byte_140020C00, 2ui64, v24) ) | |
return v2; | |
v25 = *(__int64 **)(a1 + 32); | |
if ( !v25 ) | |
goto LABEL_90; | |
v14 = sub_1400103E0((char **)&v60, v25); | |
LABEL_89: | |
if ( !v14 ) | |
goto LABEL_90; | |
return v2; | |
case 'Y': | |
goto LABEL_79; | |
default: | |
goto LABEL_92; | |
} | |
} | |
// 140012929: variable 'v2' is possibly undefined | |
// 140020C00: using guessed type unsigned __int8 byte_140020C00[8]; | |
// 1400210C8: using guessed type unsigned __int8 byte_1400210C8[25]; | |
//----- (0000000140012AD0) ---------------------------------------------------- | |
char __fastcall sub_140012AD0(_QWORD *a1) | |
{ | |
__int64 v2; // rcx | |
unsigned __int64 v3; // r8 | |
unsigned __int64 v4; // rax | |
unsigned __int64 v5; // r9 | |
unsigned __int64 v6; // rax | |
char result; // al | |
unsigned __int64 v8; // rax | |
char v9; // dl | |
unsigned __int8 v10; // r11 | |
unsigned __int8 v11; // dl | |
__int64 v12; // rax | |
unsigned __int64 v13; // kr00_8 | |
bool v14; // cf | |
__int64 *v15; // r8 | |
char v16; // cl | |
v2 = *a1; | |
if ( !v2 ) | |
return sub_140012C00((__int64)a1); | |
v3 = a1[1]; | |
v4 = a1[2]; | |
if ( v4 >= v3 ) | |
return sub_140012C00((__int64)a1); | |
if ( *(_BYTE *)(v2 + v4) != 76 ) | |
{ | |
if ( *(_BYTE *)(v2 + v4) == 75 ) | |
{ | |
a1[2] = v4 + 1; | |
return sub_140013AF0((__int64)a1, 0i64); | |
} | |
return sub_140012C00((__int64)a1); | |
} | |
v5 = v4 + 1; | |
a1[2] = v4 + 1; | |
if ( v4 + 1 < v3 && *(_BYTE *)(v2 + v5) == 95 ) | |
{ | |
a1[2] = v4 + 2; | |
v6 = 0i64; | |
return sub_140011850((__int64)a1, v6); | |
} | |
else | |
{ | |
v8 = 0i64; | |
while ( v5 < v3 ) | |
{ | |
v9 = *(_BYTE *)(v2 + v5); | |
if ( v9 == 95 ) | |
{ | |
a1[2] = v5 + 1; | |
v6 = v8 + 1; | |
if ( v6 ) | |
return sub_140011850((__int64)a1, v6); | |
break; | |
} | |
v10 = v9 - 48; | |
if ( (unsigned __int8)(v9 - 48) >= 0xAu ) | |
{ | |
if ( (unsigned __int8)(v9 - 97) >= 0x1Au ) | |
{ | |
if ( (unsigned __int8)(v9 - 65) >= 0x1Au ) | |
break; | |
v11 = v9 - 29; | |
} | |
else | |
{ | |
v11 = v9 - 87; | |
} | |
v10 = v11; | |
} | |
a1[2] = ++v5; | |
v13 = v8; | |
v12 = 62 * v8; | |
if ( is_mul_ok(0x3Eui64, v13) ) | |
{ | |
v14 = __CFADD__(v10, v12); | |
v8 = v10 + v12; | |
if ( !v14 ) | |
continue; | |
} | |
break; | |
} | |
v15 = (__int64 *)a1[4]; | |
if ( !v15 || (v16 = sub_1400183F0("{invalid syntax}", 0x10ui64, v15), result = 1, !v16) ) | |
{ | |
*a1 = 0i64; | |
*((_BYTE *)a1 + 8) = 0; | |
return 0; | |
} | |
} | |
return result; | |
} | |
//----- (0000000140012C00) ---------------------------------------------------- | |
__int64 __fastcall sub_140012C00(__int64 a1) | |
{ | |
unsigned int v1; // edi | |
__int64 v3; // r15 | |
unsigned __int64 v4; // r12 | |
unsigned __int64 v5; // rbx | |
char v6; // r14 | |
unsigned __int64 v7; // r13 | |
unsigned __int8 v8; // al | |
int v9; // edx | |
unsigned int v10; // eax | |
__int64 *v11; // r8 | |
__int64 v12; // rdx | |
__int64 *v13; // r8 | |
__int64 *v14; // r8 | |
char v15; // al | |
__int64 *v16; // r8 | |
unsigned __int8 *v17; // rcx | |
unsigned __int64 v18; // rdx | |
__int64 *v20; // r8 | |
__int64 *v21; // r8 | |
__int64 *v22; // rbx | |
char *v23; // rcx | |
unsigned __int64 v24; // rdx | |
__int64 *v25; // r8 | |
unsigned __int8 v26; // bl | |
__int64 *v27; // r8 | |
unsigned __int8 *v28; // rcx | |
__int64 *v29; // r8 | |
unsigned __int64 v30; // rax | |
unsigned __int64 v31; // rbx | |
__int64 *v32; // r8 | |
__int64 *v33; // r8 | |
__int64 v34; // rdx | |
__int64 *v35; // r8 | |
__int64 *v36; // r8 | |
char v37; // al | |
__int64 *v38; // r8 | |
__int64 *v39; // r8 | |
__int64 *v40; // r8 | |
char v41; // [rsp+20h] [rbp-48h] BYREF | |
unsigned __int8 v42; // [rsp+21h] [rbp-47h] | |
unsigned __int64 v43; // [rsp+28h] [rbp-40h] | |
v3 = *(_QWORD *)a1; | |
if ( !*(_QWORD *)a1 ) | |
{ | |
v16 = *(__int64 **)(a1 + 32); | |
if ( !v16 ) | |
return 0; | |
v17 = "?'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> "; | |
v18 = 1i64; | |
return sub_1400183F0(v17, v18, v16); | |
} | |
v4 = *(_QWORD *)(a1 + 8); | |
v5 = *(_QWORD *)(a1 + 16); | |
if ( v5 >= v4 ) | |
{ | |
v20 = *(__int64 **)(a1 + 32); | |
if ( v20 ) | |
{ | |
LOBYTE(v1) = 1; | |
if ( (unsigned __int8)sub_1400183F0("{invalid syntax}", 0x10ui64, v20) ) | |
return v1; | |
} | |
LABEL_21: | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = 0; | |
return 0; | |
} | |
v6 = *(_BYTE *)(v3 + v5); | |
v7 = v5 + 1; | |
*(_QWORD *)(a1 + 16) = v5 + 1; | |
v8 = v6 - 97; | |
if ( (unsigned __int8)(v6 - 97) < 0x1Au ) | |
{ | |
v9 = 62716863; | |
if ( _bittest(&v9, v8) ) | |
{ | |
v16 = *(__int64 **)(a1 + 32); | |
if ( !v16 ) | |
return 0; | |
v17 = (unsigned __int8 *)*(&off_1400213A0 + (char)v8); | |
v18 = qword_1400212D0[(char)v8]; | |
return sub_1400183F0(v17, v18, v16); | |
} | |
} | |
v10 = *(_DWORD *)(a1 + 24) + 1; | |
*(_DWORD *)(a1 + 24) = v10; | |
if ( v10 <= 0x1F4 ) | |
{ | |
switch ( v6 ) | |
{ | |
case 'A': | |
case 'S': | |
v11 = *(__int64 **)(a1 + 32); | |
if ( !v11 | |
|| (LOBYTE(v1) = 1, | |
!(unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)"[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
1ui64, | |
v11)) ) | |
{ | |
LOBYTE(v1) = 1; | |
if ( !(unsigned __int8)sub_140012C00(a1) ) | |
{ | |
if ( v6 != 65 | |
|| ((v13 = *(__int64 **)(a1 + 32)) == 0i64 | |
|| !(unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)"; mut const unsafe extern \"\" fn( -> ", | |
2ui64, | |
v13)) | |
&& (LOBYTE(v1) = 1, LOBYTE(v12) = 1, !(unsigned __int8)sub_140013AF0(a1, v12)) ) | |
{ | |
v14 = *(__int64 **)(a1 + 32); | |
if ( !v14 ) | |
goto LABEL_79; | |
v15 = sub_1400183F0((unsigned __int8 *)"]dyn + ; mut const unsafe extern \"\" fn( -> ", 1ui64, v14); | |
goto LABEL_77; | |
} | |
} | |
} | |
return v1; | |
case 'B': | |
v15 = sub_1400114E0((__int64 *)a1); | |
goto LABEL_77; | |
case 'D': | |
v29 = *(__int64 **)(a1 + 32); | |
if ( v29 ) | |
{ | |
LOBYTE(v1) = 1; | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)"dyn + ; mut const unsafe extern \"\" fn( -> ", | |
4ui64, | |
v29) ) | |
return v1; | |
} | |
LOBYTE(v1) = 1; | |
if ( (unsigned __int8)sub_140011940(a1) ) | |
return v1; | |
if ( *(_QWORD *)a1 | |
&& (v30 = *(_QWORD *)(a1 + 16), v30 < *(_QWORD *)(a1 + 8)) | |
&& *(_BYTE *)(*(_QWORD *)a1 + v30) == 76 ) | |
{ | |
*(_QWORD *)(a1 + 16) = v30 + 1; | |
sub_140010D20((__int64)&v41, (__int64 *)a1); | |
if ( v41 ) | |
{ | |
LABEL_36: | |
v26 = v42; | |
v27 = *(__int64 **)(a1 + 32); | |
if ( !v27 ) | |
goto LABEL_40; | |
v28 = byte_1400210C8; | |
if ( !v42 ) | |
v28 = "{invalid syntax}"; | |
LOBYTE(v1) = 1; | |
if ( !(unsigned __int8)sub_1400183F0(v28, (9i64 * v42) | 0x10, v27) ) | |
{ | |
LABEL_40: | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = v26; | |
return 0; | |
} | |
} | |
else | |
{ | |
v31 = v43; | |
if ( !v43 ) | |
goto LABEL_79; | |
v32 = *(__int64 **)(a1 + 32); | |
if ( !v32 | |
|| !(unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)" + ; mut const unsafe extern \"\" fn( -> ", | |
3ui64, | |
v32) ) | |
{ | |
v15 = sub_140011850(a1, v31); | |
LABEL_78: | |
if ( !v15 ) | |
{ | |
LABEL_79: | |
if ( *(_QWORD *)a1 ) | |
--*(_DWORD *)(a1 + 24); | |
return 0; | |
} | |
} | |
} | |
} | |
else | |
{ | |
v38 = *(__int64 **)(a1 + 32); | |
if ( !v38 || !(unsigned __int8)sub_1400183F0("{invalid syntax}", 0x10ui64, v38) ) | |
goto LABEL_21; | |
} | |
break; | |
case 'F': | |
v15 = sub_140011C40(a1); | |
goto LABEL_77; | |
case 'O': | |
case 'P': | |
v22 = *(__int64 **)(a1 + 32); | |
if ( !v22 ) | |
goto LABEL_76; | |
LOBYTE(v1) = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)"*&<>()C,", 1ui64, *(__int64 **)(a1 + 32)) ) | |
return v1; | |
if ( v6 == 80 ) | |
{ | |
v23 = "const unsafe extern \"\" fn( -> "; | |
v24 = 6i64; | |
} | |
else | |
{ | |
v23 = "mut const unsafe extern \"\" fn( -> "; | |
v24 = 4i64; | |
} | |
v37 = sub_1400183F0((unsigned __int8 *)v23, v24, v22); | |
goto LABEL_75; | |
case 'Q': | |
case 'R': | |
v25 = *(__int64 **)(a1 + 32); | |
if ( v25 ) | |
{ | |
LOBYTE(v1) = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)"&<>()C,", 1ui64, v25) ) | |
return v1; | |
} | |
if ( v7 >= v4 || *(_BYTE *)(v3 + v7) != 76 ) | |
goto LABEL_72; | |
*(_QWORD *)(a1 + 16) = v5 + 2; | |
sub_140010D20((__int64)&v41, (__int64 *)a1); | |
if ( v41 ) | |
goto LABEL_36; | |
if ( v43 ) | |
{ | |
LOBYTE(v1) = 1; | |
if ( (unsigned __int8)sub_140011850(a1, v43) ) | |
return v1; | |
v39 = *(__int64 **)(a1 + 32); | |
if ( v39 ) | |
{ | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)" unsafe extern \"\" fn( -> ", 1ui64, v39) ) | |
return v1; | |
} | |
} | |
LABEL_72: | |
if ( v6 != 82 ) | |
{ | |
v40 = *(__int64 **)(a1 + 32); | |
if ( v40 ) | |
{ | |
v37 = sub_1400183F0((unsigned __int8 *)"mut const unsafe extern \"\" fn( -> ", 4ui64, v40); | |
LOBYTE(v1) = 1; | |
LABEL_75: | |
if ( v37 ) | |
return v1; | |
} | |
} | |
LABEL_76: | |
v15 = sub_140012C00(a1); | |
LABEL_77: | |
LOBYTE(v1) = 1; | |
goto LABEL_78; | |
case 'T': | |
v33 = *(__int64 **)(a1 + 32); | |
if ( v33 ) | |
{ | |
LOBYTE(v1) = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)"()C,", 1ui64, v33) ) | |
return v1; | |
} | |
LOBYTE(v1) = 1; | |
if ( sub_140011E70((__int64 *)a1) ) | |
return v1; | |
if ( v34 != 1 ) | |
goto LABEL_61; | |
v35 = *(__int64 **)(a1 + 32); | |
if ( !v35 ) | |
goto LABEL_79; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)",", 1ui64, v35) ) | |
return v1; | |
LABEL_61: | |
v36 = *(__int64 **)(a1 + 32); | |
if ( !v36 ) | |
goto LABEL_79; | |
v15 = sub_1400183F0((unsigned __int8 *)")C,", 1ui64, v36); | |
goto LABEL_78; | |
default: | |
*(_QWORD *)(a1 + 16) = v5; | |
v15 = sub_140012370(a1, 0); | |
goto LABEL_77; | |
} | |
return v1; | |
} | |
v21 = *(__int64 **)(a1 + 32); | |
if ( !v21 || (LOBYTE(v1) = 1, !(unsigned __int8)sub_1400183F0(byte_1400210C8, 0x19ui64, v21)) ) | |
{ | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = 1; | |
return 0; | |
} | |
return v1; | |
} | |
// 140012CF0: variable 'v12' is possibly undefined | |
// 140012FF4: variable 'v34' is possibly undefined | |
// 1400130F8: variable 'v1' is possibly undefined | |
// 1400210C8: using guessed type unsigned __int8 byte_1400210C8[25]; | |
// 1400212D0: using guessed type _QWORD qword_1400212D0[26]; | |
// 1400213A0: using guessed type void *off_1400213A0; | |
//----- (0000000140013160) ---------------------------------------------------- | |
char __fastcall sub_140013160(__int64 *a1) | |
{ | |
__int64 v1; // r14 | |
__int64 v3; // rcx | |
unsigned __int64 v4; // rdx | |
unsigned __int64 v5; // rax | |
char v6; // di | |
char *v7; // rbx | |
__int64 *v8; // r8 | |
char v9; // cl | |
char result; // al | |
__int64 *v11; // rdi | |
char v12; // cl | |
__int64 v13; // rax | |
unsigned __int8 *v14; // rbx | |
unsigned __int64 v15; // rdx | |
__int64 *v16; // r8 | |
char v17; // cl | |
char v18; // bl | |
__int64 *v19; // r8 | |
unsigned __int8 *v20; // rcx | |
char v21; // cl | |
__int64 *v22; // r8 | |
char v23; // cl | |
__int64 v24; // rax | |
__int64 v25; // rbx | |
unsigned __int64 v26; // rcx | |
__int64 *v28; // r8 | |
__int64 *v29; // r8 | |
char v30; // cl | |
unsigned __int64 v31; // rcx | |
__int64 *v32; // r8 | |
char v33; // cl | |
__int64 *v34; // r12 | |
__int64 v35; // r13 | |
unsigned __int8 *v36; // r13 | |
unsigned __int64 v37; // rbp | |
__int128 v38; // [rsp+20h] [rbp-E8h] BYREF | |
__int128 v39; // [rsp+30h] [rbp-D8h] | |
__int128 v40; // [rsp+40h] [rbp-C8h] | |
__int128 v41; // [rsp+50h] [rbp-B8h] | |
__int64 v42; // [rsp+60h] [rbp-A8h] | |
__int128 v43; // [rsp+68h] [rbp-A0h] BYREF | |
__int128 v44; // [rsp+78h] [rbp-90h] | |
__int128 v45; // [rsp+88h] [rbp-80h] | |
__int128 v46; // [rsp+98h] [rbp-70h] | |
__int64 v47; // [rsp+A8h] [rbp-60h] | |
__int64 v48[11]; // [rsp+B0h] [rbp-58h] BYREF | |
v3 = *a1; | |
if ( !v3 ) | |
goto LABEL_44; | |
v4 = a1[1]; | |
v5 = a1[2]; | |
if ( v5 < v4 && *(_BYTE *)(v3 + v5) == 85 ) | |
{ | |
a1[2] = ++v5; | |
v6 = 1; | |
if ( v5 >= v4 ) | |
goto LABEL_11; | |
} | |
else | |
{ | |
v6 = 0; | |
if ( v5 >= v4 ) | |
{ | |
LABEL_11: | |
if ( !v6 ) | |
goto LABEL_44; | |
v7 = 0i64; | |
LABEL_13: | |
v8 = (__int64 *)a1[4]; | |
if ( v8 ) | |
{ | |
v9 = sub_1400183F0((unsigned __int8 *)"unsafe extern \"\" fn( -> ", 7ui64, v8); | |
result = 1; | |
if ( v9 ) | |
return result; | |
} | |
if ( !v7 ) | |
{ | |
LABEL_44: | |
v22 = (__int64 *)a1[4]; | |
if ( v22 ) | |
{ | |
v23 = sub_1400183F0((unsigned __int8 *)"fn( -> ", 3ui64, v22); | |
result = 1; | |
if ( v23 ) | |
return result; | |
} | |
v24 = *a1; | |
if ( *a1 ) | |
{ | |
v25 = 0i64; | |
while ( 1 ) | |
{ | |
v26 = a1[2]; | |
if ( v26 < a1[1] && *(_BYTE *)(v24 + v26) == 69 ) | |
break; | |
if ( v25-- != 0 ) | |
{ | |
v28 = (__int64 *)a1[4]; | |
if ( v28 ) | |
{ | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)", > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
2ui64, | |
v28) ) | |
return 1; | |
} | |
} | |
if ( (unsigned __int8)sub_140012C00((__int64)a1) ) | |
return 1; | |
v24 = *a1; | |
if ( !*a1 ) | |
goto LABEL_55; | |
} | |
a1[2] = v26 + 1; | |
v29 = (__int64 *)a1[4]; | |
if ( !v29 ) | |
{ | |
LABEL_60: | |
if ( !v24 ) | |
{ | |
LABEL_64: | |
v32 = (__int64 *)a1[4]; | |
if ( !v32 ) | |
return sub_140012C00((__int64)a1); | |
v33 = sub_1400183F0((unsigned __int8 *)" -> ", 4ui64, v32); | |
result = 1; | |
if ( !v33 ) | |
return sub_140012C00((__int64)a1); | |
return result; | |
} | |
LABEL_61: | |
v31 = a1[2]; | |
if ( v31 < a1[1] && *(_BYTE *)(v24 + v31) == 117 ) | |
{ | |
a1[2] = v31 + 1; | |
return 0; | |
} | |
goto LABEL_64; | |
} | |
} | |
else | |
{ | |
LABEL_55: | |
v24 = 0i64; | |
v29 = (__int64 *)a1[4]; | |
if ( !v29 ) | |
goto LABEL_60; | |
} | |
v30 = sub_1400183F0((unsigned __int8 *)")C,", 1ui64, v29); | |
result = 1; | |
if ( v30 ) | |
return result; | |
v24 = *a1; | |
if ( !*a1 ) | |
goto LABEL_64; | |
goto LABEL_61; | |
} | |
LABEL_16: | |
v11 = (__int64 *)a1[4]; | |
if ( v11 ) | |
{ | |
v12 = sub_1400183F0((unsigned __int8 *)"extern \"\" fn( -> ", 8ui64, (__int64 *)a1[4]); | |
result = 1; | |
if ( v12 ) | |
return result; | |
} | |
*(_QWORD *)&v43 = v7; | |
*((_QWORD *)&v43 + 1) = v1; | |
*(_QWORD *)&v44 = 0i64; | |
*((_QWORD *)&v44 + 1) = v1; | |
*(_QWORD *)&v45 = 1i64; | |
*((_QWORD *)&v45 + 1) = 0x5F0000005Fi64; | |
*(_QWORD *)&v46 = 0i64; | |
*((_QWORD *)&v46 + 1) = v1; | |
LOWORD(v47) = 1; | |
sub_14000F5E0((__int64 *)&v38, (__int64 *)&v43); | |
if ( (_QWORD)v38 ) | |
{ | |
v13 = v46; | |
*(_QWORD *)&v46 = v39; | |
if ( v7 ) | |
{ | |
v14 = (unsigned __int8 *)&v7[v13]; | |
v15 = *((_QWORD *)&v38 + 1) - v13; | |
if ( !v11 ) | |
goto LABEL_40; | |
goto LABEL_39; | |
} | |
} | |
else if ( !BYTE1(v47) ) | |
{ | |
BYTE1(v47) = 1; | |
if ( (_BYTE)v47 || *((_QWORD *)&v46 + 1) != (_QWORD)v46 ) | |
{ | |
v15 = *((_QWORD *)&v46 + 1) - v46; | |
v14 = (unsigned __int8 *)(v43 + v46); | |
if ( !v11 ) | |
{ | |
LABEL_40: | |
v42 = v47; | |
v41 = v46; | |
v40 = v45; | |
v39 = v44; | |
v38 = v43; | |
if ( BYTE1(v47) ) | |
{ | |
LABEL_41: | |
if ( v11 && (unsigned __int8)sub_1400183F0((unsigned __int8 *)"\" fn( -> ", 2ui64, v11) ) | |
return 1; | |
goto LABEL_44; | |
} | |
v34 = v11; | |
while ( 1 ) | |
{ | |
v35 = v38; | |
sub_14000F5E0(v48, (__int64 *)&v38); | |
if ( v48[0] ) | |
{ | |
v36 = (unsigned __int8 *)(v41 + v35); | |
v37 = v48[1] - v41; | |
*(_QWORD *)&v41 = v48[2]; | |
if ( !v34 ) | |
goto LABEL_69; | |
} | |
else | |
{ | |
if ( BYTE1(v42) ) | |
goto LABEL_41; | |
BYTE1(v42) = 1; | |
if ( !(_BYTE)v42 && *((_QWORD *)&v41 + 1) == (_QWORD)v41 ) | |
goto LABEL_41; | |
v37 = *((_QWORD *)&v41 + 1) - v41; | |
v36 = (unsigned __int8 *)(v38 + v41); | |
if ( !v34 ) | |
{ | |
LABEL_69: | |
v34 = 0i64; | |
goto LABEL_70; | |
} | |
} | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)"-}0", 1ui64, v34) ) | |
return 1; | |
if ( !v11 ) | |
goto LABEL_69; | |
v34 = v11; | |
if ( (unsigned __int8)sub_1400183F0(v36, v37, v11) ) | |
return 1; | |
LABEL_70: | |
if ( BYTE1(v42) ) | |
goto LABEL_41; | |
} | |
} | |
LABEL_39: | |
if ( (unsigned __int8)sub_1400183F0(v14, v15, v11) ) | |
return 1; | |
goto LABEL_40; | |
} | |
} | |
sub_14001CC50((__int64)"called `Option::unwrap()` on a `None` value", 43i64, (__int64)&off_140021160); | |
} | |
} | |
if ( *(_BYTE *)(v3 + v5) != 75 ) | |
goto LABEL_11; | |
a1[2] = v5 + 1; | |
if ( v5 + 1 < v4 && *(_BYTE *)(v3 + v5 + 1) == 67 ) | |
{ | |
a1[2] = v5 + 2; | |
v1 = 1i64; | |
v7 = "C,"; | |
goto LABEL_28; | |
} | |
sub_140010F20((__int64)&v38, (__int64)a1); | |
v7 = (char *)v38; | |
if ( (_QWORD)v38 ) | |
{ | |
v1 = *((_QWORD *)&v38 + 1); | |
if ( *((_QWORD *)&v38 + 1) && !*((_QWORD *)&v39 + 1) ) | |
{ | |
LABEL_28: | |
if ( !v6 ) | |
goto LABEL_16; | |
goto LABEL_13; | |
} | |
v16 = (__int64 *)a1[4]; | |
if ( !v16 || (v17 = sub_1400183F0("{invalid syntax}", 0x10ui64, v16), result = 1, !v17) ) | |
{ | |
*a1 = 0i64; | |
*((_BYTE *)a1 + 8) = 0; | |
return 0; | |
} | |
} | |
else | |
{ | |
v18 = BYTE8(v38); | |
v19 = (__int64 *)a1[4]; | |
if ( !v19 ) | |
goto LABEL_34; | |
v20 = byte_1400210C8; | |
if ( !BYTE8(v38) ) | |
v20 = "{invalid syntax}"; | |
v21 = sub_1400183F0(v20, (9i64 * BYTE8(v38)) | 0x10, v19); | |
result = 1; | |
if ( !v21 ) | |
{ | |
LABEL_34: | |
*a1 = 0i64; | |
*((_BYTE *)a1 + 8) = v18; | |
return 0; | |
} | |
} | |
return result; | |
} | |
// 140013251: variable 'v1' is possibly undefined | |
// 1400210C8: using guessed type unsigned __int8 byte_1400210C8[25]; | |
// 140021160: using guessed type char *off_140021160; | |
//----- (00000001400136A0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400136A0(__int64 *a1) | |
{ | |
unsigned int v1; // edi | |
__int64 v3; // r8 | |
unsigned __int64 v4; // r10 | |
unsigned __int64 v5; // rcx | |
unsigned __int64 v6; // r11 | |
unsigned __int64 v7; // rax | |
__int64 *v8; // r8 | |
__int64 v9; // rax | |
__int64 v10; // r14 | |
unsigned __int64 v11; // rcx | |
bool v12; // cf | |
__int64 *v13; // r8 | |
__int64 result; // rax | |
unsigned __int64 v15; // rax | |
char v16; // r9 | |
char v17; // dl | |
unsigned __int8 v18; // bl | |
unsigned __int8 v19; // dl | |
__int64 v20; // rax | |
unsigned __int64 v21; // kr00_8 | |
unsigned int v22; // ecx | |
__int64 *v23; // r8 | |
unsigned __int8 *v24; // rcx | |
__int128 v25; // [rsp+20h] [rbp-48h] | |
__int128 v26; // [rsp+30h] [rbp-38h] | |
v3 = *a1; | |
if ( !*a1 ) | |
goto LABEL_21; | |
v4 = a1[1]; | |
v5 = a1[2]; | |
if ( v5 >= v4 ) | |
goto LABEL_21; | |
if ( *(_BYTE *)(v3 + v5) != 66 ) | |
{ | |
if ( *(_BYTE *)(v3 + v5) == 73 ) | |
{ | |
a1[2] = v5 + 1; | |
if ( !(unsigned __int8)sub_140012370((__int64)a1, 0) ) | |
{ | |
v8 = (__int64 *)a1[4]; | |
if ( !v8 || !(unsigned __int8)sub_1400183F0((unsigned __int8 *)"<>()C,", 1ui64, v8) ) | |
{ | |
v9 = *a1; | |
LOBYTE(v1) = 1; | |
if ( *a1 ) | |
{ | |
v10 = 0i64; | |
while ( 1 ) | |
{ | |
v11 = a1[2]; | |
if ( v11 < a1[1] && *(_BYTE *)(v9 + v11) == 69 ) | |
break; | |
v12 = v10-- == 0; | |
if ( !v12 ) | |
{ | |
v13 = (__int64 *)a1[4]; | |
if ( v13 ) | |
{ | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)", > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
2ui64, | |
v13) ) | |
goto LABEL_45; | |
} | |
} | |
if ( sub_140012AD0(a1) ) | |
goto LABEL_45; | |
v9 = *a1; | |
if ( !*a1 ) | |
return v1; | |
} | |
a1[2] = v11 + 1; | |
} | |
return v1; | |
} | |
} | |
LABEL_45: | |
LOBYTE(v1) = 2; | |
return v1; | |
} | |
LABEL_21: | |
v1 = sub_140012370((__int64)a1, 0); | |
LOBYTE(v1) = 2 * v1; | |
return v1; | |
} | |
v6 = v5 + 1; | |
a1[2] = v5 + 1; | |
if ( v5 + 1 >= v4 || *(_BYTE *)(v3 + v6) != 95 ) | |
{ | |
v15 = 0i64; | |
v1 = 62; | |
while ( 1 ) | |
{ | |
v16 = 1; | |
if ( v6 >= v4 ) | |
break; | |
v17 = *(_BYTE *)(v3 + v6); | |
if ( v17 == 95 ) | |
{ | |
a1[2] = v6 + 1; | |
v7 = v15 + 1; | |
if ( !v7 ) | |
break; | |
goto LABEL_36; | |
} | |
v18 = v17 - 48; | |
if ( (unsigned __int8)(v17 - 48) >= 0xAu ) | |
{ | |
if ( (unsigned __int8)(v17 - 97) >= 0x1Au ) | |
{ | |
if ( (unsigned __int8)(v17 - 65) >= 0x1Au ) | |
break; | |
v19 = v17 - 29; | |
} | |
else | |
{ | |
v19 = v17 - 87; | |
} | |
v18 = v19; | |
} | |
a1[2] = ++v6; | |
v21 = v15; | |
v20 = 62 * v15; | |
if ( is_mul_ok(0x3Eui64, v21) ) | |
{ | |
v12 = __CFADD__(v18, v20); | |
v15 = v18 + v20; | |
if ( !v12 ) | |
continue; | |
} | |
break; | |
} | |
LABEL_41: | |
v1 = 0; | |
v23 = (__int64 *)a1[4]; | |
if ( !v23 ) | |
{ | |
LABEL_47: | |
*a1 = 0i64; | |
*((_BYTE *)a1 + 8) = v1; | |
return 0; | |
} | |
goto LABEL_42; | |
} | |
a1[2] = v5 + 2; | |
v7 = 0i64; | |
LABEL_36: | |
if ( v7 >= v5 ) | |
{ | |
v16 = 1; | |
goto LABEL_41; | |
} | |
v22 = *((_DWORD *)a1 + 6) + 1; | |
if ( v22 > 0x1F4 ) | |
{ | |
LOBYTE(v1) = 1; | |
v16 = 0; | |
v23 = (__int64 *)a1[4]; | |
if ( !v23 ) | |
goto LABEL_47; | |
LABEL_42: | |
v24 = byte_1400210C8; | |
if ( v16 ) | |
v24 = "{invalid syntax}"; | |
if ( !(unsigned __int8)sub_1400183F0(v24, (9i64 * ((unsigned __int8)v16 ^ 1u)) | 0x10, v23) ) | |
goto LABEL_47; | |
goto LABEL_45; | |
} | |
if ( !a1[4] ) | |
return 0; | |
v26 = *((_OWORD *)a1 + 1); | |
v25 = *(_OWORD *)a1; | |
a1[2] = v7; | |
*((_DWORD *)a1 + 6) = v22; | |
result = sub_1400136A0(a1); | |
*(_OWORD *)a1 = v25; | |
*((_OWORD *)a1 + 1) = v26; | |
return result; | |
} | |
// 1400137B7: variable 'v1' is possibly undefined | |
// 1400210C8: using guessed type unsigned __int8 byte_1400210C8[25]; | |
//----- (0000000140013900) ---------------------------------------------------- | |
__int64 __fastcall sub_140013900(__int64 *a1) | |
{ | |
unsigned int v1; // esi | |
char v3; // al | |
char v4; // bp | |
unsigned __int64 v5; // rax | |
__int64 *v6; // r8 | |
__int64 *v7; // rdx | |
__int64 *v8; // r8 | |
__int64 *v9; // r8 | |
__int64 *v10; // r8 | |
char v11; // bl | |
__int64 *v12; // r8 | |
unsigned __int8 *v13; // rcx | |
__int128 v15[2]; // [rsp+20h] [rbp-88h] BYREF | |
__int128 v16[6]; // [rsp+40h] [rbp-68h] BYREF | |
v3 = sub_1400136A0(a1); | |
LOBYTE(v1) = 1; | |
if ( v3 == 2 ) | |
return v1; | |
v4 = v3; | |
while ( 1 ) | |
{ | |
if ( !*a1 || (v5 = a1[2], v5 >= a1[1]) || *(_BYTE *)(*a1 + v5) != 112 ) | |
{ | |
if ( (v4 & 1) == 0 ) | |
return 0; | |
v10 = (__int64 *)a1[4]; | |
if ( !v10 || !(unsigned __int8)sub_1400183F0((unsigned __int8 *)">()C,", 1ui64, v10) ) | |
return 0; | |
return v1; | |
} | |
a1[2] = v5 + 1; | |
v6 = (__int64 *)a1[4]; | |
if ( (v4 & 1) != 0 ) | |
{ | |
if ( v6 | |
&& (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)", > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
2ui64, | |
v6) ) | |
{ | |
return v1; | |
} | |
LABEL_13: | |
if ( !*a1 ) | |
goto LABEL_21; | |
goto LABEL_14; | |
} | |
if ( v6 ) | |
{ | |
v4 = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)"<>()C,", 1ui64, v6) ) | |
{ | |
LOBYTE(v1) = 1; | |
return v1; | |
} | |
goto LABEL_13; | |
} | |
v4 = 1; | |
if ( !*a1 ) | |
{ | |
LABEL_21: | |
v9 = (__int64 *)a1[4]; | |
if ( v9 ) | |
return (unsigned int)sub_1400183F0( | |
"?'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
1ui64, | |
v9); | |
return 0; | |
} | |
LABEL_14: | |
sub_140010F20((__int64)v15, (__int64)a1); | |
if ( !*(_QWORD *)&v15[0] ) | |
break; | |
v16[1] = v15[1]; | |
v16[0] = v15[0]; | |
v7 = (__int64 *)a1[4]; | |
if ( v7 ) | |
{ | |
if ( (unsigned __int8)sub_1400103E0((char **)v16, v7) ) | |
return v1; | |
v8 = (__int64 *)a1[4]; | |
if ( v8 ) | |
{ | |
if ( (unsigned __int8)sub_1400183F0(byte_140021178, 3ui64, v8) ) | |
return v1; | |
} | |
} | |
if ( (unsigned __int8)sub_140012C00((__int64)a1) ) | |
return v1; | |
} | |
v11 = BYTE8(v15[0]); | |
v12 = (__int64 *)a1[4]; | |
if ( !v12 ) | |
goto LABEL_31; | |
v13 = byte_1400210C8; | |
if ( !BYTE8(v15[0]) ) | |
v13 = "{invalid syntax}"; | |
LOBYTE(v1) = 1; | |
if ( !(unsigned __int8)sub_1400183F0(v13, (9i64 * BYTE8(v15[0])) | 0x10, v12) ) | |
{ | |
LABEL_31: | |
*a1 = 0i64; | |
*((_BYTE *)a1 + 8) = v11; | |
return 0; | |
} | |
return v1; | |
} | |
// 140013AD8: variable 'v1' is possibly undefined | |
// 1400210C8: using guessed type unsigned __int8 byte_1400210C8[25]; | |
// 140021178: using guessed type unsigned __int8 byte_140021178[3]; | |
//----- (0000000140013AF0) ---------------------------------------------------- | |
__int64 __fastcall sub_140013AF0(__int64 a1, __int64 a2) | |
{ | |
unsigned int v2; // edi | |
__int64 v4; // rcx | |
unsigned __int64 v5; // r9 | |
unsigned __int64 v6; // rax | |
char v7; // bl | |
unsigned __int64 v8; // r8 | |
unsigned int v9; // r10d | |
__int64 *v10; // r8 | |
char v11; // al | |
__int64 *v12; // r8 | |
__int64 *v13; // r8 | |
char v14; // bp | |
__int64 *v15; // r8 | |
__int64 *v16; // r8 | |
__int64 v17; // rdx | |
__int64 *v18; // r8 | |
char *v19; // rcx | |
unsigned __int64 v20; // rdx | |
unsigned __int64 v21; // rdx | |
__int64 *v22; // r8 | |
__int64 *v23; // r8 | |
char v24; // bl | |
__int64 *v25; // r8 | |
unsigned __int8 *v26; // rcx | |
__int64 *v27; // r8 | |
__int64 *v28; // r8 | |
char v29; // al | |
__int64 *v30; // r8 | |
char *v31; // rcx | |
__int64 v32; // rdx | |
__int64 *v33; // r8 | |
unsigned __int64 v34; // rdx | |
__int64 v35; // rdx | |
unsigned __int64 v36; // rcx | |
int v37; // eax | |
__int64 *v38; // r8 | |
__int64 *v39; // r8 | |
__int64 *v41; // r8 | |
__int64 *v42; // r8 | |
__int64 v43; // [rsp+28h] [rbp-30h] BYREF | |
__int64 v44; // [rsp+30h] [rbp-28h] | |
v4 = *(_QWORD *)a1; | |
if ( !v4 ) | |
{ | |
LABEL_108: | |
v39 = *(__int64 **)(a1 + 32); | |
if ( v39 ) | |
return sub_1400183F0("?'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", 1ui64, v39); | |
return 0; | |
} | |
v5 = *(_QWORD *)(a1 + 8); | |
v6 = *(_QWORD *)(a1 + 16); | |
if ( v6 < v5 ) | |
{ | |
v7 = *(_BYTE *)(v4 + v6); | |
v8 = v6 + 1; | |
*(_QWORD *)(a1 + 16) = v6 + 1; | |
v9 = *(_DWORD *)(a1 + 24) + 1; | |
*(_DWORD *)(a1 + 24) = v9; | |
if ( v9 > 0x1F4 ) | |
{ | |
v12 = *(__int64 **)(a1 + 32); | |
if ( v12 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0(byte_1400210C8, 0x19ui64, v12) ) | |
return v2; | |
} | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = 1; | |
return 0; | |
} | |
switch ( v7 ) | |
{ | |
case 'A': | |
v15 = *(__int64 **)(a1 + 32); | |
if ( (_BYTE)a2 ) | |
{ | |
v14 = 0; | |
} | |
else | |
{ | |
if ( !v15 ) | |
{ | |
v14 = 1; | |
goto LABEL_86; | |
} | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)&unk_140021189, 1ui64, v15) ) | |
return v2; | |
v15 = *(__int64 **)(a1 + 32); | |
v14 = 1; | |
} | |
if ( v15 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)"[]dyn + ; mut const unsafe extern \"\" fn( -> ", | |
1ui64, | |
v15) ) | |
return v2; | |
} | |
LABEL_86: | |
LOBYTE(v2) = 1; | |
if ( sub_140011F90((__int64 *)a1, a2) ) | |
return v2; | |
v30 = *(__int64 **)(a1 + 32); | |
if ( v30 ) | |
{ | |
v31 = "]dyn + ; mut const unsafe extern \"\" fn( -> "; | |
goto LABEL_96; | |
} | |
goto LABEL_115; | |
case 'B': | |
v11 = sub_140011330((__int64 *)a1, a2); | |
goto LABEL_10; | |
case 'Q': | |
case 'R': | |
if ( v7 == 82 && v8 < v5 && *(_BYTE *)(v4 + v8) == 101 ) | |
{ | |
*(_QWORD *)(a1 + 16) = v6 + 2; | |
v11 = sub_140014480(a1); | |
goto LABEL_10; | |
} | |
v13 = *(__int64 **)(a1 + 32); | |
if ( (_BYTE)a2 ) | |
{ | |
v14 = 0; | |
} | |
else | |
{ | |
if ( !v13 ) | |
{ | |
v14 = 1; | |
goto LABEL_81; | |
} | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)&unk_140021189, 1ui64, v13) ) | |
return v2; | |
v13 = *(__int64 **)(a1 + 32); | |
v14 = 1; | |
} | |
if ( v13 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)"&<>()C,", 1ui64, v13) ) | |
return v2; | |
} | |
LABEL_81: | |
if ( v7 == 82 | |
|| (v28 = *(__int64 **)(a1 + 32)) == 0i64 | |
|| (LOBYTE(v2) = 1, | |
!(unsigned __int8)sub_1400183F0((unsigned __int8 *)"mut const unsafe extern \"\" fn( -> ", 4ui64, v28)) ) | |
{ | |
LOBYTE(v2) = 1; | |
LOBYTE(a2) = 1; | |
v29 = sub_140013AF0(a1, a2); | |
goto LABEL_114; | |
} | |
return v2; | |
case 'T': | |
v16 = *(__int64 **)(a1 + 32); | |
if ( (_BYTE)a2 ) | |
{ | |
v14 = 0; | |
} | |
else | |
{ | |
if ( !v16 ) | |
{ | |
v14 = 1; | |
goto LABEL_90; | |
} | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)&unk_140021189, 1ui64, v16) ) | |
return v2; | |
v16 = *(__int64 **)(a1 + 32); | |
v14 = 1; | |
} | |
if ( v16 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)"()C,", 1ui64, v16) ) | |
return v2; | |
} | |
LABEL_90: | |
LOBYTE(v2) = 1; | |
if ( sub_1400122E0((__int64 *)a1, a2) ) | |
return v2; | |
if ( v32 != 1 ) | |
goto LABEL_94; | |
v33 = *(__int64 **)(a1 + 32); | |
if ( !v33 ) | |
goto LABEL_115; | |
if ( !(unsigned __int8)sub_1400183F0((unsigned __int8 *)",", 1ui64, v33) ) | |
goto LABEL_94; | |
return v2; | |
case 'V': | |
if ( (_BYTE)a2 ) | |
{ | |
v14 = 0; | |
} | |
else | |
{ | |
v27 = *(__int64 **)(a1 + 32); | |
if ( v27 ) | |
{ | |
LOBYTE(v2) = 1; | |
v14 = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)&unk_140021189, 1ui64, v27) ) | |
return v2; | |
} | |
else | |
{ | |
v14 = 1; | |
} | |
} | |
LOBYTE(v2) = 1; | |
LOBYTE(a2) = 1; | |
if ( (unsigned __int8)sub_140012370(a1, a2) ) | |
return v2; | |
if ( !*(_QWORD *)a1 ) | |
goto LABEL_108; | |
v36 = *(_QWORD *)(a1 + 16); | |
if ( v36 >= *(_QWORD *)(a1 + 8) ) | |
goto LABEL_105; | |
v37 = *(unsigned __int8 *)(*(_QWORD *)a1 + v36); | |
*(_QWORD *)(a1 + 16) = v36 + 1; | |
switch ( v37 ) | |
{ | |
case 'S': | |
v41 = *(__int64 **)(a1 + 32); | |
if ( v41 && (unsigned __int8)sub_1400183F0(byte_14002117B, 3ui64, v41) || sub_140012020((__int64 *)a1) ) | |
return v2; | |
v30 = *(__int64 **)(a1 + 32); | |
if ( !v30 ) | |
goto LABEL_115; | |
v31 = (char *)&unk_14002117E; | |
v34 = 2i64; | |
break; | |
case 'T': | |
v42 = *(__int64 **)(a1 + 32); | |
if ( v42 && (unsigned __int8)sub_1400183F0((unsigned __int8 *)"()C,", 1ui64, v42) | |
|| sub_140011F90((__int64 *)a1, v35) ) | |
{ | |
return v2; | |
} | |
LABEL_94: | |
v30 = *(__int64 **)(a1 + 32); | |
if ( !v30 ) | |
goto LABEL_115; | |
v31 = ")C,"; | |
LABEL_96: | |
v34 = 1i64; | |
break; | |
case 'U': | |
LABEL_115: | |
if ( v14 ) | |
{ | |
v18 = *(__int64 **)(a1 + 32); | |
if ( v18 ) | |
{ | |
v19 = "}0"; | |
LABEL_118: | |
v20 = 1i64; | |
LABEL_119: | |
v11 = sub_1400183F0((unsigned __int8 *)v19, v20, v18); | |
LABEL_10: | |
LOBYTE(v2) = 1; | |
if ( v11 ) | |
return v2; | |
} | |
} | |
LABEL_11: | |
if ( *(_QWORD *)a1 ) | |
--*(_DWORD *)(a1 + 24); | |
return 0; | |
default: | |
LABEL_105: | |
v38 = *(__int64 **)(a1 + 32); | |
if ( v38 && (unsigned __int8)sub_1400183F0("{invalid syntax}", 0x10ui64, v38) ) | |
return v2; | |
goto LABEL_43; | |
} | |
v29 = sub_1400183F0((unsigned __int8 *)v31, v34, v30); | |
goto LABEL_114; | |
case 'a': | |
case 'i': | |
case 'l': | |
case 'n': | |
case 's': | |
case 'x': | |
if ( v8 < v5 && *(_BYTE *)(v4 + v8) == 110 ) | |
{ | |
*(_QWORD *)(a1 + 16) = v6 + 2; | |
v10 = *(__int64 **)(a1 + 32); | |
if ( v10 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)"-}0", 1ui64, v10) ) | |
return v2; | |
} | |
} | |
goto LABEL_9; | |
case 'b': | |
sub_140010C40(&v43, a1); | |
if ( !v43 ) | |
goto LABEL_54; | |
if ( sub_140010A80(v43, v44) != 1 ) | |
break; | |
if ( v17 ) | |
{ | |
if ( v17 != 1 ) | |
break; | |
v18 = *(__int64 **)(a1 + 32); | |
if ( v18 ) | |
{ | |
v19 = (char *)&unk_140021180; | |
v20 = 4i64; | |
goto LABEL_119; | |
} | |
goto LABEL_11; | |
} | |
v18 = *(__int64 **)(a1 + 32); | |
if ( !v18 ) | |
goto LABEL_11; | |
v19 = (char *)&unk_140021184; | |
v20 = 5i64; | |
goto LABEL_119; | |
case 'c': | |
sub_140010C40(&v43, a1); | |
if ( v43 ) | |
{ | |
if ( sub_140010A80(v43, v44) | |
&& !HIDWORD(v21) | |
&& ((unsigned int)v21 ^ 0xD800) - 1114112 >= 0xFFEF0800 | |
&& (_DWORD)v21 != 1114112 ) | |
{ | |
v11 = sub_140011680(*(_QWORD **)(a1 + 32), v21); | |
goto LABEL_10; | |
} | |
break; | |
} | |
LABEL_54: | |
v24 = v44; | |
v25 = *(__int64 **)(a1 + 32); | |
if ( !v25 ) | |
goto LABEL_58; | |
v26 = byte_1400210C8; | |
if ( !(_BYTE)v44 ) | |
v26 = "{invalid syntax}"; | |
LOBYTE(v2) = 1; | |
if ( !(unsigned __int8)sub_1400183F0(v26, (9i64 * (unsigned __int8)v44) | 0x10, v25) ) | |
{ | |
LABEL_58: | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = v24; | |
return 0; | |
} | |
return v2; | |
case 'e': | |
v23 = *(__int64 **)(a1 + 32); | |
if ( (_BYTE)a2 ) | |
{ | |
v14 = 0; | |
} | |
else | |
{ | |
if ( !v23 ) | |
{ | |
v14 = 1; | |
goto LABEL_113; | |
} | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)&unk_140021189, 1ui64, v23) ) | |
return v2; | |
v23 = *(__int64 **)(a1 + 32); | |
v14 = 1; | |
} | |
if ( v23 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)"*&<>()C,", 1ui64, v23) ) | |
return v2; | |
} | |
LABEL_113: | |
v29 = sub_140014480(a1); | |
LOBYTE(v2) = 1; | |
LABEL_114: | |
if ( !v29 ) | |
goto LABEL_115; | |
return v2; | |
case 'h': | |
case 'j': | |
case 'm': | |
case 'o': | |
case 't': | |
case 'y': | |
LABEL_9: | |
v11 = sub_1400142A0(a1, v7); | |
goto LABEL_10; | |
case 'p': | |
v18 = *(__int64 **)(a1 + 32); | |
if ( !v18 ) | |
goto LABEL_11; | |
v19 = "_!f64f32usizeu128u64u32u16u8isizei128i64i32i16i8strcharbool"; | |
goto LABEL_118; | |
default: | |
break; | |
} | |
} | |
v22 = *(__int64 **)(a1 + 32); | |
if ( v22 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0("{invalid syntax}", 0x10ui64, v22) ) | |
return v2; | |
} | |
LABEL_43: | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = 0; | |
return 0; | |
} | |
// 140013C9E: variable 'v17' is possibly undefined | |
// 140013CF5: variable 'v21' is possibly undefined | |
// 140013F8F: variable 'a2' is possibly undefined | |
// 140013FE1: variable 'v32' is possibly undefined | |
// 1400140C4: variable 'v2' is possibly undefined | |
// 14001419E: variable 'v35' is possibly undefined | |
// 1400210C8: using guessed type unsigned __int8 byte_1400210C8[25]; | |
// 14002117B: using guessed type unsigned __int8 byte_14002117B[3]; | |
//----- (00000001400142A0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400142A0(__int64 a1, char a2) | |
{ | |
unsigned int v2; // ebp | |
char *v4; // rcx | |
unsigned __int64 v6; // rdx | |
unsigned __int64 v7; // r8 | |
unsigned __int8 *v8; // rdi | |
unsigned __int64 v9; // r9 | |
unsigned __int64 v10; // r14 | |
unsigned __int8 v11; // r10 | |
__int64 *v12; // r8 | |
__int64 *v13; // r8 | |
unsigned __int64 v15; // rdx | |
__int64 *v16; // rsi | |
unsigned __int8 v17; // bl | |
int v18; // ecx | |
unsigned __int64 v19[6]; // [rsp+28h] [rbp-30h] BYREF | |
v4 = *(char **)a1; | |
if ( v4 ) | |
{ | |
v6 = *(_QWORD *)(a1 + 8); | |
v7 = *(_QWORD *)(a1 + 16); | |
v8 = (unsigned __int8 *)&v4[v7]; | |
v9 = 0i64; | |
do | |
{ | |
v10 = v9; | |
if ( v7 + v9 >= v6 ) | |
goto LABEL_12; | |
v11 = v8[v9]; | |
*(_QWORD *)(a1 + 16) = v7 + 1 + v9++; | |
} | |
while ( (unsigned __int8)(v11 - 48) < 0xAu || (unsigned __int8)(v11 - 97) < 6u ); | |
if ( v11 != 95 ) | |
{ | |
LABEL_12: | |
v12 = *(__int64 **)(a1 + 32); | |
if ( v12 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0("{invalid syntax}", 0x10ui64, v12) ) | |
return v2; | |
} | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = 0; | |
return 0; | |
} | |
if ( v7 + v10 < v7 ) | |
goto LABEL_11; | |
if ( v7 ) | |
{ | |
if ( v7 >= v6 ) | |
{ | |
if ( v7 != v6 ) | |
LABEL_11: | |
sub_14001D0B0(v4, v6, v7, v7 + v10, (__int64)&off_140021068); | |
} | |
else if ( v4[v7] <= -65 ) | |
{ | |
goto LABEL_11; | |
} | |
} | |
if ( sub_140010A80((__int64)&v4[v7], v10) ) | |
{ | |
v16 = *(__int64 **)(a1 + 32); | |
v19[0] = v15; | |
if ( v16 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_14001AD00(v19, (__int64)v16) ) | |
return v2; | |
goto LABEL_25; | |
} | |
} | |
else | |
{ | |
v16 = *(__int64 **)(a1 + 32); | |
if ( v16 ) | |
{ | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0((unsigned __int8 *)"0x", 2ui64, v16) | |
|| (unsigned __int8)sub_1400183F0(v8, v10, v16) ) | |
{ | |
return v2; | |
} | |
LABEL_25: | |
if ( !sub_140017C40((__int64)v16) ) | |
{ | |
v17 = a2 - 97; | |
if ( v17 >= 0x1Au || (v18 = 62716863, !_bittest(&v18, v17)) ) | |
sub_14001CC50((__int64)"called `Option::unwrap()` on a `None` value", 43i64, (__int64)&off_140021190); | |
LOBYTE(v2) = 1; | |
if ( (unsigned __int8)sub_1400183F0( | |
(unsigned __int8 *)*(&off_1400213A0 + (char)v17), | |
qword_1400212D0[(char)v17], | |
v16) ) | |
return v2; | |
} | |
} | |
} | |
} | |
else | |
{ | |
v13 = *(__int64 **)(a1 + 32); | |
if ( v13 ) | |
return sub_1400183F0("?'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", 1ui64, v13); | |
} | |
return 0; | |
} | |
// 1400143A8: variable 'v15' is possibly undefined | |
// 140014451: variable 'v2' is possibly undefined | |
// 140021068: using guessed type char *off_140021068; | |
// 140021190: using guessed type char *off_140021190; | |
// 1400212D0: using guessed type _QWORD qword_1400212D0[26]; | |
// 1400213A0: using guessed type void *off_1400213A0; | |
// 1400142A0: using guessed type unsigned __int64 var_30[6]; | |
//----- (0000000140014480) ---------------------------------------------------- | |
__int64 __fastcall sub_140014480(__int64 a1) | |
{ | |
unsigned __int8 **v1; // rsi | |
char *v3; // rcx | |
unsigned __int64 v4; // rdx | |
unsigned __int64 v5; // r8 | |
unsigned __int8 *v6; // rbx | |
__int64 v7; // r9 | |
__int64 v8; // r14 | |
unsigned __int8 v9; // r10 | |
__int64 *v10; // r8 | |
unsigned __int64 v12; // r14 | |
unsigned int v13; // eax | |
_QWORD *v14; // rdi | |
unsigned int v15; // eax | |
__int64 *v16; // r8 | |
unsigned int i; // ebp | |
unsigned int v18; // ecx | |
unsigned int v19; // eax | |
char v20; // al | |
unsigned int v21; // eax | |
unsigned int v22[4]; // [rsp+30h] [rbp-68h] BYREF | |
unsigned __int8 *v23; // [rsp+40h] [rbp-58h] BYREF | |
unsigned __int64 v24; // [rsp+48h] [rbp-50h] | |
unsigned __int8 *v25; // [rsp+50h] [rbp-48h] | |
__int64 v26; // [rsp+58h] [rbp-40h] | |
__int64 v27; // [rsp+60h] [rbp-38h] | |
v3 = *(char **)a1; | |
if ( v3 ) | |
{ | |
v4 = *(_QWORD *)(a1 + 8); | |
v5 = *(_QWORD *)(a1 + 16); | |
v6 = (unsigned __int8 *)&v3[v5]; | |
v7 = 0i64; | |
do | |
{ | |
v8 = v7; | |
if ( v5 + v7 >= v4 ) | |
goto LABEL_23; | |
v9 = v6[v7]; | |
*(_QWORD *)(a1 + 16) = v5 + 1 + v7++; | |
} | |
while ( (unsigned __int8)(v9 - 48) < 0xAu || (unsigned __int8)(v9 - 97) < 6u ); | |
if ( v9 != 95 ) | |
goto LABEL_23; | |
if ( v5 + v8 < v5 ) | |
goto LABEL_11; | |
if ( v5 ) | |
{ | |
if ( v5 >= v4 ) | |
{ | |
if ( v5 != v4 ) | |
LABEL_11: | |
sub_14001D0B0(v3, v4, v5, v5 + v8, (__int64)&off_140021068); | |
} | |
else if ( v3[v5] <= -65 ) | |
{ | |
goto LABEL_11; | |
} | |
} | |
if ( (v8 & 1) != 0 ) | |
goto LABEL_23; | |
v12 = v8 & 0xFFFFFFFFFFFFFFFEui64; | |
v23 = (unsigned __int8 *)&v3[v5]; | |
v24 = v12; | |
v25 = &v6[v12]; | |
v26 = 0i64; | |
v27 = 2i64; | |
v1 = &v23; | |
do | |
v13 = sub_14000EA10(&v23); | |
while ( v13 < 0x110000 ); | |
if ( v13 == 1114113 ) | |
{ | |
v14 = *(_QWORD **)(a1 + 32); | |
if ( v14 ) | |
{ | |
LOBYTE(v1) = 1; | |
if ( !(unsigned __int8)sub_140017E90(v14) ) | |
{ | |
v23 = v6; | |
v24 = v12; | |
v25 = &v6[v12]; | |
v26 = 0i64; | |
v27 = 2i64; | |
v15 = sub_14000EA10(&v23); | |
if ( v15 != 1114113 ) | |
{ | |
for ( i = v15; i != 1114113; i = sub_14000EA10(&v23) ) | |
{ | |
if ( i == 1114112 ) | |
sub_14001CF90( | |
(__int64)"called `Result::unwrap()` on an `Err` value", | |
43i64, | |
(__int64)v22, | |
(__int64)&off_140020A98, | |
(__int64)&off_140020958); | |
v18 = 1114114; | |
v19 = 48; | |
switch ( i ) | |
{ | |
case 0u: | |
goto LABEL_42; | |
case 1u: | |
case 2u: | |
case 3u: | |
case 4u: | |
case 5u: | |
case 6u: | |
case 7u: | |
case 8u: | |
case 0xBu: | |
case 0xCu: | |
case 0xEu: | |
case 0xFu: | |
case 0x10u: | |
case 0x11u: | |
case 0x12u: | |
case 0x13u: | |
case 0x14u: | |
case 0x15u: | |
case 0x16u: | |
case 0x17u: | |
case 0x18u: | |
case 0x19u: | |
case 0x1Au: | |
case 0x1Bu: | |
case 0x1Cu: | |
case 0x1Du: | |
case 0x1Eu: | |
case 0x1Fu: | |
case 0x20u: | |
case 0x21u: | |
case 0x23u: | |
case 0x24u: | |
case 0x25u: | |
case 0x26u: | |
goto LABEL_33; | |
case 9u: | |
v19 = 116; | |
goto LABEL_42; | |
case 0xAu: | |
v19 = 110; | |
goto LABEL_42; | |
case 0xDu: | |
v19 = 114; | |
goto LABEL_42; | |
case 0x22u: | |
goto LABEL_35; | |
case 0x27u: | |
if ( !(unsigned __int8)sub_140017E90(v14) ) | |
continue; | |
return (unsigned int)v1; | |
default: | |
if ( i == 92 ) | |
goto LABEL_35; | |
LABEL_33: | |
if ( sub_14001B110(i) || (v20 = sub_14001A050(i), v18 = 1114113, !v20) ) | |
{ | |
_BitScanReverse(&v21, i | 1); | |
v19 = ((v21 ^ 0x1C) >> 2) ^ 7; | |
v18 = i; | |
} | |
else | |
{ | |
LABEL_35: | |
v19 = i; | |
} | |
LABEL_42: | |
v22[0] = v19; | |
v22[1] = 0; | |
v22[2] = v18; | |
v22[3] = 5; | |
break; | |
} | |
while ( (unsigned int)sub_140016690(v22) != 1114112 ) | |
{ | |
if ( (unsigned __int8)sub_140017E90(v14) ) | |
return (unsigned int)v1; | |
} | |
} | |
} | |
LODWORD(v1) = sub_140017E90(v14); | |
} | |
return (unsigned int)v1; | |
} | |
} | |
else | |
{ | |
LABEL_23: | |
v16 = *(__int64 **)(a1 + 32); | |
if ( v16 ) | |
{ | |
LOBYTE(v1) = 1; | |
if ( (unsigned __int8)sub_1400183F0("{invalid syntax}", 0x10ui64, v16) ) | |
return (unsigned int)v1; | |
} | |
*(_QWORD *)a1 = 0i64; | |
*(_BYTE *)(a1 + 8) = 0; | |
} | |
} | |
else | |
{ | |
v10 = *(__int64 **)(a1 + 32); | |
if ( v10 ) | |
return sub_1400183F0("?'for<, > as ::{shimclosure:#[]dyn + ; mut const unsafe extern \"\" fn( -> ", 1ui64, v10); | |
} | |
LODWORD(v1) = 0; | |
return (unsigned int)v1; | |
} | |
// 140014638: variable 'v1' is possibly undefined | |
// 140020958: using guessed type void *off_140020958; | |
// 140020A98: using guessed type __int64 (__fastcall *off_140020A98)(); | |
// 140021068: using guessed type char *off_140021068; | |
//----- (0000000140014800) ---------------------------------------------------- | |
__int64 *__fastcall sub_140014800(__int64 *a1, __int64 a2, __int64 a3) | |
{ | |
char *v3; // r13 | |
unsigned __int64 v5; // r14 | |
unsigned __int64 v6; // rbp | |
unsigned __int64 v7; // rcx | |
unsigned __int64 v8; // r15 | |
__int64 v9; // r12 | |
unsigned __int64 v10; // rcx | |
unsigned __int64 v11; // r10 | |
unsigned __int64 v12; // rbx | |
bool v13; // zf | |
unsigned __int64 v14; // rcx | |
unsigned __int64 v15; // r10 | |
unsigned __int64 v16; // r10 | |
unsigned __int64 v17; // r15 | |
__int64 v18; // r12 | |
unsigned __int64 v19; // rbp | |
unsigned __int64 v20; // rbx | |
__int64 v21; // r10 | |
unsigned __int64 v22; // r9 | |
char *v23; // rsi | |
char v24; // di | |
char *v25; // r9 | |
unsigned __int64 v26; // rsi | |
bool v27; // cf | |
char v28; // bl | |
unsigned __int64 v29; // rsi | |
unsigned __int64 v30; // r8 | |
char **v31; // rax | |
__int64 v32; // r14 | |
unsigned __int64 v33; // rdx | |
char *v34; // r8 | |
unsigned int v35; // ecx | |
int v36; // edx | |
int v37; // r11d | |
int v38; // r10d | |
unsigned __int8 *v39; // r12 | |
char *v40; // r8 | |
__int64 v41; // r14 | |
unsigned __int8 *v42; // r9 | |
__int64 v43; // rax | |
bool v44; // sf | |
int v45; // r10d | |
int v46; // eax | |
int v47; // edx | |
int v48; // r10d | |
char v49; // al | |
__int64 v50; // r15 | |
unsigned __int64 v51; // r15 | |
__int64 v52; // rax | |
__int64 v53; // rcx | |
unsigned __int64 v54; // r9 | |
__int64 *result; // rax | |
char *v56; // rcx | |
char v57; // al | |
unsigned __int64 v58; // r8 | |
unsigned __int64 v59; // r9 | |
unsigned __int64 v60; // rdi | |
unsigned int v61; // r10d | |
unsigned __int64 v62; // rax | |
__int64 v63; // rax | |
unsigned __int64 v64; // kr00_8 | |
int v65; // edx | |
int v66; // r10d | |
int v67; // esi | |
int v68; // r11d | |
int v69; // r10d | |
int v70; // esi | |
int v71; // r11d | |
char *v72; // rcx | |
unsigned __int64 v73; // rax | |
__int64 v74; // r10 | |
unsigned __int8 *v75; // r11 | |
int v76; // ebp | |
int v77; // ebx | |
char *v78; // rdi | |
int v79; // r13d | |
unsigned __int64 v80; // rbx | |
unsigned __int64 v81; // rcx | |
unsigned __int64 v82; // rbp | |
char *v83; // [rsp+28h] [rbp-F0h] | |
char *v85; // [rsp+48h] [rbp-D0h] BYREF | |
unsigned __int64 v86; // [rsp+50h] [rbp-C8h] | |
unsigned __int64 v87; // [rsp+58h] [rbp-C0h] | |
unsigned __int64 v88; // [rsp+60h] [rbp-B8h] BYREF | |
__int64 v89; // [rsp+68h] [rbp-B0h] | |
unsigned __int64 v90; // [rsp+70h] [rbp-A8h] | |
__int64 v91; // [rsp+80h] [rbp-98h] | |
__int64 v92; // [rsp+88h] [rbp-90h] | |
unsigned __int64 v93; // [rsp+90h] [rbp-88h] | |
unsigned __int64 v94; // [rsp+A0h] [rbp-78h] | |
__int64 v95; // [rsp+B0h] [rbp-68h] | |
__int64 *v96; // [rsp+B8h] [rbp-60h] | |
__int64 v97[11]; // [rsp+C0h] [rbp-58h] BYREF | |
v3 = (char *)a2; | |
sub_1400194E0((__int64)&v85, a2, a3, byte_1400211A8, 6ui64); | |
v96 = a1; | |
if ( v89 ) | |
{ | |
v83 = v3; | |
v5 = v94; | |
if ( v94 == -1i64 ) | |
{ | |
v6 = v93; | |
v16 = v88 + v93 - 1; | |
if ( v16 < v86 ) | |
{ | |
v17 = v88 - 1; | |
v18 = v92; | |
v95 = v91; | |
v14 = v90 - 1; | |
while ( 1 ) | |
{ | |
if ( _bittest64(&v18, (unsigned __int8)v85[v16]) ) | |
{ | |
v21 = 0i64; | |
v22 = v6; | |
v23 = (char *)(v90 + v87); | |
while ( v90 + v21 < v88 ) | |
{ | |
if ( v90 + v22 >= v86 ) | |
{ | |
v82 = v90 + v6; | |
if ( v86 > v82 ) | |
v82 = v86; | |
sub_14001CD00(v82, v86, (__int64)&off_1400209C0); | |
} | |
v24 = *v23++; | |
v20 = v22 + 1; | |
++v21; | |
v13 = v24 == v85[v90 + v22++]; | |
if ( !v13 ) | |
goto LABEL_29; | |
} | |
if ( v90 - 1 >= v88 ) | |
{ | |
v29 = a3; | |
if ( v90 ) | |
LABEL_212: | |
sub_14001CD00(v14, v88, (__int64)&off_1400209D8); | |
goto LABEL_43; | |
} | |
v15 = v14 + v6; | |
v25 = (char *)(v87 + v90 - 1); | |
v26 = v90; | |
do | |
{ | |
v27 = v26-- == 0; | |
if ( v27 ) | |
goto LABEL_42; | |
if ( v15 >= v86 ) | |
LABEL_205: | |
sub_14001CD00(v15, v86, (__int64)&off_1400209F0); | |
v28 = *v25--; | |
v13 = v28 == v85[v15--]; | |
} | |
while ( v13 ); | |
v19 = v95 + v6; | |
} | |
else | |
{ | |
v19 = v88 + v6; | |
} | |
v20 = v19; | |
LABEL_29: | |
v16 = v20 + v17; | |
v6 = v20; | |
if ( v20 + v17 >= v86 ) | |
goto LABEL_48; | |
} | |
} | |
} | |
else | |
{ | |
v6 = v93; | |
v7 = v88 + v93 - 1; | |
if ( v7 < v86 ) | |
{ | |
v8 = v88 - 1; | |
v9 = v92; | |
do | |
{ | |
while ( _bittest64(&v9, (unsigned __int8)v85[v7]) ) | |
{ | |
v10 = v5; | |
if ( v90 > v5 ) | |
v10 = v90; | |
v11 = v10; | |
while ( v11 < v88 ) | |
{ | |
if ( v11 + v6 >= v86 ) | |
{ | |
v81 = v6 + v10; | |
if ( v86 > v81 ) | |
v81 = v86; | |
sub_14001CD00(v81, v86, (__int64)&off_1400209C0); | |
} | |
v12 = v11 + 1; | |
v13 = *(_BYTE *)(v87 + v11) == (unsigned __int8)v85[v6 + v11]; | |
++v11; | |
if ( !v13 ) | |
{ | |
v6 = v12 + v6 - v90; | |
goto LABEL_6; | |
} | |
} | |
v14 = v90; | |
do | |
{ | |
if ( v5 >= v14 ) | |
goto LABEL_42; | |
if ( --v14 >= v88 ) | |
goto LABEL_212; | |
v15 = v14 + v6; | |
if ( v14 + v6 >= v86 ) | |
goto LABEL_205; | |
} | |
while ( *(_BYTE *)(v87 + v14) == v85[v15] ); | |
v6 += v91; | |
v5 = v88 - v91; | |
v7 = v8 + v6; | |
if ( v8 + v6 >= v86 ) | |
goto LABEL_48; | |
} | |
v6 += v88; | |
LABEL_6: | |
v5 = 0i64; | |
v7 = v8 + v6; | |
} | |
while ( v8 + v6 < v86 ); | |
} | |
} | |
goto LABEL_48; | |
} | |
do | |
sub_14000F1F0(v97, (__int64)&v85); | |
while ( v97[0] == 1 ); | |
if ( v97[0] ) | |
{ | |
v83 = v3; | |
LABEL_48: | |
v3 = v83; | |
v29 = a3; | |
goto LABEL_49; | |
} | |
v6 = v97[1]; | |
LABEL_42: | |
v29 = a3; | |
LABEL_43: | |
v30 = v6 + 6; | |
if ( v6 != -6i64 ) | |
{ | |
if ( v30 >= v29 ) | |
{ | |
if ( v30 != v29 ) | |
goto LABEL_46; | |
} | |
else if ( v3[v30] <= -65 ) | |
{ | |
LABEL_46: | |
v31 = (char **)&off_140021218; | |
goto LABEL_63; | |
} | |
} | |
if ( v30 != v29 ) | |
{ | |
v34 = &v3[v30]; | |
do | |
{ | |
v35 = (unsigned __int8)*v34; | |
if ( *v34 < 0 ) | |
{ | |
v36 = v35 & 0x1F; | |
v37 = v34[1] & 0x3F; | |
if ( (unsigned __int8)v35 <= 0xDFu ) | |
{ | |
v34 += 2; | |
v35 = v37 | (v36 << 6); | |
if ( v35 - 65 < 6 ) | |
continue; | |
} | |
else | |
{ | |
v38 = (v37 << 6) | v34[2] & 0x3F; | |
if ( (unsigned __int8)*v34 < 0xF0u ) | |
{ | |
v34 += 3; | |
v35 = (v36 << 12) | v38; | |
if ( v35 - 65 < 6 ) | |
continue; | |
} | |
else | |
{ | |
v35 = ((v35 & 7) << 18) | (v38 << 6) | v34[3] & 0x3F; | |
if ( v35 == 1114112 ) | |
break; | |
v34 += 4; | |
if ( v35 - 65 < 6 ) | |
continue; | |
} | |
} | |
} | |
else | |
{ | |
++v34; | |
if ( v35 - 65 < 6 ) | |
continue; | |
} | |
if ( v35 < 0x30 || v35 >= 0x3A && v35 != 64 ) | |
goto LABEL_49; | |
} | |
while ( v34 != &v3[v29] ); | |
} | |
if ( !v6 ) | |
{ | |
v39 = (unsigned __int8 *)&unk_140020908; | |
v29 = 0i64; | |
LABEL_118: | |
v51 = 0i64; | |
LABEL_119: | |
v41 = 0i64; | |
v40 = 0i64; | |
LABEL_128: | |
v53 = 0i64; | |
LABEL_129: | |
v54 = 0i64; | |
goto LABEL_130; | |
} | |
if ( v6 < v29 ) | |
{ | |
if ( v3[v6] > -65 ) | |
{ | |
v29 = v6; | |
goto LABEL_49; | |
} | |
LABEL_89: | |
sub_14001D0B0(v3, v29, 0i64, v6, (__int64)&off_140021230); | |
} | |
if ( v6 != v29 ) | |
goto LABEL_89; | |
LABEL_49: | |
if ( v29 < 3 ) | |
{ | |
if ( v29 != 2 ) | |
{ | |
LABEL_117: | |
v39 = (unsigned __int8 *)&unk_140020908; | |
goto LABEL_118; | |
} | |
if ( *(_WORD *)v3 != 20058 ) | |
{ | |
LABEL_114: | |
v29 = 2i64; | |
if ( *v3 == 82 ) | |
goto LABEL_115; | |
goto LABEL_117; | |
} | |
v32 = -2i64; | |
v29 = 2i64; | |
goto LABEL_92; | |
} | |
if ( !(*(_WORD *)v3 ^ 0x5A5F | (unsigned __int8)v3[2] ^ 0x4E) ) | |
{ | |
v32 = -3i64; | |
v30 = 3i64; | |
if ( v29 < 4 ) | |
{ | |
v29 = 3i64; | |
goto LABEL_94; | |
} | |
if ( v3[3] <= -65 ) | |
{ | |
v31 = &off_140020B58; | |
LABEL_63: | |
sub_14001D0B0(v3, v29, v30, v29, (__int64)v31); | |
} | |
LABEL_94: | |
v40 = &v3[v30]; | |
v41 = v29 + v32; | |
v42 = (unsigned __int8 *)&v40[v41]; | |
v43 = 0i64; | |
while ( v41 != v43 ) | |
{ | |
v44 = v40[v43++] < 0; | |
if ( v44 ) | |
goto LABEL_109; | |
} | |
if ( v41 ) | |
{ | |
v45 = (unsigned __int8)*v40; | |
if ( *v40 < 0 ) | |
{ | |
v46 = v45 & 0x1F; | |
v47 = v40[1] & 0x3F; | |
if ( (unsigned __int8)v45 <= 0xDFu ) | |
{ | |
v39 = (unsigned __int8 *)(v40 + 2); | |
v45 = v47 | (v46 << 6); | |
} | |
else | |
{ | |
v48 = (v47 << 6) | v40[2] & 0x3F; | |
if ( (unsigned __int8)*v40 < 0xF0u ) | |
{ | |
v39 = (unsigned __int8 *)(v40 + 3); | |
v45 = (v46 << 12) | v48; | |
} | |
else | |
{ | |
v39 = (unsigned __int8 *)(v40 + 4); | |
v45 = ((v46 & 7) << 18) | (v48 << 6) | v40[3] & 0x3F; | |
} | |
} | |
} | |
else | |
{ | |
v39 = (unsigned __int8 *)(v40 + 1); | |
} | |
if ( v45 == 69 ) | |
{ | |
v51 = 0i64; | |
LABEL_147: | |
v54 = v42 - v39; | |
goto LABEL_181; | |
} | |
if ( v45 != 1114112 ) | |
{ | |
v51 = 0i64; | |
v60 = v29; | |
while ( 1 ) | |
{ | |
v61 = v45 - 48; | |
if ( v61 > 9 ) | |
break; | |
v62 = 0i64; | |
do | |
{ | |
v64 = v62; | |
v63 = 10 * v62; | |
if ( !is_mul_ok(0xAui64, v64) ) | |
goto LABEL_109; | |
v27 = __CFADD__(v61, v63); | |
v62 = v61 + v63; | |
if ( v27 || v39 == v42 ) | |
goto LABEL_109; | |
v65 = *v39; | |
if ( (*v39 & 0x80u) == 0 ) | |
{ | |
++v39; | |
} | |
else | |
{ | |
v66 = v65 & 0x1F; | |
v67 = v39[1] & 0x3F; | |
if ( (unsigned __int8)v65 <= 0xDFu ) | |
{ | |
v39 += 2; | |
v65 = v67 | (v66 << 6); | |
v29 = v60; | |
} | |
else | |
{ | |
v68 = (v67 << 6) | v39[2] & 0x3F; | |
if ( *v39 < 0xF0u ) | |
{ | |
v39 += 3; | |
v65 = (v66 << 12) | v68; | |
v29 = v60; | |
} | |
else | |
{ | |
v65 = ((v65 & 7) << 18) | (v68 << 6) | v39[3] & 0x3F; | |
v29 = v60; | |
if ( v65 == 1114112 ) | |
goto LABEL_109; | |
v39 += 4; | |
} | |
} | |
} | |
v61 = v65 - 48; | |
} | |
while ( (unsigned int)(v65 - 48) < 0xA ); | |
if ( v62 ) | |
{ | |
while ( v39 != v42 ) | |
{ | |
v65 = *v39; | |
if ( (*v39 & 0x80u) == 0 ) | |
{ | |
++v39; | |
} | |
else | |
{ | |
v69 = v65 & 0x1F; | |
v70 = v39[1] & 0x3F; | |
if ( (unsigned __int8)v65 <= 0xDFu ) | |
{ | |
v39 += 2; | |
v65 = v70 | (v69 << 6); | |
v29 = v60; | |
} | |
else | |
{ | |
v71 = (v70 << 6) | v39[2] & 0x3F; | |
if ( *v39 < 0xF0u ) | |
{ | |
v39 += 3; | |
v65 = (v69 << 12) | v71; | |
v29 = v60; | |
} | |
else | |
{ | |
v65 = ((v65 & 7) << 18) | (v71 << 6) | v39[3] & 0x3F; | |
v29 = v60; | |
if ( v65 == 1114112 ) | |
goto LABEL_109; | |
v39 += 4; | |
} | |
} | |
} | |
if ( !--v62 ) | |
goto LABEL_164; | |
} | |
break; | |
} | |
LABEL_164: | |
++v51; | |
v45 = v65; | |
if ( v65 == 69 ) | |
goto LABEL_147; | |
} | |
} | |
} | |
LABEL_109: | |
if ( v29 >= 3 ) | |
goto LABEL_110; | |
goto LABEL_114; | |
} | |
if ( *(_WORD *)v3 == 20058 ) | |
{ | |
if ( v3[2] <= -65 ) | |
sub_14001D0B0(v3, v29, 2ui64, v29, (__int64)&off_140020B70); | |
v32 = -2i64; | |
LABEL_92: | |
v30 = 2i64; | |
goto LABEL_94; | |
} | |
v33 = 3i64; | |
if ( v29 < 4 ) | |
goto LABEL_111; | |
if ( *(_DWORD *)v3 == 1314545503 ) | |
{ | |
v32 = -4i64; | |
v30 = 4i64; | |
if ( v29 < 5 ) | |
{ | |
v29 = 4i64; | |
goto LABEL_94; | |
} | |
if ( v3[4] <= -65 ) | |
{ | |
v31 = &off_140020B88; | |
goto LABEL_63; | |
} | |
goto LABEL_94; | |
} | |
LABEL_110: | |
v33 = v29; | |
LABEL_111: | |
if ( *(_WORD *)v3 == 21087 ) | |
{ | |
v49 = v3[2]; | |
if ( v49 <= -65 ) | |
sub_14001D0B0(v3, v33, 2ui64, v33, (__int64)&off_140020DF8); | |
v41 = (__int64)(v3 + 2); | |
v50 = -2i64; | |
goto LABEL_122; | |
} | |
if ( *v3 == 82 ) | |
{ | |
v29 = v33; | |
LABEL_115: | |
v49 = v3[1]; | |
if ( v49 <= -65 ) | |
sub_14001D0B0(v3, v29, 1ui64, v29, (__int64)&off_140020E10); | |
v41 = (__int64)(v3 + 1); | |
v50 = -1i64; | |
goto LABEL_123; | |
} | |
v39 = (unsigned __int8 *)&unk_140020908; | |
if ( v33 <= 3 ) | |
{ | |
v29 = 3i64; | |
goto LABEL_118; | |
} | |
v51 = 0i64; | |
if ( *(_WORD *)v3 ^ 0x5F5F | (unsigned __int8)v3[2] ^ 0x52 ) | |
{ | |
v29 = v33; | |
goto LABEL_119; | |
} | |
v49 = v3[3]; | |
if ( v49 <= -65 ) | |
sub_14001D0B0(v3, v33, 3ui64, v33, (__int64)&off_140020E28); | |
v41 = (__int64)(v3 + 3); | |
v50 = -3i64; | |
LABEL_122: | |
v29 = v33; | |
LABEL_123: | |
v39 = (unsigned __int8 *)&unk_140020908; | |
v40 = 0i64; | |
if ( (unsigned __int8)(v49 - 65) > 0x19u ) | |
{ | |
LABEL_127: | |
v51 = 0i64; | |
v41 = 0i64; | |
goto LABEL_128; | |
} | |
v51 = v29 + v50; | |
v40 = 0i64; | |
v52 = 0i64; | |
while ( v51 != v52 ) | |
{ | |
v44 = *(char *)(v41 + v52++) < 0; | |
if ( v44 ) | |
goto LABEL_127; | |
} | |
v85 = (char *)v41; | |
v86 = v51; | |
v87 = 0i64; | |
LODWORD(v88) = 0; | |
v89 = 0i64; | |
LODWORD(v90) = 0; | |
if ( (unsigned __int8)sub_140012370((__int64)&v85, 0) ) | |
goto LABEL_216; | |
v56 = v85; | |
v57 = v86; | |
if ( !v85 ) | |
{ | |
LABEL_176: | |
v51 = v57 & 1; | |
goto LABEL_119; | |
} | |
v58 = v87; | |
v59 = (unsigned __int8)v86 | ((((unsigned __int64)((HIBYTE(v86) << 16) | (unsigned int)*(unsigned __int16 *)((char *)&v86 + 5)) << 32) | *(unsigned int *)((char *)&v86 + 1)) << 8); | |
if ( v87 >= v59 || (unsigned __int8)(v85[v87] - 65) >= 0x1Au ) | |
goto LABEL_141; | |
v86 = (unsigned __int8)v86 | ((((unsigned __int64)((HIBYTE(v86) << 16) | (unsigned int)*(unsigned __int16 *)((char *)&v86 + 5)) << 32) | *(unsigned int *)((char *)&v86 + 1)) << 8); | |
_mm_storel_ps((double *)&v88, (__m128)v88); | |
v89 = 0i64; | |
LODWORD(v90) = 0; | |
if ( (unsigned __int8)sub_140012370((__int64)&v85, 0) ) | |
LABEL_216: | |
sub_14001CF90( | |
(__int64)"`fmt::Error`s should be impossible without a `fmt::Formatter`", | |
61i64, | |
(__int64)v97, | |
(__int64)&off_140020A08, | |
(__int64)&off_140020E98); | |
v56 = v85; | |
v57 = v86; | |
if ( !v85 ) | |
goto LABEL_176; | |
v58 = v87; | |
v59 = (unsigned __int8)v86 | ((((unsigned __int64)((HIBYTE(v86) << 16) | (unsigned int)*(unsigned __int16 *)((char *)&v86 + 5)) << 32) | *(unsigned int *)((char *)&v86 + 1)) << 8); | |
LABEL_141: | |
if ( v58 ) | |
{ | |
if ( v59 <= v58 ) | |
{ | |
if ( v59 != v58 ) | |
LABEL_144: | |
sub_14001D0B0(v56, v59, v58, v59, (__int64)&off_140020E40); | |
} | |
else if ( v56[v58] <= -65 ) | |
{ | |
goto LABEL_144; | |
} | |
} | |
v72 = &v56[v58]; | |
v54 = v59 - v58; | |
v40 = 0i64; | |
v39 = (unsigned __int8 *)v72; | |
LABEL_181: | |
v53 = 1i64; | |
if ( !v54 ) | |
goto LABEL_129; | |
if ( *v39 == 46 ) | |
{ | |
v73 = v29; | |
LOBYTE(v29) = 46; | |
v74 = 0xF0000003Fi64; | |
v75 = v39; | |
LABEL_194: | |
++v75; | |
LODWORD(v29) = (unsigned __int8)v29; | |
if ( (unsigned int)(unsigned __int8)v29 - 33 < 0x19 ) | |
goto LABEL_199; | |
LABEL_195: | |
if ( (v29 & 0xFFFFFFDF) - 65 < 0x1A | |
|| (v80 = (unsigned int)(v29 - 91), (unsigned int)v80 <= 0x23) && _bittest64(&v74, v80) | |
|| (unsigned int)(v29 - 58) < 7 ) | |
{ | |
while ( 1 ) | |
{ | |
while ( 1 ) | |
{ | |
while ( 1 ) | |
{ | |
LABEL_199: | |
if ( v75 == &v39[v54] ) | |
{ | |
v29 = v73; | |
goto LABEL_130; | |
} | |
LOBYTE(v29) = *v75; | |
if ( (*v75 & 0x80u) == 0 ) | |
goto LABEL_194; | |
v76 = v29 & 0x1F; | |
v77 = v75[1] & 0x3F; | |
if ( (unsigned __int8)v29 > 0xDFu ) | |
break; | |
v75 += 2; | |
LODWORD(v29) = v77 | (v76 << 6); | |
if ( (unsigned int)(v29 - 33) >= 0x19 ) | |
goto LABEL_195; | |
} | |
v78 = v3; | |
v79 = (v77 << 6) | v75[2] & 0x3F; | |
if ( (unsigned __int8)v29 >= 0xF0u ) | |
break; | |
v75 += 3; | |
LODWORD(v29) = (v76 << 12) | v79; | |
v3 = v78; | |
if ( (unsigned int)(v29 - 33) >= 0x19 ) | |
goto LABEL_195; | |
} | |
LODWORD(v29) = ((v29 & 7) << 18) | (v79 << 6) | v75[3] & 0x3F; | |
if ( (_DWORD)v29 == 1114112 ) | |
break; | |
v75 += 4; | |
v3 = v78; | |
if ( (unsigned int)(v29 - 33) >= 0x19 ) | |
goto LABEL_195; | |
} | |
v3 = v78; | |
v29 = v73; | |
} | |
else | |
{ | |
v53 = 0i64; | |
v54 = 0i64; | |
v39 = (unsigned __int8 *)&unk_140020908; | |
v29 = v73; | |
} | |
} | |
else | |
{ | |
v53 = 0i64; | |
v54 = 0i64; | |
v39 = (unsigned __int8 *)&unk_140020908; | |
} | |
LABEL_130: | |
result = v96; | |
*v96 = v53; | |
result[1] = (__int64)v40; | |
result[2] = v41; | |
result[3] = v51; | |
result[4] = (__int64)v3; | |
result[5] = v29; | |
result[6] = (__int64)v39; | |
result[7] = v54; | |
return result; | |
} | |
// 140014E4B: conditional instruction was optimized away because rsi.8==2 | |
// 1400209C0: using guessed type char *off_1400209C0; | |
// 1400209D8: using guessed type char *off_1400209D8; | |
// 1400209F0: using guessed type char *off_1400209F0; | |
// 140020A08: using guessed type __int64 (__fastcall *off_140020A08)(); | |
// 140020B58: using guessed type char *off_140020B58; | |
// 140020B70: using guessed type char *off_140020B70; | |
// 140020B88: using guessed type char *off_140020B88; | |
// 140020DF8: using guessed type char *off_140020DF8; | |
// 140020E10: using guessed type char *off_140020E10; | |
// 140020E28: using guessed type char *off_140020E28; | |
// 140020E40: using guessed type char *off_140020E40; | |
// 140020E98: using guessed type char *off_140020E98; | |
// 1400211A8: using guessed type _BYTE byte_1400211A8[6]; | |
// 140021218: using guessed type void *off_140021218; | |
// 140021230: using guessed type void *off_140021230; | |
//----- (00000001400154F0) ---------------------------------------------------- | |
__int128 *__fastcall sub_1400154F0(__int128 *a1, __int64 a2, __int64 a3) | |
{ | |
__int128 v4; // xmm0 | |
__int128 v5; // xmm1 | |
__int128 v6; // xmm2 | |
__int128 v8[4]; // [rsp+20h] [rbp-48h] BYREF | |
sub_140014800((__int64 *)v8, a2, a3); | |
if ( *(_QWORD *)&v8[0] ) | |
{ | |
v4 = v8[0]; | |
v5 = v8[1]; | |
v6 = v8[2]; | |
a1[3] = v8[3]; | |
a1[2] = v6; | |
a1[1] = v5; | |
*a1 = v4; | |
} | |
else | |
{ | |
*(_QWORD *)a1 = 2i64; | |
} | |
return a1; | |
} | |
//----- (0000000140015540) ---------------------------------------------------- | |
__int64 __fastcall sub_140015540(__int64 a1) | |
{ | |
return *(_QWORD *)(a1 + 32); | |
} | |
//----- (0000000140015550) ---------------------------------------------------- | |
char __fastcall sub_140015550(_QWORD *a1, _QWORD *a2) | |
{ | |
bool v3; // al | |
__int64 v4; // rcx | |
char v5; // cl | |
char result; // al | |
_QWORD *v7; // [rsp+28h] [rbp-B0h] BYREF | |
__int64 v8[2]; // [rsp+30h] [rbp-A8h] BYREF | |
__int64 v9[3]; // [rsp+40h] [rbp-98h] BYREF | |
__int64 *v10; // [rsp+58h] [rbp-80h] BYREF | |
__int64 v11[2]; // [rsp+60h] [rbp-78h] BYREF | |
__int64 v12; // [rsp+70h] [rbp-68h] | |
__int64 v13; // [rsp+78h] [rbp-60h] | |
__int64 v14; // [rsp+80h] [rbp-58h] | |
__int64 v15; // [rsp+88h] [rbp-50h] | |
__int64 v16; // [rsp+90h] [rbp-48h] | |
__int64 *v17; // [rsp+98h] [rbp-40h] BYREF | |
__int64 v18; // [rsp+A0h] [rbp-38h] | |
void **v19; // [rsp+A8h] [rbp-30h] | |
__int64 v20; // [rsp+B0h] [rbp-28h] | |
__int64 *v21; // [rsp+B8h] [rbp-20h] | |
__int64 v22; // [rsp+C0h] [rbp-18h] | |
if ( *a1 ) | |
{ | |
v7 = a1 + 1; | |
v9[0] = 0i64; | |
v9[1] = 1000000i64; | |
v9[2] = (__int64)a2; | |
if ( sub_140017C40((__int64)a2) ) | |
{ | |
v8[0] = (__int64)&v7; | |
v8[1] = (__int64)sub_14000EF50; | |
v11[0] = 2i64; | |
v12 = 2i64; | |
v14 = 0x2000000004i64; | |
LOBYTE(v15) = 3; | |
v16 = 0i64; | |
v10 = v9; | |
v17 = v11; | |
v18 = 1i64; | |
v19 = &off_140021248; | |
v20 = 1i64; | |
v21 = v8; | |
v22 = 1i64; | |
v3 = sub_1400172A0((__int64)&v10, (__int64)&off_1400208B8, (__int64 *)&v17); | |
v4 = v9[0]; | |
if ( !v3 ) | |
goto LABEL_11; | |
} | |
else | |
{ | |
v17 = (__int64 *)&v7; | |
v18 = (__int64)sub_14000EF50; | |
v8[0] = (__int64)v9; | |
v11[0] = 0i64; | |
v12 = (__int64)&off_140021248; | |
v13 = 1i64; | |
v14 = (__int64)&v17; | |
v15 = 1i64; | |
v3 = sub_1400172A0((__int64)v8, (__int64)&off_1400208B8, v11); | |
v4 = v9[0]; | |
if ( !v3 ) | |
{ | |
LABEL_11: | |
if ( v3 ) | |
return 1; | |
if ( v4 ) | |
sub_14001CF90( | |
(__int64)"`fmt::Error` from `SizeLimitedFmtAdapter` was discarded", | |
55i64, | |
(__int64)v11, | |
(__int64)&off_140020A28, | |
(__int64)&off_140021290); | |
return sub_140017BE0(a2); | |
} | |
} | |
if ( v4 ) | |
{ | |
if ( (unsigned __int8)sub_140017BE0(a2) ) | |
return 1; | |
return sub_140017BE0(a2); | |
} | |
goto LABEL_11; | |
} | |
v5 = sub_140017BE0(a2); | |
result = 1; | |
if ( !v5 ) | |
return sub_140017BE0(a2); | |
return result; | |
} | |
// 1400208B8: using guessed type __int64 (__fastcall *off_1400208B8)(); | |
// 140020A28: using guessed type __int64 (__fastcall *off_140020A28)(); | |
// 140021248: using guessed type void *off_140021248; | |
// 140021290: using guessed type void *off_140021290; | |
//----- (0000000140015780) ---------------------------------------------------- | |
__int64 __fastcall sub_140015780(__int64 a1, _QWORD *a2) | |
{ | |
return sub_140017BE0(a2); | |
} | |
//----- (00000001400157A0) ---------------------------------------------------- | |
char __fastcall sub_1400157A0(__int64 a1, _QWORD *a2) | |
{ | |
__int64 v2; // r14 | |
__int64 v3; // r15 | |
__int64 v5; // [rsp+28h] [rbp-40h] BYREF | |
char v6[56]; // [rsp+30h] [rbp-38h] BYREF | |
v2 = *(_QWORD *)(*(_QWORD *)a1 + 8i64); | |
v3 = *(_QWORD *)(*(_QWORD *)a1 + 16i64); | |
sub_140017E50((__int64)v6, a2); | |
for ( ; v3; --v3 ) | |
{ | |
v5 = v2++; | |
sub_140017010(v6, (__int64)&v5, (__int64)&off_1400214A0); | |
} | |
return sub_140017030((__int64)v6); | |
} | |
// 1400214A0: using guessed type __int64 (__fastcall *off_1400214A0)(); | |
//----- (0000000140015820) ---------------------------------------------------- | |
__int64 __fastcall sub_140015820(unsigned __int64 *a1, __int64 a2) | |
{ | |
if ( sub_140017C50(a2) ) | |
return sub_14001A4F0(a1, a2); | |
if ( sub_140017C60(a2) ) | |
return sub_14001A590(a1, a2); | |
return sub_14001AD00(a1, a2); | |
} | |
//----- (0000000140015880) ---------------------------------------------------- | |
__int64 __fastcall sub_140015880(__int64 **a1, unsigned int a2) | |
{ | |
sub_1400161A0(*a1, a2); | |
return 0i64; | |
} | |
//----- (00000001400158A0) ---------------------------------------------------- | |
bool __fastcall sub_1400158A0(__int64 *a1, __int128 *a2) | |
{ | |
__int64 v2; // rax | |
__int128 v3; // xmm0 | |
__int128 v4; // xmm1 | |
__int64 v6; // [rsp+28h] [rbp-40h] BYREF | |
__int128 v7[3]; // [rsp+30h] [rbp-38h] BYREF | |
v2 = *a1; | |
v3 = *a2; | |
v4 = a2[1]; | |
v7[2] = a2[2]; | |
v7[1] = v4; | |
v7[0] = v3; | |
v6 = v2; | |
return sub_1400172A0((__int64)&v6, (__int64)&off_140021470, (__int64 *)v7); | |
} | |
// 140021470: using guessed type __int64 (__fastcall *off_140021470)(); | |
//----- (00000001400158F0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400158F0(__int64 **a1, const void *a2, size_t a3) | |
{ | |
__int64 *v5; // rdi | |
__int64 v6; // r14 | |
v5 = *a1; | |
v6 = (*a1)[2]; | |
if ( **a1 - v6 < a3 ) | |
{ | |
sub_14001CA70(*a1, v6, a3); | |
v6 = v5[2]; | |
} | |
memcpy((void *)(v6 + v5[1]), a2, a3); | |
v5[2] = a3 + v6; | |
return 0i64; | |
} | |
//----- (0000000140015950) ---------------------------------------------------- | |
__int64 __fastcall sub_140015950(__int64 *a1, __int64 a2) | |
{ | |
unsigned __int64 v2; // rdx | |
__int64 v4; // rax | |
unsigned __int64 v5; // rcx | |
__int64 v6; // rdi | |
__int64 result; // rax | |
__int64 v8[2]; // [rsp+28h] [rbp-40h] BYREF | |
__int64 v9; // [rsp+38h] [rbp-30h] | |
__int64 v10[2]; // [rsp+40h] [rbp-28h] BYREF | |
__int64 v11; // [rsp+50h] [rbp-18h] | |
v2 = a2 + 1; | |
if ( !v2 ) | |
LABEL_12: | |
sub_140015AA0(); | |
v4 = *a1; | |
v5 = 2 * *a1; | |
if ( v5 > v2 ) | |
v2 = v5; | |
v6 = 8i64; | |
if ( v2 >= 9 ) | |
v6 = v2; | |
if ( v4 ) | |
{ | |
v8[0] = a1[1]; | |
v8[1] = v4; | |
v9 = 1i64; | |
} | |
else | |
{ | |
v9 = 0i64; | |
} | |
result = sub_140015A10(v10, v6, v6 >= 0, (__int64)v8); | |
if ( v10[0] ) | |
{ | |
result = 0x8000000000000001ui64; | |
if ( v11 != 0x8000000000000001ui64 ) | |
{ | |
if ( v11 ) | |
sub_14001CB30(); | |
goto LABEL_12; | |
} | |
} | |
else | |
{ | |
a1[1] = v10[1]; | |
*a1 = v6; | |
} | |
return result; | |
} | |
//----- (0000000140015A10) ---------------------------------------------------- | |
__int64 __fastcall sub_140015A10(__int64 *a1, __int64 a2, __int64 a3, __int64 a4) | |
{ | |
size_t v6; // rdx | |
__int64 v7; // rax | |
__int64 result; // rax | |
if ( !a3 ) | |
{ | |
a1[1] = a2; | |
a1[2] = 0i64; | |
goto LABEL_10; | |
} | |
if ( *(_QWORD *)(a4 + 16) ) | |
{ | |
v6 = *(_QWORD *)(a4 + 8); | |
if ( v6 ) | |
{ | |
v7 = sub_1400010F0(*(void **)a4, v6); | |
if ( !v7 ) | |
goto LABEL_8; | |
goto LABEL_12; | |
} | |
} | |
if ( !a2 ) | |
{ | |
v7 = 1i64; | |
goto LABEL_12; | |
} | |
v7 = sub_1400010D0(a2, 1i64); | |
if ( v7 ) | |
{ | |
LABEL_12: | |
a1[1] = v7; | |
a1[2] = a2; | |
result = 0i64; | |
goto LABEL_13; | |
} | |
LABEL_8: | |
a1[1] = a2; | |
a1[2] = 1i64; | |
LABEL_10: | |
result = 1i64; | |
LABEL_13: | |
*a1 = result; | |
return result; | |
} | |
// 1400010D0: using guessed type __int64 __fastcall sub_1400010D0(_QWORD, _QWORD); | |
//----- (0000000140015AA0) ---------------------------------------------------- | |
void __noreturn sub_140015AA0() | |
{ | |
__int64 v0[6]; // [rsp+28h] [rbp-30h] BYREF | |
v0[2] = (__int64)&off_140021560; | |
v0[3] = 1i64; | |
v0[0] = 0i64; | |
v0[4] = (__int64)&off_1400214C0; | |
v0[5] = 0i64; | |
sub_14001CBB0((__int64)v0, (__int64)&off_140021570); | |
} | |
// 1400214C0: using guessed type __int64 (__fastcall *off_1400214C0)(); | |
// 140021560: using guessed type char *off_140021560; | |
// 140021570: using guessed type void *off_140021570; | |
//----- (0000000140015AF0) ---------------------------------------------------- | |
void __noreturn sub_140015AF0() | |
{ | |
sub_140001100(); | |
} | |
// 140001100: using guessed type void __noreturn sub_140001100(void); | |
//----- (0000000140015B00) ---------------------------------------------------- | |
__int64 __fastcall sub_140015B00(__int64 a1, const void *a2, size_t a3) | |
{ | |
size_t v3; // r14 | |
void *v7; // rax | |
__int64 v8; // rdx | |
__int128 v10; // [rsp+20h] [rbp-40h] BYREF | |
size_t v11; // [rsp+30h] [rbp-30h] | |
__int128 v12; // [rsp+38h] [rbp-28h] | |
size_t v13; // [rsp+48h] [rbp-18h] | |
char v14; // [rsp+57h] [rbp-9h] | |
__int64 v15; // [rsp+58h] [rbp-8h] | |
v15 = -2i64; | |
v3 = a3 + 1; | |
if ( a3 == -1i64 ) | |
sub_14001CC50((__int64)"called `Option::unwrap()` on a `None` value", 43i64, (__int64)&off_1400215D8); | |
if ( (__int64)(a3 + 1) < 0 ) | |
sub_140015AA0(); | |
v7 = (void *)sub_1400010D0(a3 + 1, 1i64); | |
if ( !v7 ) | |
sub_14001CB30(); | |
*(_QWORD *)&v12 = v3; | |
*((_QWORD *)&v12 + 1) = v7; | |
memcpy(v7, a2, a3); | |
v13 = a3; | |
if ( a3 >= 0x10 ) | |
{ | |
v14 = 1; | |
JUMPOUT(0x140015B9Ci64); | |
} | |
if ( !a3 ) | |
{ | |
LABEL_14: | |
v11 = v13; | |
v10 = v12; | |
v14 = 0; | |
sub_140015C70((__int64 *)&v10); | |
JUMPOUT(0x140015BF0i64); | |
} | |
v8 = 0i64; | |
while ( *((_BYTE *)a2 + v8) ) | |
{ | |
if ( a3 == ++v8 ) | |
goto LABEL_14; | |
} | |
*(_QWORD *)(a1 + 24) = v13; | |
*(_OWORD *)(a1 + 8) = v12; | |
*(_QWORD *)a1 = v8; | |
return a1; | |
} | |
// 140015B98: control flows out of bounds to 140015B9C | |
// 140015BEB: control flows out of bounds to 140015BF0 | |
// 1400010D0: using guessed type __int64 __fastcall sub_1400010D0(_QWORD, _QWORD); | |
// 1400215D8: using guessed type void *off_1400215D8; | |
//----- (0000000140015C70) ---------------------------------------------------- | |
void *__fastcall sub_140015C70(__int64 *a1) | |
{ | |
__int64 *v1; // rbx | |
char *v2; // rdi | |
char *v3; // rsi | |
void *v4; // rsi | |
__int64 v5; // rdi | |
__int64 v7[2]; // [rsp+28h] [rbp-48h] BYREF | |
__int64 v8; // [rsp+38h] [rbp-38h] | |
void *Src[2]; // [rsp+40h] [rbp-30h] BYREF | |
__int64 v10; // [rsp+50h] [rbp-20h] | |
__int64 *v11; // [rsp+60h] [rbp-10h] | |
char v12; // [rsp+6Fh] [rbp-1h] | |
__int64 v13; // [rsp+70h] [rbp+0h] | |
v13 = -2i64; | |
v1 = a1; | |
v2 = (char *)*a1; | |
v3 = (char *)a1[2]; | |
if ( (char *)*a1 != v3 ) | |
{ | |
LABEL_12: | |
if ( v3 != v2 ) | |
goto LABEL_14; | |
goto LABEL_13; | |
} | |
v2 = v3 + 1; | |
if ( v3 == (char *)-1i64 ) | |
goto LABEL_9; | |
if ( v3 ) | |
{ | |
Src[0] = (void *)a1[1]; | |
Src[1] = v3; | |
v10 = 1i64; | |
} | |
else | |
{ | |
v10 = 0i64; | |
} | |
sub_140015A10(v7, (__int64)(v3 + 1), (__int64)v2 >= 0, (__int64)Src); | |
if ( !v7[0] ) | |
{ | |
v1[1] = v7[1]; | |
*v1 = (__int64)v2; | |
goto LABEL_12; | |
} | |
if ( v8 != 0x8000000000000001ui64 ) | |
{ | |
if ( v8 ) | |
{ | |
v12 = 1; | |
JUMPOUT(0x140015DBFi64); | |
} | |
LABEL_9: | |
v12 = 1; | |
JUMPOUT(0x140015D08i64); | |
} | |
LABEL_13: | |
v12 = 1; | |
v11 = v1; | |
sub_140015950(v1, (__int64)v3); | |
v1 = v11; | |
v3 = (char *)v11[2]; | |
LABEL_14: | |
v3[v1[1]] = 0; | |
v1[2] = (__int64)(v3 + 1); | |
*(_OWORD *)Src = *(_OWORD *)v1; | |
v4 = (void *)v1[2]; | |
v10 = (__int64)v4; | |
if ( Src[0] <= v4 ) | |
return Src[1]; | |
if ( v4 ) | |
{ | |
v5 = sub_1400010F0(Src[1], (size_t)Src[0]); | |
if ( !v5 ) | |
JUMPOUT(0x140015D83i64); | |
} | |
else | |
{ | |
v5 = 1i64; | |
sub_1400010E0(Src[1], Src[0], 1i64); | |
} | |
return (void *)v5; | |
} | |
// 140015D04: control flows out of bounds to 140015D08 | |
// 140015D81: control flows out of bounds to 140015D83 | |
// 140015DBB: control flows out of bounds to 140015DBF | |
// 1400010E0: using guessed type __int64 __fastcall sub_1400010E0(_QWORD, _QWORD, _QWORD); | |
//----- (0000000140015E30) ---------------------------------------------------- | |
// positive sp value has been detected, the output may be wrong! | |
void __fastcall sub_140015E30(__int64 *a1, _QWORD *a2) | |
{ | |
__int64 v4; // r8 | |
__int64 v5; // rax | |
__int64 v6; // rcx | |
__int64 v7; // rdx | |
unsigned __int64 v8; // r9 | |
__int64 v9; // rdi | |
__int64 v10; // r8 | |
unsigned __int64 v11; // r9 | |
__int64 v12; // r10 | |
unsigned __int64 v13; // r9 | |
const __m128i *v14; // r10 | |
__m128i v15; // xmm0 | |
__m128i v16; // xmm1 | |
__m128i v17; // xmm1 | |
__int64 v18; // rdx | |
bool v19; // dl | |
__int64 v20; // rcx | |
v4 = a2[3]; | |
v5 = 1i64; | |
if ( v4 ) | |
{ | |
v6 = a2[2]; | |
v7 = 16 * v4; | |
v8 = (v4 - 1) & 0xFFFFFFFFFFFFFFFi64; | |
if ( v8 >= 4 ) | |
{ | |
v11 = v8 + 1; | |
v12 = 4i64; | |
if ( (v11 & 3) != 0 ) | |
v12 = v11 & 3; | |
v13 = v11 - v12; | |
v10 = v6 + 16 * v13; | |
v14 = (const __m128i *)(v6 + 40); | |
v15 = 0i64; | |
v16 = 0i64; | |
do | |
{ | |
v15 = _mm_add_epi64(v15, _mm_unpacklo_epi64(_mm_loadu_si128(v14 - 2), _mm_loadu_si128(v14 - 1))); | |
v16 = _mm_add_epi64(v16, _mm_unpacklo_epi64(_mm_loadu_si128(v14), _mm_loadu_si128(v14 + 1))); | |
v14 += 4; | |
v13 -= 4i64; | |
} | |
while ( v13 ); | |
v17 = _mm_add_epi64(v16, v15); | |
v9 = _mm_add_epi64(_mm_shuffle_epi32(v17, 238), v17).m128i_u64[0]; | |
} | |
else | |
{ | |
v9 = 0i64; | |
v10 = a2[2]; | |
} | |
v18 = v6 + v7; | |
do | |
{ | |
v9 += *(_QWORD *)(v10 + 8); | |
v10 += 16i64; | |
} | |
while ( v10 != v18 ); | |
if ( a2[5] ) | |
{ | |
v19 = *(_QWORD *)(v6 + 8) == 0i64; | |
v20 = 0i64; | |
if ( v9 < 0 || v19 && (unsigned __int64)v9 < 0x10 ) | |
goto LABEL_20; | |
v9 *= 2i64; | |
} | |
if ( v9 ) | |
{ | |
if ( v9 < 0 ) | |
JUMPOUT(0x140015FE8i64); | |
v5 = sub_1400010D0(v9, 1i64); | |
if ( !v5 ) | |
sub_14001CB30(); | |
v20 = v9; | |
LABEL_20: | |
*a1 = v20; | |
a1[1] = v5; | |
a1[2] = 0i64; | |
JUMPOUT(0x140015F99i64); | |
} | |
} | |
v20 = 0i64; | |
goto LABEL_20; | |
} | |
// 140015FBD: positive sp value 98 has been found | |
// 140015F95: control flows out of bounds to 140015F99 | |
// 140015F48: control flows out of bounds to 140015FE8 | |
// 1400010D0: using guessed type __int64 __fastcall sub_1400010D0(_QWORD, _QWORD); | |
//----- (0000000140016030) ---------------------------------------------------- | |
void __fastcall sub_140016030(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
if ( a3 ) | |
{ | |
if ( a3 < 0 ) | |
sub_140015AA0(); | |
if ( !sub_1400010D0(a3, 1i64) ) | |
sub_14001CB30(); | |
} | |
JUMPOUT(0x1400160C3i64); | |
} | |
// 1400160A5: control flows out of bounds to 1400160C3 | |
// 1400010D0: using guessed type __int64 __fastcall sub_1400010D0(_QWORD, _QWORD); | |
//----- (00000001400161A0) ---------------------------------------------------- | |
_BYTE *__fastcall sub_1400161A0(__int64 *a1, unsigned int a2) | |
{ | |
char v2; // di | |
__int64 v4; // rdx | |
_BYTE *result; // rax | |
size_t v6; // rdi | |
__int64 v7; // rbx | |
int Src; // [rsp+2Ch] [rbp-1Ch] BYREF | |
v2 = a2; | |
if ( a2 > 0x7F ) | |
{ | |
Src = 0; | |
if ( a2 >= 0x800 ) | |
{ | |
if ( a2 >= 0x10000 ) | |
{ | |
LOBYTE(Src) = (a2 >> 18) & 7 | 0xF0; | |
BYTE1(Src) = (a2 >> 12) & 0x3F | 0x80; | |
BYTE2(Src) = (a2 >> 6) & 0x3F | 0x80; | |
HIBYTE(Src) = a2 & 0x3F | 0x80; | |
v6 = 4i64; | |
} | |
else | |
{ | |
LOBYTE(Src) = (a2 >> 12) | 0xE0; | |
BYTE1(Src) = (a2 >> 6) & 0x3F | 0x80; | |
BYTE2(Src) = a2 & 0x3F | 0x80; | |
v6 = 3i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(Src) = (a2 >> 6) | 0xC0; | |
BYTE1(Src) = a2 & 0x3F | 0x80; | |
v6 = 2i64; | |
} | |
v7 = a1[2]; | |
if ( *a1 - v7 < v6 ) | |
{ | |
sub_14001CA70(a1, a1[2], v6); | |
v7 = a1[2]; | |
} | |
result = memcpy((void *)(v7 + a1[1]), &Src, v6); | |
a1[2] = v6 + v7; | |
} | |
else | |
{ | |
v4 = a1[2]; | |
if ( v4 == *a1 ) | |
{ | |
sub_140015950(a1, v4); | |
v4 = a1[2]; | |
} | |
result = (_BYTE *)a1[1]; | |
result[v4] = v2; | |
a1[2] = v4 + 1; | |
} | |
return result; | |
} | |
//----- (00000001400162C0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400162C0(__int64 a1, unsigned __int64 a2) | |
{ | |
bool v3; // cf | |
__int64 v4; // rdx | |
__int64 v5; // rax | |
__int64 v6; // rax | |
unsigned __int64 v7; // rax | |
char v9[8]; // [rsp+30h] [rbp-8h] BYREF | |
v3 = a2 < 9; | |
v4 = 8i64; | |
if ( !v3 ) | |
v4 = a2; | |
v5 = ((a2 + 15) & -(__int64)a2) - 16; | |
v3 = __CFADD__(v5, 16i64); | |
v6 = v5 + 16; | |
if ( v3 || (v3 = __CFADD__(a1, v6), v7 = a1 + v6, v3) || 0x8000000000000000ui64 - v4 < v7 ) | |
sub_14001CF90( | |
(__int64)"called `Result::unwrap()` on an `Err` value", | |
43i64, | |
(__int64)v9, | |
(__int64)&off_140021510, | |
(__int64)&off_140021678); | |
return (v4 + v7 - 1) & -v4; | |
} | |
// 140021510: using guessed type __int64 (__fastcall *off_140021510)(); | |
// 140021678: using guessed type char *off_140021678; | |
// 1400162C0: using guessed type char var_8[8]; | |
//----- (0000000140016340) ---------------------------------------------------- | |
__int64 __fastcall sub_140016340(__int64 a1, _QWORD *a2) | |
{ | |
__int64 v3; // [rsp+40h] [rbp-8h] BYREF | |
v3 = a1 + 8; | |
return sub_140017D60( | |
a2, | |
(__int64)&unk_140021690, | |
8i64, | |
a1, | |
(__int64)&off_140021698, | |
(__int64)&v3, | |
(__int64)&off_1400216B8); | |
} | |
// 140021698: using guessed type __int64 (__fastcall *off_140021698)(); | |
// 1400216B8: using guessed type __int64 (__fastcall *off_1400216B8)(); | |
//----- (0000000140016390) ---------------------------------------------------- | |
void __noreturn sub_140016390() | |
{ | |
while ( 1 ) | |
; | |
} | |
//----- (00000001400163B0) ---------------------------------------------------- | |
unsigned __int64 __fastcall sub_1400163B0(unsigned __int8 *a1, unsigned __int64 a2, unsigned int a3) | |
{ | |
unsigned __int64 v3; // r9 | |
__int64 v4; // r10 | |
int v5; // eax | |
__int64 v6; // rax | |
unsigned __int64 v7; // rdx | |
__int64 v8; // r11 | |
__int64 v9; // rax | |
int v10; // esi | |
unsigned int v11; // edi | |
int v12; // esi | |
bool v13; // cf | |
unsigned int v14; // esi | |
__int64 v15; // rsi | |
int v16; // edi | |
int v17; // kr00_4 | |
unsigned int v18; // ebp | |
int v19; // edi | |
unsigned int v20; // edi | |
__int64 v21; // rdx | |
unsigned int v22; // r11d | |
__int64 v23; // r11 | |
int v24; // kr08_4 | |
unsigned int v25; // esi | |
unsigned int v27; // [rsp+24h] [rbp-64h] BYREF | |
__int64 v28[2]; // [rsp+28h] [rbp-60h] BYREF | |
__int64 v29[10]; // [rsp+38h] [rbp-50h] BYREF | |
v27 = a3; | |
if ( a3 - 2 > 0x22 ) | |
{ | |
v28[0] = (__int64)&v27; | |
v28[1] = (__int64)sub_14001ABE0; | |
v29[2] = (__int64)&off_1400217B0; | |
v29[3] = 1i64; | |
v29[0] = 0i64; | |
v29[4] = (__int64)v28; | |
v29[5] = 1i64; | |
sub_14001CBB0((__int64)v29, (__int64)&off_1400217E0); | |
} | |
v3 = a2; | |
v4 = 1i64; | |
if ( !a2 ) | |
{ | |
v6 = 0i64; | |
v7 = 0i64; | |
return v7 | v4 | v6; | |
} | |
v5 = *a1; | |
if ( v5 == 45 ) | |
{ | |
if ( a2 == 1 ) | |
goto LABEL_18; | |
} | |
else if ( v5 == 43 ) | |
{ | |
v3 = a2 - 1; | |
if ( a2 == 1 ) | |
{ | |
v6 = 0i64; | |
v7 = 256i64; | |
return v7 | v4 | v6; | |
} | |
++a1; | |
} | |
if ( a3 <= 0x10 && v3 < 9 ) | |
{ | |
if ( a3 <= 0xA ) | |
{ | |
v21 = 0i64; | |
LODWORD(v9) = 0; | |
while ( 1 ) | |
{ | |
v22 = a1[v21] - 48; | |
if ( v22 >= a3 ) | |
break; | |
v9 = v22 + a3 * (_DWORD)v9; | |
if ( v3 == ++v21 ) | |
goto LABEL_33; | |
} | |
} | |
else | |
{ | |
v8 = 0i64; | |
LODWORD(v9) = 0; | |
while ( 1 ) | |
{ | |
v10 = a1[v8]; | |
v11 = v10 - 48; | |
if ( (unsigned int)(v10 - 48) >= 0xA ) | |
{ | |
v12 = (v10 | 0x20) - 97; | |
v13 = __CFADD__(v12, 10); | |
v14 = v12 + 10; | |
if ( v13 ) | |
v14 = -1; | |
v11 = v14; | |
if ( v14 >= a3 ) | |
break; | |
} | |
v9 = v11 + a3 * (_DWORD)v9; | |
if ( v3 == ++v8 ) | |
goto LABEL_33; | |
} | |
} | |
LABEL_18: | |
v7 = 256i64; | |
LABEL_19: | |
v6 = 0i64; | |
return v7 | v4 | v6; | |
} | |
if ( a3 <= 0xA ) | |
{ | |
v23 = 0i64; | |
v9 = 0i64; | |
while ( v3 != v23 ) | |
{ | |
v24 = a3 * v9; | |
v25 = a1[v23] - 48; | |
if ( v25 >= a3 || !is_mul_ok(a3, v9) ) | |
{ | |
v7 = ((unsigned __int64)(v25 < a3) << 8) + 256; | |
goto LABEL_19; | |
} | |
++v23; | |
v9 = v25 + v24; | |
if ( __CFADD__(v25, v24) ) | |
{ | |
v7 = 512i64; | |
goto LABEL_19; | |
} | |
} | |
} | |
else | |
{ | |
v15 = 0i64; | |
v9 = 0i64; | |
while ( v3 != v15 ) | |
{ | |
v16 = a1[v15]; | |
v17 = a3 * v9; | |
v18 = v16 - 48; | |
if ( (unsigned int)(v16 - 48) >= 0xA ) | |
{ | |
v19 = (v16 | 0x20) - 97; | |
v13 = __CFADD__(v19, 10); | |
v20 = v19 + 10; | |
if ( v13 ) | |
v20 = -1; | |
v18 = v20; | |
if ( v20 >= a3 ) | |
goto LABEL_18; | |
} | |
v7 = 512i64; | |
if ( is_mul_ok(a3, v9) ) | |
{ | |
++v15; | |
v9 = v18 + v17; | |
if ( !__CFADD__(v18, v17) ) | |
continue; | |
} | |
goto LABEL_19; | |
} | |
} | |
LABEL_33: | |
v6 = v9 << 32; | |
v7 = 0i64; | |
v4 = 0i64; | |
return v7 | v4 | v6; | |
} | |
// 1400217B0: using guessed type char *off_1400217B0; | |
// 1400217E0: using guessed type char *off_1400217E0; | |
//----- (00000001400165E0) ---------------------------------------------------- | |
char __fastcall sub_1400165E0(unsigned __int64 *a1, __int64 *a2) | |
{ | |
__int64 v4; // rcx | |
__int64 v5; // rdx | |
__int64 v7[8]; // [rsp+28h] [rbp-40h] BYREF | |
if ( (unsigned __int8)sub_14001A7D0(a1, (__int64)a2) ) | |
return 1; | |
v4 = *a2; | |
v5 = a2[1]; | |
v7[0] = 0i64; | |
v7[2] = (__int64)&off_140021800; | |
v7[3] = 1i64; | |
v7[4] = (__int64)"from_str_radix_int: must lie in the range `[2, 36]` - found "; | |
v7[5] = 0i64; | |
if ( sub_1400172A0(v4, v5, v7) ) | |
return 1; | |
else | |
return sub_14001A7D0(a1 + 1, (__int64)a2); | |
} | |
// 140021800: using guessed type void *off_140021800; | |
//----- (0000000140016680) ---------------------------------------------------- | |
__int64 __fastcall sub_140016680(unsigned __int16 *a1) | |
{ | |
return *a1; | |
} | |
//----- (0000000140016690) ---------------------------------------------------- | |
__int64 __fastcall sub_140016690(unsigned int *a1) | |
{ | |
unsigned int v2; // eax | |
__int64 v3; // rcx | |
__int64 result; // rax | |
v2 = a1[2] - 1114112; | |
v3 = 3i64; | |
if ( v2 < 3 ) | |
v3 = v2; | |
result = 1114112i64; | |
switch ( v3 ) | |
{ | |
case 0i64: | |
return result; | |
case 1i64: | |
result = *a1; | |
a1[2] = 1114112; | |
break; | |
case 2i64: | |
a1[2] = 1114113; | |
result = 92i64; | |
break; | |
case 3i64: | |
switch ( *((_BYTE *)a1 + 12) ) | |
{ | |
case 0: | |
return result; | |
case 1: | |
*((_BYTE *)a1 + 12) = 0; | |
result = 125i64; | |
break; | |
case 2: | |
JUMPOUT(0x140016710i64); | |
case 3: | |
*((_BYTE *)a1 + 12) = 2; | |
result = 123i64; | |
break; | |
case 4: | |
*((_BYTE *)a1 + 12) = 3; | |
result = 117i64; | |
break; | |
case 5: | |
*((_BYTE *)a1 + 12) = 4; | |
result = 92i64; | |
break; | |
} | |
break; | |
} | |
return result; | |
} | |
// 14001670D: control flows out of bounds to 140016710 | |
//----- (0000000140016770) ---------------------------------------------------- | |
__int64 __fastcall sub_140016770(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
sub_140018DE0(a1, a2, a3 - 1); | |
return a1; | |
} | |
//----- (0000000140016790) ---------------------------------------------------- | |
bool __fastcall sub_140016790(__int64 a1, __int64 *a2) | |
{ | |
__int64 v2; // rcx | |
__int64 v3; // rdx | |
__int64 v5[6]; // [rsp+28h] [rbp-60h] BYREF | |
__int64 v6[6]; // [rsp+58h] [rbp-30h] BYREF | |
v5[0] = a1; | |
v5[1] = (__int64)sub_14001AFA0; | |
v5[2] = a1 + 16; | |
v5[3] = (__int64)sub_14001ABE0; | |
v5[4] = a1 + 20; | |
v5[5] = (__int64)sub_14001ABE0; | |
v2 = *a2; | |
v3 = a2[1]; | |
v6[0] = 0i64; | |
v6[2] = (__int64)&off_140021838; | |
v6[3] = 3i64; | |
v6[4] = (__int64)v5; | |
v6[5] = 3i64; | |
return sub_1400172A0(v2, v3, v6); | |
} | |
// 140021838: using guessed type char *off_140021838; | |
//----- (0000000140016820) ---------------------------------------------------- | |
__int64 __fastcall sub_140016820(__int64 a1) | |
{ | |
return *(_QWORD *)a1; | |
} | |
//----- (0000000140016840) ---------------------------------------------------- | |
__int64 __fastcall sub_140016840(__int64 a1) | |
{ | |
return *(_QWORD *)(a1 + 24); | |
} | |
//----- (0000000140016850) ---------------------------------------------------- | |
__int64 __fastcall sub_140016850(__int64 a1) | |
{ | |
return *(unsigned __int8 *)(a1 + 32); | |
} | |
//----- (0000000140016860) ---------------------------------------------------- | |
__int64 __fastcall sub_140016860(__int64 *a1, __int64 *a2) | |
{ | |
unsigned int v2; // ebp | |
__int64 v4; // rsi | |
__int64 v5; // rdi | |
__int64 (__fastcall *v6)(__int64, __int64 *); // rax | |
__int64 v7; // r14 | |
unsigned int v8; // eax | |
__int64 v10; // [rsp+28h] [rbp-90h] BYREF | |
__int64 v11[2]; // [rsp+30h] [rbp-88h] BYREF | |
void **v12; // [rsp+40h] [rbp-78h] | |
__int64 v13; // [rsp+48h] [rbp-70h] | |
__int64 **v14; // [rsp+50h] [rbp-68h] | |
__int64 v15; // [rsp+58h] [rbp-60h] | |
__int64 *v16; // [rsp+60h] [rbp-58h] BYREF | |
__int64 (__fastcall *v17)(__int64, __int64 *); // [rsp+68h] [rbp-50h] | |
__int64 *v18; // [rsp+70h] [rbp-48h] | |
__int64 (__fastcall *v19)(unsigned int *, __int64); // [rsp+78h] [rbp-40h] | |
__int64 v20; // [rsp+80h] [rbp-38h] | |
__int64 (__fastcall *v21)(unsigned int *, __int64); // [rsp+88h] [rbp-30h] | |
v4 = *a2; | |
v5 = a2[1]; | |
LOBYTE(v2) = 1; | |
if ( !(*(unsigned __int8 (__fastcall **)(__int64, void *, __int64))(v5 + 24))(*a2, &unk_140021868, 12i64) ) | |
{ | |
if ( a1[2] ) | |
{ | |
v10 = a1[2]; | |
v16 = &v10; | |
v6 = (__int64 (__fastcall *)(__int64, __int64 *))sub_14001AF90; | |
} | |
else | |
{ | |
v7 = *a1; | |
if ( (*(__int64 (__fastcall **)(__int64))(a1[1] + 24))(*a1) != 0xC1A2C89CCD1E7BC1ui64 ) | |
{ | |
LABEL_7: | |
v16 = (__int64 *)a1[3]; | |
v17 = sub_14001AFA0; | |
v18 = v16 + 2; | |
v19 = sub_14001ABE0; | |
v20 = (__int64)v16 + 20; | |
v21 = sub_14001ABE0; | |
v11[0] = 0i64; | |
v12 = (void **)&off_140021838; | |
v13 = 3i64; | |
v14 = &v16; | |
v15 = 3i64; | |
LOBYTE(v8) = sub_1400172A0(v4, v5, v11); | |
return v8; | |
} | |
v10 = v7; | |
v16 = &v10; | |
v6 = (__int64 (__fastcall *)(__int64, __int64 *))sub_14001AFC0; | |
} | |
v17 = v6; | |
v11[0] = 0i64; | |
v12 = &off_140021878; | |
v13 = 2i64; | |
v14 = &v16; | |
v15 = 1i64; | |
if ( !sub_1400172A0(v4, v5, v11) ) | |
goto LABEL_7; | |
} | |
return v2; | |
} | |
// 1400169B5: variable 'v8' is possibly undefined | |
// 1400169B7: variable 'v2' is possibly undefined | |
// 140021838: using guessed type char *off_140021838; | |
// 140021878: using guessed type void *off_140021878; | |
//----- (00000001400169D0) ---------------------------------------------------- | |
char __fastcall sub_1400169D0(__int64 *a1, __int64 a2, unsigned __int64 a3) | |
{ | |
bool *v5; // r15 | |
unsigned __int64 v6; // r14 | |
unsigned __int64 v7; // r13 | |
char v8; // r12 | |
bool v9; // al | |
unsigned __int64 v10; // rbp | |
unsigned __int64 v11; // r8 | |
__int64 v12; // rdx | |
unsigned __int64 v13; // r13 | |
unsigned __int64 v14; // rbx | |
__int64 v16; // [rsp+28h] [rbp-50h] | |
__int64 v17; // [rsp+30h] [rbp-48h] | |
v5 = (bool *)a1[2]; | |
v17 = *a1; | |
v16 = a1[1]; | |
v6 = 0i64; | |
v7 = 0i64; | |
v8 = 0; | |
do | |
{ | |
if ( v8 ) | |
return 0; | |
if ( v7 > a3 ) | |
{ | |
v10 = v7; | |
goto LABEL_18; | |
} | |
while ( 1 ) | |
{ | |
v11 = a3 - v7; | |
if ( a3 - v7 >= 0x10 ) | |
break; | |
v12 = 0i64; | |
if ( !v11 ) | |
goto LABEL_17; | |
while ( *(_BYTE *)(a2 + v7 + v12) != 10 ) | |
{ | |
if ( v11 == ++v12 ) | |
goto LABEL_17; | |
} | |
LABEL_14: | |
v10 = v12 + v7 + 1; | |
v13 = v12 + v7; | |
if ( v13 < a3 && *(_BYTE *)(a2 + v13) == 10 ) | |
{ | |
v8 = 0; | |
v7 = v10; | |
v14 = v10; | |
goto LABEL_19; | |
} | |
v7 = v10; | |
if ( v10 > a3 ) | |
goto LABEL_18; | |
} | |
if ( sub_140018A00(0xAu, a2 + v7, v11) == 1 ) | |
goto LABEL_14; | |
LABEL_17: | |
v10 = a3; | |
LABEL_18: | |
v7 = v10; | |
v8 = 1; | |
v10 = v6; | |
v14 = a3; | |
if ( v6 == a3 ) | |
return 0; | |
LABEL_19: | |
if ( *v5 | |
&& (*(unsigned __int8 (__fastcall **)(__int64, const char *, __int64))(v16 + 24))( | |
v17, | |
" {\n,\n, { } }(\n(,\n", | |
4i64) ) | |
{ | |
break; | |
} | |
v9 = v14 != v6 && *(_BYTE *)(v14 + a2 - 1) == 10; | |
*v5 = v9; | |
v6 = v10; | |
} | |
while ( !(*(unsigned __int8 (__fastcall **)(__int64))(v16 + 24))(v17) ); | |
return 1; | |
} | |
// 140016AC0: variable 'v12' is possibly undefined | |
//----- (0000000140016B60) ---------------------------------------------------- | |
_BYTE *__fastcall sub_140016B60(_BYTE *a1, __int64 a2, unsigned __int64 a3, __int64 a4, __int64 a5) | |
{ | |
char v6; // bl | |
_QWORD *v11; // r14 | |
int v12; // eax | |
char v13; // cl | |
__int64 v14; // r8 | |
char *v15; // rdx | |
char v16; // al | |
int v17; // ecx | |
char v18; // dl | |
char v19; // [rsp+2Fh] [rbp-99h] BYREF | |
__int128 v20; // [rsp+30h] [rbp-98h] BYREF | |
char *v21; // [rsp+40h] [rbp-88h] | |
__int128 *v22; // [rsp+50h] [rbp-78h] BYREF | |
__int64 (__fastcall **v23)(); // [rsp+58h] [rbp-70h] | |
__int128 v24; // [rsp+60h] [rbp-68h] | |
__int128 v25; // [rsp+70h] [rbp-58h] | |
int v26; // [rsp+80h] [rbp-48h] | |
int v27; // [rsp+84h] [rbp-44h] | |
char v28; // [rsp+88h] [rbp-40h] | |
v6 = 1; | |
if ( a1[8] ) | |
goto LABEL_2; | |
v11 = *(_QWORD **)a1; | |
v12 = *(_DWORD *)(*(_QWORD *)a1 + 48i64); | |
v13 = a1[9]; | |
if ( (v12 & 4) != 0 ) | |
{ | |
if ( !v13 ) | |
{ | |
if ( (*(unsigned __int8 (__fastcall **)(_QWORD, char *, __int64))(v11[1] + 24i64))( | |
*v11, | |
" {\n,\n, { } }(\n(,\n", | |
3i64) ) | |
{ | |
goto LABEL_2; | |
} | |
v12 = *((_DWORD *)v11 + 12); | |
} | |
v19 = 1; | |
v20 = *(_OWORD *)v11; | |
v21 = &v19; | |
v17 = *((_DWORD *)v11 + 13); | |
v18 = *((_BYTE *)v11 + 56); | |
v26 = v12; | |
v27 = v17; | |
v28 = v18; | |
v24 = *((_OWORD *)v11 + 1); | |
v25 = *((_OWORD *)v11 + 2); | |
v22 = &v20; | |
v23 = &off_140021A68; | |
if ( !sub_1400169D0((__int64 *)&v20, a2, a3) | |
&& !sub_1400169D0((__int64 *)&v20, (__int64)&unk_140021A40, 2ui64) | |
&& !(*(unsigned __int8 (__fastcall **)(__int64, __int128 **))(a5 + 24))(a4, &v22) ) | |
{ | |
v16 = ((__int64 (__fastcall *)(__int128 *, char *, __int64))v23[3])(v22, ",\n, { } }(\n(,\n", 2i64); | |
goto LABEL_17; | |
} | |
} | |
else | |
{ | |
v14 = 0i64; | |
v15 = ", { } }(\n(,\n"; | |
if ( !v13 ) | |
v15 = " { } }(\n(,\n"; | |
LOBYTE(v14) = v13 == 0; | |
if ( !(*(unsigned __int8 (__fastcall **)(_QWORD, char *, __int64))(v11[1] + 24i64))(*v11, v15, v14 | 2) | |
&& !(*(unsigned __int8 (__fastcall **)(_QWORD, __int64, unsigned __int64))(v11[1] + 24i64))(*v11, a2, a3) | |
&& !(*(unsigned __int8 (__fastcall **)(_QWORD, void *, __int64))(v11[1] + 24i64))(*v11, &unk_140021A40, 2i64) ) | |
{ | |
v16 = (*(__int64 (__fastcall **)(__int64, _QWORD *))(a5 + 24))(a4, v11); | |
LABEL_17: | |
v6 = v16; | |
} | |
} | |
LABEL_2: | |
a1[8] = v6; | |
a1[9] = 1; | |
return a1; | |
} | |
// 140021A68: using guessed type __int64 (__fastcall *off_140021A68)(); | |
//----- (0000000140016D20) ---------------------------------------------------- | |
char __fastcall sub_140016D20(_BYTE *a1) | |
{ | |
bool v2; // zf | |
char v3; // cl | |
char result; // al | |
char *v5; // rdx | |
__int64 v6; // r8 | |
v2 = a1[9] == 0; | |
v3 = a1[8]; | |
if ( v2 ) | |
return v3 != 0; | |
result = 1; | |
if ( !v3 ) | |
{ | |
if ( (*(_BYTE *)(*(_QWORD *)a1 + 48i64) & 4) != 0 ) | |
{ | |
v5 = "} }(\n(,\n"; | |
v6 = 1i64; | |
} | |
else | |
{ | |
v5 = " }(\n(,\n"; | |
v6 = 2i64; | |
} | |
result = (*(__int64 (__fastcall **)(_QWORD, char *, __int64))(*(_QWORD *)(*(_QWORD *)a1 + 8i64) + 24i64))( | |
**(_QWORD **)a1, | |
v5, | |
v6); | |
} | |
a1[8] = result; | |
return result; | |
} | |
//----- (0000000140016D90) ---------------------------------------------------- | |
__int64 *__fastcall sub_140016D90(__int64 *a1, __int64 a2, __int64 a3) | |
{ | |
__int64 v4; // r15 | |
char v5; // al | |
_QWORD *v9; // r14 | |
int v10; // eax | |
char *v11; // rdx | |
char v12; // cl | |
int v13; // ecx | |
char v14; // dl | |
char v15; // [rsp+2Fh] [rbp-89h] BYREF | |
__int128 *v16; // [rsp+30h] [rbp-88h] BYREF | |
__int64 (__fastcall **v17)(); // [rsp+38h] [rbp-80h] | |
__int128 v18; // [rsp+40h] [rbp-78h] | |
__int128 v19; // [rsp+50h] [rbp-68h] | |
int v20; // [rsp+60h] [rbp-58h] | |
int v21; // [rsp+64h] [rbp-54h] | |
char v22; // [rsp+68h] [rbp-50h] | |
__int128 v23; // [rsp+70h] [rbp-48h] BYREF | |
char *v24; // [rsp+80h] [rbp-38h] | |
if ( *((_BYTE *)a1 + 16) ) | |
{ | |
v4 = *a1; | |
LABEL_3: | |
v5 = 1; | |
goto LABEL_4; | |
} | |
v4 = *a1; | |
v9 = (_QWORD *)a1[1]; | |
v10 = *((_DWORD *)v9 + 12); | |
if ( (v10 & 4) != 0 ) | |
{ | |
if ( !v4 ) | |
{ | |
if ( (*(unsigned __int8 (__fastcall **)(_QWORD, char *, __int64))(v9[1] + 24i64))(*v9, "(\n(,\n", 2i64) ) | |
{ | |
v5 = 1; | |
v4 = 0i64; | |
goto LABEL_4; | |
} | |
v10 = *((_DWORD *)v9 + 12); | |
} | |
v15 = 1; | |
v23 = *(_OWORD *)v9; | |
v24 = &v15; | |
v13 = *((_DWORD *)v9 + 13); | |
v14 = *((_BYTE *)v9 + 56); | |
v20 = v10; | |
v21 = v13; | |
v22 = v14; | |
v18 = *((_OWORD *)v9 + 1); | |
v19 = *((_OWORD *)v9 + 2); | |
v16 = &v23; | |
v17 = &off_140021A68; | |
if ( !(*(unsigned __int8 (__fastcall **)(__int64, __int128 **))(a3 + 24))(a2, &v16) ) | |
{ | |
v5 = ((__int64 (__fastcall *)(__int128 *, char *, __int64))v17[3])(v16, ",\n, { } }(\n(,\n", 2i64); | |
goto LABEL_4; | |
} | |
goto LABEL_3; | |
} | |
v11 = ", { } }(\n(,\n"; | |
if ( !v4 ) | |
v11 = "(,\n"; | |
v12 = (*(__int64 (__fastcall **)(_QWORD, char *, __int64))(v9[1] + 24i64))(*v9, v11, 2i64 - (v4 == 0)); | |
v5 = 1; | |
if ( !v12 ) | |
v5 = (*(__int64 (__fastcall **)(__int64, _QWORD *))(a3 + 24))(a2, v9); | |
LABEL_4: | |
*((_BYTE *)a1 + 16) = v5; | |
*a1 = v4 + 1; | |
return a1; | |
} | |
// 140021A68: using guessed type __int64 (__fastcall *off_140021A68)(); | |
//----- (0000000140016EE0) ---------------------------------------------------- | |
void __fastcall sub_140016EE0(_BYTE *a1, __int64 a2, __int64 a3) | |
{ | |
char v4; // bl | |
_QWORD *v7; // r15 | |
int v8; // eax | |
char v9; // cl | |
int v10; // ecx | |
char v11; // dl | |
char v12; // [rsp+2Fh] [rbp-89h] BYREF | |
__int128 *v13; // [rsp+30h] [rbp-88h] BYREF | |
__int64 (__fastcall **v14)(); // [rsp+38h] [rbp-80h] | |
__int128 v15; // [rsp+40h] [rbp-78h] | |
__int128 v16; // [rsp+50h] [rbp-68h] | |
int v17; // [rsp+60h] [rbp-58h] | |
int v18; // [rsp+64h] [rbp-54h] | |
char v19; // [rsp+68h] [rbp-50h] | |
__int128 v20; // [rsp+70h] [rbp-48h] BYREF | |
char *v21; // [rsp+80h] [rbp-38h] | |
v4 = 1; | |
if ( !a1[8] ) | |
{ | |
v7 = *(_QWORD **)a1; | |
v8 = *(_DWORD *)(*(_QWORD *)a1 + 48i64); | |
v9 = a1[9]; | |
if ( (v8 & 4) != 0 ) | |
{ | |
if ( !v9 ) | |
{ | |
if ( (*(unsigned __int8 (__fastcall **)(_QWORD, char *, __int64))(v7[1] + 24i64))(*v7, "\n", 1i64) ) | |
goto LABEL_2; | |
v8 = *((_DWORD *)v7 + 12); | |
} | |
v12 = 1; | |
v20 = *(_OWORD *)v7; | |
v21 = &v12; | |
v10 = *((_DWORD *)v7 + 13); | |
v11 = *((_BYTE *)v7 + 56); | |
v17 = v8; | |
v18 = v10; | |
v19 = v11; | |
v15 = *((_OWORD *)v7 + 1); | |
v16 = *((_OWORD *)v7 + 2); | |
v13 = &v20; | |
v14 = &off_140021A68; | |
if ( !(*(unsigned __int8 (__fastcall **)(__int64, __int128 **))(a3 + 24))(a2, &v13) ) | |
v4 = ((__int64 (__fastcall *)(__int128 *, char *, __int64))v14[3])(v13, ",\n, { } }(\n(,\n", 2i64); | |
} | |
else if ( !v9 | |
|| !(*(unsigned __int8 (__fastcall **)(_QWORD, char *, __int64))(v7[1] + 24i64))( | |
*v7, | |
", { } }(\n(,\n", | |
2i64) ) | |
{ | |
v4 = (*(__int64 (__fastcall **)(__int64, _QWORD *))(a3 + 24))(a2, v7); | |
} | |
} | |
LABEL_2: | |
a1[8] = v4; | |
a1[9] = 1; | |
} | |
// 140021A68: using guessed type __int64 (__fastcall *off_140021A68)(); | |
//----- (0000000140017010) ---------------------------------------------------- | |
_BYTE *__fastcall sub_140017010(_BYTE *a1, __int64 a2, __int64 a3) | |
{ | |
sub_140016EE0(a1, a2, a3); | |
return a1; | |
} | |
//----- (0000000140017030) ---------------------------------------------------- | |
char __fastcall sub_140017030(__int64 a1) | |
{ | |
if ( *(_BYTE *)(a1 + 8) ) | |
return 1; | |
else | |
return (*(__int64 (__fastcall **)(_QWORD, const char *, __int64))(*(_QWORD *)(*(_QWORD *)a1 + 8i64) + 24i64))( | |
**(_QWORD **)a1, | |
"]library\\core\\src\\fmt\\num.rs", | |
1i64); | |
} | |
//----- (0000000140017060) ---------------------------------------------------- | |
char __fastcall sub_140017060(__int64 *a1, unsigned int a2) | |
{ | |
unsigned __int64 v2; // r8 | |
int v4; // [rsp+24h] [rbp-4h] BYREF | |
v4 = 0; | |
if ( a2 >= 0x80 ) | |
{ | |
if ( a2 >= 0x800 ) | |
{ | |
if ( a2 >= 0x10000 ) | |
{ | |
LOBYTE(v4) = (a2 >> 18) & 7 | 0xF0; | |
BYTE1(v4) = (a2 >> 12) & 0x3F | 0x80; | |
BYTE2(v4) = (a2 >> 6) & 0x3F | 0x80; | |
HIBYTE(v4) = a2 & 0x3F | 0x80; | |
v2 = 4i64; | |
} | |
else | |
{ | |
LOBYTE(v4) = (a2 >> 12) | 0xE0; | |
BYTE1(v4) = (a2 >> 6) & 0x3F | 0x80; | |
BYTE2(v4) = a2 & 0x3F | 0x80; | |
v2 = 3i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(v4) = (a2 >> 6) | 0xC0; | |
BYTE1(v4) = a2 & 0x3F | 0x80; | |
v2 = 2i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(v4) = a2; | |
v2 = 1i64; | |
} | |
return sub_1400169D0(a1, (__int64)&v4, v2); | |
} | |
//----- (0000000140017120) ---------------------------------------------------- | |
bool __fastcall sub_140017120(__int64 a1, __int128 *a2) | |
{ | |
__int128 v2; // xmm0 | |
__int128 v3; // xmm1 | |
__int64 v5; // [rsp+28h] [rbp-40h] BYREF | |
__int128 v6[3]; // [rsp+30h] [rbp-38h] BYREF | |
v5 = a1; | |
v2 = *a2; | |
v3 = a2[1]; | |
v6[2] = a2[2]; | |
v6[1] = v3; | |
v6[0] = v2; | |
return sub_1400172A0((__int64)&v5, (__int64)&off_140021BD8, (__int64 *)v6); | |
} | |
// 140021BD8: using guessed type __int64 (__fastcall *off_140021BD8)(); | |
//----- (0000000140017160) ---------------------------------------------------- | |
char __fastcall sub_140017160(__int64 **a1, __int64 a2, unsigned __int64 a3) | |
{ | |
return sub_1400169D0(*a1, a2, a3); | |
} | |
//----- (0000000140017170) ---------------------------------------------------- | |
char __fastcall sub_140017170(__int64 **a1, unsigned int a2) | |
{ | |
__int64 *v2; // rcx | |
unsigned __int64 v3; // r8 | |
int v5; // [rsp+24h] [rbp-4h] BYREF | |
v2 = *a1; | |
v5 = 0; | |
if ( a2 >= 0x80 ) | |
{ | |
if ( a2 >= 0x800 ) | |
{ | |
if ( a2 >= 0x10000 ) | |
{ | |
LOBYTE(v5) = (a2 >> 18) & 7 | 0xF0; | |
BYTE1(v5) = (a2 >> 12) & 0x3F | 0x80; | |
BYTE2(v5) = (a2 >> 6) & 0x3F | 0x80; | |
HIBYTE(v5) = a2 & 0x3F | 0x80; | |
v3 = 4i64; | |
} | |
else | |
{ | |
LOBYTE(v5) = (a2 >> 12) | 0xE0; | |
BYTE1(v5) = (a2 >> 6) & 0x3F | 0x80; | |
BYTE2(v5) = a2 & 0x3F | 0x80; | |
v3 = 3i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(v5) = (a2 >> 6) | 0xC0; | |
BYTE1(v5) = a2 & 0x3F | 0x80; | |
v3 = 2i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(v5) = a2; | |
v3 = 1i64; | |
} | |
return sub_1400169D0(v2, (__int64)&v5, v3); | |
} | |
//----- (0000000140017230) ---------------------------------------------------- | |
bool __fastcall sub_140017230(__int64 *a1, __int128 *a2) | |
{ | |
__int64 v2; // rax | |
__int128 v3; // xmm0 | |
__int128 v4; // xmm1 | |
__int64 v6; // [rsp+28h] [rbp-40h] BYREF | |
__int128 v7[3]; // [rsp+30h] [rbp-38h] BYREF | |
v2 = *a1; | |
v3 = *a2; | |
v4 = a2[1]; | |
v7[2] = a2[2]; | |
v7[1] = v4; | |
v7[0] = v3; | |
v6 = v2; | |
return sub_1400172A0((__int64)&v6, (__int64)&off_140021BD8, (__int64 *)v7); | |
} | |
// 140021BD8: using guessed type __int64 (__fastcall *off_140021BD8)(); | |
//----- (0000000140017280) ---------------------------------------------------- | |
__int64 __fastcall sub_140017280(__int64 a1) | |
{ | |
return a1; | |
} | |
//----- (0000000140017290) ---------------------------------------------------- | |
bool __fastcall sub_140017290(__int64 *a1, __int64 *a2) | |
{ | |
return sub_1400172A0(*a2, a2[1], a1); | |
} | |
//----- (00000001400172A0) ---------------------------------------------------- | |
bool __fastcall sub_1400172A0(__int64 a1, __int64 a2, __int64 *a3) | |
{ | |
__int64 v4; // r14 | |
__int64 v5; // rax | |
_QWORD *v6; // r15 | |
__int64 v7; // r12 | |
__int64 v8; // r13 | |
unsigned __int64 v9; // rbx | |
__int64 v10; // rax | |
__int64 v11; // rdx | |
__int64 v12; // rcx | |
__int64 v13; // rdx | |
__int64 v14; // rdx | |
__int64 v15; // rcx | |
__int64 v16; // rdx | |
__int64 v17; // r14 | |
__int64 v18; // r15 | |
__int64 v19; // r12 | |
__int64 v20; // r14 | |
__int64 v21; // r13 | |
__int64 v23; // [rsp+28h] [rbp-80h] BYREF | |
__int64 v24; // [rsp+30h] [rbp-78h] | |
__int64 v25; // [rsp+38h] [rbp-70h] | |
__int64 v26; // [rsp+40h] [rbp-68h] | |
__int64 v27; // [rsp+48h] [rbp-60h] | |
__int64 v28; // [rsp+50h] [rbp-58h] | |
__int64 v29; // [rsp+58h] [rbp-50h] | |
char v30; // [rsp+60h] [rbp-48h] | |
v29 = 0x2000000000i64; | |
v30 = 3; | |
v25 = 0i64; | |
v27 = 0i64; | |
v23 = a1; | |
v24 = a2; | |
v4 = *a3; | |
if ( *a3 ) | |
{ | |
v5 = a3[1]; | |
if ( v5 ) | |
{ | |
v6 = (_QWORD *)(a3[2] + 8); | |
v7 = 56 * v5; | |
v8 = 0i64; | |
v9 = 0i64; | |
while ( 1 ) | |
{ | |
if ( *v6 && (*(unsigned __int8 (__fastcall **)(__int64, _QWORD))(v24 + 24))(v23, *(v6 - 1)) ) | |
return 1; | |
v10 = a3[4]; | |
v30 = *(_BYTE *)(v4 + v8 + 40); | |
v29 = *(_QWORD *)(v4 + v8 + 32); | |
v11 = *(_QWORD *)(v4 + v8 + 16); | |
v12 = *(_QWORD *)(v4 + v8 + 24); | |
if ( v11 ) | |
{ | |
if ( (_DWORD)v11 != 1 || (v12 *= 16i64, *(void (__noreturn **)())(v10 + v12 + 8) != sub_140016390) ) | |
{ | |
v13 = 0i64; | |
goto LABEL_12; | |
} | |
v12 = **(_QWORD **)(v10 + v12); | |
} | |
v13 = 1i64; | |
LABEL_12: | |
v25 = v13; | |
v26 = v12; | |
v14 = *(_QWORD *)(v4 + v8); | |
v15 = *(_QWORD *)(v4 + v8 + 8); | |
if ( !v14 ) | |
goto LABEL_17; | |
if ( (_DWORD)v14 == 1 ) | |
{ | |
v15 *= 16i64; | |
if ( *(void (__noreturn **)())(v10 + v15 + 8) == sub_140016390 ) | |
{ | |
v15 = **(_QWORD **)(v10 + v15); | |
LABEL_17: | |
v16 = 1i64; | |
goto LABEL_18; | |
} | |
} | |
v16 = 0i64; | |
LABEL_18: | |
v27 = v16; | |
v28 = v15; | |
if ( (*(unsigned __int8 (__fastcall **)(_QWORD, __int64 *))(v10 + 16i64 * *(_QWORD *)(v4 + v8 + 48) + 8))( | |
*(_QWORD *)(v10 + 16i64 * *(_QWORD *)(v4 + v8 + 48)), | |
&v23) ) | |
{ | |
return 1; | |
} | |
v6 += 2; | |
v8 += 56i64; | |
++v9; | |
if ( v7 == v8 ) | |
goto LABEL_29; | |
} | |
} | |
v9 = 0i64; | |
LABEL_29: | |
if ( v9 >= a3[3] ) | |
return 0; | |
return (*(unsigned __int8 (__fastcall **)(__int64, _QWORD, _QWORD))(v24 + 24))( | |
v23, | |
*(_QWORD *)(a3[2] + 16 * v9), | |
*(_QWORD *)(a3[2] + 16 * v9 + 8)) != 0; | |
} | |
v17 = a3[5]; | |
if ( v17 ) | |
{ | |
v18 = a3[4]; | |
v19 = a3[2]; | |
v20 = 16 * v17; | |
v21 = 0i64; | |
v9 = 0i64; | |
while ( (!*(_QWORD *)(v19 + v21 + 8) | |
|| !(*(unsigned __int8 (__fastcall **)(__int64, _QWORD))(v24 + 24))(v23, *(_QWORD *)(v19 + v21))) | |
&& !(*(unsigned __int8 (__fastcall **)(_QWORD, __int64 *))(v18 + v21 + 8))(*(_QWORD *)(v18 + v21), &v23) ) | |
{ | |
v21 += 16i64; | |
++v9; | |
if ( v20 == v21 ) | |
goto LABEL_29; | |
} | |
return 1; | |
} | |
v9 = 0i64; | |
if ( a3[3] ) | |
return (*(unsigned __int8 (__fastcall **)(__int64, _QWORD, _QWORD))(v24 + 24))( | |
v23, | |
*(_QWORD *)(a3[2] + 16 * v9), | |
*(_QWORD *)(a3[2] + 16 * v9 + 8)) != 0; | |
return 0; | |
} | |
//----- (00000001400174B0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400174B0(__int64 a1, char a2, _BYTE *a3, unsigned __int64 a4, __int64 a5, __int64 a6) | |
{ | |
__int64 v7; // rbx | |
int v9; // edi | |
unsigned int v10; // ebp | |
unsigned __int64 v11; // r12 | |
__int64 v12; // rsi | |
unsigned __int64 v13; // rax | |
_BYTE *v14; // rcx | |
unsigned __int64 v15; // rsi | |
bool v16; // cc | |
unsigned __int64 v17; // rsi | |
char v18; // al | |
__int64 v19; // rdi | |
__int64 v20; // r14 | |
__int64 v22; // r13 | |
__int64 v23; // rdi | |
unsigned __int64 v24; // rsi | |
unsigned __int64 v25; // rdx | |
__m128i v26; // xmm0 | |
__int64 v27; // rax | |
__m128i si128; // xmm1 | |
__m128i v29; // xmm2 | |
__m128i v30; // xmm3 | |
__int64 v31; // rdi | |
__int64 v32; // r14 | |
__int64 v33; // r13 | |
__int64 v34; // rdi | |
unsigned int v35; // r14d | |
unsigned __int64 v36; // rsi | |
unsigned __int64 v37; // rsi | |
unsigned __int64 v38; // r15 | |
__int64 v39; // rbx | |
unsigned __int64 v40; // rsi | |
char v41; // [rsp+2Fh] [rbp-59h] | |
__int64 v42; // [rsp+30h] [rbp-58h] | |
int v43; // [rsp+3Ch] [rbp-4Ch] | |
v7 = (__int64)a3; | |
if ( !a2 ) | |
{ | |
v11 = a6 + 1; | |
v9 = *(_DWORD *)(a1 + 48); | |
v10 = 45; | |
v12 = a5; | |
if ( (v9 & 4) != 0 ) | |
goto LABEL_5; | |
LABEL_10: | |
v7 = 0i64; | |
if ( !*(_QWORD *)(a1 + 16) ) | |
goto LABEL_31; | |
LABEL_11: | |
v42 = v12; | |
v15 = *(_QWORD *)(a1 + 24); | |
v16 = v15 <= v11; | |
v17 = v15 - v11; | |
if ( v16 ) | |
{ | |
v19 = *(_QWORD *)a1; | |
v20 = *(_QWORD *)(a1 + 8); | |
LOBYTE(v11) = 1; | |
if ( !sub_140017830(v19, v20, v10, v7, a4) ) | |
return (*(__int64 (__fastcall **)(__int64, __int64, __int64))(v20 + 24))(v19, v42, a6); | |
} | |
else if ( (v9 & 8) != 0 ) | |
{ | |
v43 = *(_DWORD *)(a1 + 52); | |
*(_DWORD *)(a1 + 52) = 48; | |
v41 = *(_BYTE *)(a1 + 56); | |
*(_BYTE *)(a1 + 56) = 1; | |
v22 = *(_QWORD *)a1; | |
v23 = *(_QWORD *)(a1 + 8); | |
LOBYTE(v11) = 1; | |
if ( !sub_140017830(*(_QWORD *)a1, v23, v10, v7, a4) ) | |
{ | |
v24 = v17 + 1; | |
while ( --v24 ) | |
{ | |
if ( (*(unsigned __int8 (__fastcall **)(__int64, __int64))(v23 + 32))(v22, 48i64) ) | |
return (unsigned int)v11; | |
} | |
if ( !(*(unsigned __int8 (__fastcall **)(__int64, __int64, __int64))(v23 + 24))(v22, v42, a6) ) | |
{ | |
*(_DWORD *)(a1 + 52) = v43; | |
*(_BYTE *)(a1 + 56) = v41; | |
LODWORD(v11) = 0; | |
} | |
} | |
} | |
else | |
{ | |
v18 = 1; | |
if ( (unsigned __int8)*(_DWORD *)(a1 + 56) != 3 ) | |
v18 = *(_DWORD *)(a1 + 56); | |
if ( v18 ) | |
{ | |
if ( v18 == 1 ) | |
{ | |
v11 = 0i64; | |
} | |
else | |
{ | |
v11 = (v17 + 1) >> 1; | |
v17 >>= 1; | |
} | |
} | |
else | |
{ | |
v11 = v17; | |
v17 = 0i64; | |
} | |
v33 = *(_QWORD *)a1; | |
v34 = *(_QWORD *)(a1 + 8); | |
v35 = *(_DWORD *)(a1 + 52); | |
v36 = v17 + 1; | |
while ( --v36 ) | |
{ | |
if ( (*(unsigned __int8 (__fastcall **)(__int64, _QWORD))(v34 + 32))(v33, v35) ) | |
{ | |
LOBYTE(v11) = 1; | |
return (unsigned int)v11; | |
} | |
} | |
v37 = v11; | |
LOBYTE(v11) = 1; | |
if ( v35 != 1114112 | |
&& !sub_140017830(v33, v34, v10, v7, a4) | |
&& !(*(unsigned __int8 (__fastcall **)(__int64, __int64, __int64))(v34 + 24))(v33, v42, a6) ) | |
{ | |
v38 = v37; | |
v39 = -(__int64)v37; | |
v40 = -1i64; | |
while ( v39 + v40 != -1i64 ) | |
{ | |
++v40; | |
if ( (*(unsigned __int8 (__fastcall **)(__int64, _QWORD))(v34 + 32))(v33, v35) ) | |
goto LABEL_49; | |
} | |
v40 = v38; | |
LABEL_49: | |
LOBYTE(v11) = v40 < v38; | |
} | |
} | |
return (unsigned int)v11; | |
} | |
v9 = *(_DWORD *)(a1 + 48); | |
v10 = 43; | |
if ( (v9 & 1) == 0 ) | |
v10 = 1114112; | |
v11 = a6 + (*(_DWORD *)(a1 + 48) & 1); | |
v12 = a5; | |
if ( (v9 & 4) == 0 ) | |
goto LABEL_10; | |
LABEL_5: | |
if ( a4 >= 0x20 ) | |
{ | |
v13 = sub_140018FF0(a3, a4); | |
goto LABEL_30; | |
} | |
v13 = a4; | |
if ( !a4 ) | |
goto LABEL_30; | |
if ( a4 == 1 ) | |
{ | |
v13 = 0i64; | |
v14 = a3; | |
do | |
LABEL_29: | |
v13 += *v14++ >= 0xC0; | |
while ( v14 != &a3[a4] ); | |
goto LABEL_30; | |
} | |
v25 = a4 & 0xFFFFFFFFFFFFFFFEui64; | |
v14 = &a3[a4 & 0xFFFFFFFFFFFFFFFEui64]; | |
v26 = 0i64; | |
v27 = 0i64; | |
si128 = _mm_load_si128((const __m128i *)&xmmword_1400216E0); | |
v29 = _mm_load_si128((const __m128i *)&xmmword_1400216F0); | |
do | |
{ | |
v30 = _mm_cmpgt_epi8(_mm_cvtsi32_si128(*(unsigned __int16 *)&a3[v27]), si128); | |
v26 = _mm_add_epi64( | |
v26, | |
_mm_and_si128(_mm_shuffle_epi32(_mm_shufflelo_epi16(_mm_unpacklo_epi8(v30, v30), 212), 212), v29)); | |
v27 += 2i64; | |
} | |
while ( v25 != v27 ); | |
v13 = _mm_add_epi64(_mm_shuffle_epi32(v26, 238), v26).m128i_u64[0]; | |
if ( v25 != a4 ) | |
goto LABEL_29; | |
LABEL_30: | |
v11 += v13; | |
if ( *(_QWORD *)(a1 + 16) ) | |
goto LABEL_11; | |
LABEL_31: | |
v31 = *(_QWORD *)a1; | |
v32 = *(_QWORD *)(a1 + 8); | |
LOBYTE(v11) = 1; | |
if ( !sub_140017830(v31, v32, v10, v7, a4) ) | |
return (*(__int64 (__fastcall **)(__int64, __int64, __int64))(v32 + 24))(v31, v12, a6); | |
return (unsigned int)v11; | |
} | |
// 1400216E0: using guessed type __int128 xmmword_1400216E0; | |
// 1400216F0: using guessed type __int128 xmmword_1400216F0; | |
//----- (0000000140017830) ---------------------------------------------------- | |
char __fastcall sub_140017830(__int64 a1, __int64 a2, unsigned int a3, __int64 a4, __int64 a5) | |
{ | |
char v8; // cl | |
char result; // al | |
if ( a3 == 1114112 || (v8 = (*(__int64 (__fastcall **)(__int64, _QWORD))(a2 + 32))(a1, a3), result = 1, !v8) ) | |
{ | |
if ( a4 ) | |
return (*(__int64 (__fastcall **)(__int64, __int64, __int64))(a2 + 24))(a1, a4, a5); | |
else | |
return 0; | |
} | |
return result; | |
} | |
//----- (0000000140017890) ---------------------------------------------------- | |
__int64 __fastcall sub_140017890(__int64 *a1, unsigned __int8 *a2, unsigned __int64 a3) | |
{ | |
unsigned int v3; // ebp | |
unsigned __int64 v4; // rsi | |
unsigned __int8 *v5; // rdi | |
__int64 v7; // rax | |
__int64 v8; // rcx | |
unsigned __int8 *v9; // r8 | |
__int64 v10; // r9 | |
unsigned __int64 v11; // rcx | |
unsigned __int8 *v12; // r14 | |
int v13; // r10d | |
int v14; // r11d | |
int v15; // r15d | |
int v16; // ebp | |
unsigned __int8 *v17; // rdx | |
unsigned __int64 v18; // r15 | |
unsigned __int64 v19; // rax | |
unsigned __int8 *v20; // rcx | |
unsigned __int64 v21; // rdx | |
__m128i v22; // xmm0 | |
__int64 v23; // rax | |
__m128i si128; // xmm1 | |
__m128i v25; // xmm2 | |
__m128i v26; // xmm3 | |
bool v27; // cc | |
unsigned __int64 v28; // r15 | |
char v29; // al | |
unsigned __int64 v30; // r12 | |
__int64 v32; // r14 | |
__int64 v33; // r13 | |
unsigned int v34; // ebx | |
unsigned __int64 v35; // r15 | |
unsigned __int64 v36; // rsi | |
v4 = a3; | |
v5 = a2; | |
v7 = a1[2]; | |
v8 = a1[4]; | |
if ( !(v8 | v7) ) | |
return (*(__int64 (__fastcall **)(_QWORD, unsigned __int8 *, unsigned __int64))(a1[1] + 24))(*a1, v5, v4); | |
if ( v8 ) | |
{ | |
v9 = &a2[a3]; | |
v10 = a1[5] + 1; | |
v11 = 0i64; | |
while ( --v10 ) | |
{ | |
if ( a2 == v9 ) | |
goto LABEL_26; | |
v13 = *a2; | |
if ( (*a2 & 0x80u) == 0 ) | |
{ | |
v12 = a2 + 1; | |
} | |
else | |
{ | |
v14 = v13 & 0x1F; | |
v15 = a2[1] & 0x3F; | |
if ( (unsigned __int8)v13 <= 0xDFu ) | |
{ | |
v12 = a2 + 2; | |
v13 = v15 | (v14 << 6); | |
} | |
else | |
{ | |
v16 = (v15 << 6) | a2[2] & 0x3F; | |
if ( *a2 < 0xF0u ) | |
{ | |
v12 = a2 + 3; | |
v3 = (v14 << 12) | v16; | |
v13 = v3; | |
} | |
else | |
{ | |
v3 = v16 << 6; | |
v13 = ((v13 & 7) << 18) | v3 | a2[3] & 0x3F; | |
if ( v13 == 1114112 ) | |
goto LABEL_26; | |
v12 = a2 + 4; | |
} | |
} | |
} | |
v11 = (unsigned __int64)&v12[v11 - (_QWORD)a2]; | |
a2 = v12; | |
if ( v13 == 1114112 ) | |
goto LABEL_26; | |
} | |
if ( a2 != v9 | |
&& (*a2 < 0xF0u || (((*a2 & 7) << 18) | ((a2[1] & 0x3F) << 12) | ((a2[2] & 0x3F) << 6) | a2[3] & 0x3F) != 1114112) ) | |
{ | |
if ( v11 ) | |
{ | |
if ( v11 >= v4 ) | |
{ | |
if ( v11 != v4 ) | |
goto LABEL_21; | |
} | |
else if ( (char)v5[v11] < -64 ) | |
{ | |
LABEL_21: | |
v17 = 0i64; | |
goto LABEL_24; | |
} | |
} | |
v17 = v5; | |
LABEL_24: | |
if ( v17 ) | |
{ | |
v4 = v11; | |
v5 = v17; | |
} | |
} | |
} | |
LABEL_26: | |
if ( !v7 ) | |
return (*(__int64 (__fastcall **)(_QWORD, unsigned __int8 *, unsigned __int64))(a1[1] + 24))(*a1, v5, v4); | |
v18 = a1[3]; | |
if ( v4 >= 0x20 ) | |
{ | |
v19 = sub_140018FF0(v5, v4); | |
goto LABEL_36; | |
} | |
v19 = v4; | |
if ( !v4 ) | |
goto LABEL_36; | |
if ( v4 == 1 ) | |
{ | |
v19 = 0i64; | |
v20 = v5; | |
do | |
LABEL_35: | |
v19 += (char)*v20++ >= -64; | |
while ( v20 != &v5[v4] ); | |
goto LABEL_36; | |
} | |
v21 = v4 & 0xFFFFFFFFFFFFFFFEui64; | |
v20 = &v5[v4 & 0xFFFFFFFFFFFFFFFEui64]; | |
v22 = 0i64; | |
v23 = 0i64; | |
si128 = _mm_load_si128((const __m128i *)&xmmword_1400216E0); | |
v25 = _mm_load_si128((const __m128i *)&xmmword_1400216F0); | |
do | |
{ | |
v26 = _mm_cmpgt_epi8(_mm_cvtsi32_si128(*(unsigned __int16 *)&v5[v23]), si128); | |
v22 = _mm_add_epi64( | |
v22, | |
_mm_and_si128(_mm_shuffle_epi32(_mm_shufflelo_epi16(_mm_unpacklo_epi8(v26, v26), 212), 212), v25)); | |
v23 += 2i64; | |
} | |
while ( v21 != v23 ); | |
v19 = _mm_add_epi64(_mm_shuffle_epi32(v22, 238), v22).m128i_u64[0]; | |
if ( v4 != v21 ) | |
goto LABEL_35; | |
LABEL_36: | |
v27 = v18 <= v19; | |
v28 = v18 - v19; | |
if ( v27 ) | |
return (*(__int64 (__fastcall **)(_QWORD, unsigned __int8 *, unsigned __int64))(a1[1] + 24))(*a1, v5, v4); | |
v29 = 0; | |
if ( (unsigned __int8)*((_DWORD *)a1 + 14) != 3 ) | |
v29 = *((_DWORD *)a1 + 14); | |
if ( v29 ) | |
{ | |
if ( v29 == 1 ) | |
{ | |
v30 = 0i64; | |
} | |
else | |
{ | |
v30 = (v28 + 1) >> 1; | |
v28 >>= 1; | |
} | |
} | |
else | |
{ | |
v30 = v28; | |
v28 = 0i64; | |
} | |
v32 = *a1; | |
v33 = a1[1]; | |
v34 = *((_DWORD *)a1 + 13); | |
v35 = v28 + 1; | |
while ( --v35 ) | |
{ | |
if ( (*(unsigned __int8 (__fastcall **)(__int64, _QWORD))(v33 + 32))(v32, v34) ) | |
{ | |
LOBYTE(v3) = 1; | |
return v3; | |
} | |
} | |
LOBYTE(v3) = 1; | |
if ( v34 != 1114112 | |
&& !(*(unsigned __int8 (__fastcall **)(__int64, unsigned __int8 *, unsigned __int64))(v33 + 24))(v32, v5, v4) ) | |
{ | |
v36 = -1i64; | |
while ( v36 - v30 != -1i64 ) | |
{ | |
++v36; | |
if ( (*(unsigned __int8 (__fastcall **)(__int64, _QWORD))(v33 + 32))(v32, v34) ) | |
goto LABEL_56; | |
} | |
v36 = v30; | |
LABEL_56: | |
LOBYTE(v3) = v36 < v30; | |
} | |
return v3; | |
} | |
// 140017BC6: variable 'v3' is possibly undefined | |
// 1400216E0: using guessed type __int128 xmmword_1400216E0; | |
// 1400216F0: using guessed type __int128 xmmword_1400216F0; | |
//----- (0000000140017BE0) ---------------------------------------------------- | |
__int64 __fastcall sub_140017BE0(_QWORD *a1) | |
{ | |
return (*(__int64 (__fastcall **)(_QWORD))(a1[1] + 24i64))(*a1); | |
} | |
//----- (0000000140017C00) ---------------------------------------------------- | |
bool __fastcall sub_140017C00(__int64 *a1, __int128 *a2) | |
{ | |
__int64 v2; // rax | |
__int64 v3; // r9 | |
__int128 v4; // xmm0 | |
__int128 v5; // xmm1 | |
__int128 v7[3]; // [rsp+20h] [rbp-38h] BYREF | |
v2 = *a1; | |
v3 = a1[1]; | |
v4 = *a2; | |
v5 = a2[1]; | |
v7[2] = a2[2]; | |
v7[1] = v5; | |
v7[0] = v4; | |
return sub_1400172A0(v2, v3, (__int64 *)v7); | |
} | |
//----- (0000000140017C40) ---------------------------------------------------- | |
char __fastcall sub_140017C40(__int64 a1) | |
{ | |
return (unsigned __int8)(*(_BYTE *)(a1 + 48) & 4) >> 2; | |
} | |
//----- (0000000140017C50) ---------------------------------------------------- | |
char __fastcall sub_140017C50(__int64 a1) | |
{ | |
return (unsigned __int8)(*(_BYTE *)(a1 + 48) & 0x10) >> 4; | |
} | |
//----- (0000000140017C60) ---------------------------------------------------- | |
char __fastcall sub_140017C60(__int64 a1) | |
{ | |
return (unsigned __int8)(*(_BYTE *)(a1 + 48) & 0x20) >> 5; | |
} | |
//----- (0000000140017C70) ---------------------------------------------------- | |
__int64 __fastcall sub_140017C70(__int64 a1, _QWORD *a2, __int64 a3, __int64 a4) | |
{ | |
char v6; // al | |
v6 = (*(__int64 (__fastcall **)(_QWORD, __int64, __int64))(a2[1] + 24i64))(*a2, a3, a4); | |
*(_QWORD *)a1 = a2; | |
*(_BYTE *)(a1 + 8) = v6; | |
*(_BYTE *)(a1 + 9) = 0; | |
return a1; | |
} | |
//----- (0000000140017CA0) ---------------------------------------------------- | |
__int64 __fastcall sub_140017CA0(_QWORD *a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5) | |
{ | |
unsigned __int8 v8; // al | |
unsigned int v9; // ebx | |
_QWORD *v10; // rsi | |
__int64 v12; // [rsp+20h] [rbp-38h] BYREF | |
_QWORD *v13; // [rsp+28h] [rbp-30h] | |
unsigned __int8 v14; // [rsp+30h] [rbp-28h] | |
bool v15; // [rsp+31h] [rbp-27h] | |
v8 = (*(__int64 (__fastcall **)(_QWORD))(a1[1] + 24i64))(*a1); | |
v13 = a1; | |
v14 = v8; | |
v12 = 0i64; | |
v15 = a3 == 0; | |
sub_140016D90(&v12, a4, a5); | |
v9 = v14; | |
if ( v12 ) | |
{ | |
LOBYTE(v9) = 1; | |
if ( !v14 ) | |
{ | |
v10 = v13; | |
if ( v12 != 1 | |
|| !v15 | |
|| (v13[6] & 4) != 0 | |
|| !(*(unsigned __int8 (__fastcall **)(_QWORD, char *, __int64))(v13[1] + 24i64))(*v13, ",\n", 1i64) ) | |
{ | |
return (*(unsigned int (__fastcall **)(_QWORD, void *, __int64))(v10[1] + 24i64))(*v10, &unk_1400217F8, 1i64); | |
} | |
} | |
} | |
return v9; | |
} | |
//----- (0000000140017D60) ---------------------------------------------------- | |
__int64 __fastcall sub_140017D60(_QWORD *a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5, __int64 a6, __int64 a7) | |
{ | |
unsigned __int8 v10; // al | |
unsigned int v11; // ebx | |
_QWORD *v12; // rsi | |
__int64 v14; // [rsp+20h] [rbp-48h] BYREF | |
_QWORD *v15; // [rsp+28h] [rbp-40h] | |
unsigned __int8 v16; // [rsp+30h] [rbp-38h] | |
bool v17; // [rsp+31h] [rbp-37h] | |
v10 = (*(__int64 (__fastcall **)(_QWORD))(a1[1] + 24i64))(*a1); | |
v15 = a1; | |
v16 = v10; | |
v14 = 0i64; | |
v17 = a3 == 0; | |
sub_140016D90(&v14, a4, a5); | |
sub_140016D90(&v14, a6, a7); | |
v11 = v16; | |
if ( v14 ) | |
{ | |
LOBYTE(v11) = 1; | |
if ( !v16 ) | |
{ | |
v12 = v15; | |
if ( v14 != 1 | |
|| !v17 | |
|| (v15[6] & 4) != 0 | |
|| !(*(unsigned __int8 (__fastcall **)(_QWORD, char *, __int64))(v15[1] + 24i64))(*v15, ",\n", 1i64) ) | |
{ | |
return (*(unsigned int (__fastcall **)(_QWORD, void *, __int64))(v12[1] + 24i64))(*v12, &unk_1400217F8, 1i64); | |
} | |
} | |
} | |
return v11; | |
} | |
//----- (0000000140017E50) ---------------------------------------------------- | |
__int64 __fastcall sub_140017E50(__int64 a1, _QWORD *a2) | |
{ | |
char v4; // al | |
v4 = (*(__int64 (__fastcall **)(_QWORD, void *, __int64))(a2[1] + 24i64))(*a2, &unk_140021831, 1i64); | |
*(_QWORD *)a1 = a2; | |
*(_BYTE *)(a1 + 8) = v4; | |
*(_BYTE *)(a1 + 9) = 0; | |
return a1; | |
} | |
//----- (0000000140017E90) ---------------------------------------------------- | |
__int64 __fastcall sub_140017E90(_QWORD *a1) | |
{ | |
return (*(__int64 (__fastcall **)(_QWORD))(a1[1] + 32i64))(*a1); | |
} | |
//----- (0000000140017EB0) ---------------------------------------------------- | |
char __fastcall sub_140017EB0(char *a1, unsigned __int64 a2, __int64 *a3) | |
{ | |
__int64 v3; // rbx | |
char *v4; // r9 | |
unsigned __int64 v6; // rdi | |
unsigned __int64 v7; // r15 | |
unsigned __int64 v8; // r14 | |
char *v9; // r10 | |
unsigned int v10; // ebp | |
unsigned int v11; // esi | |
unsigned int v12; // r13d | |
int v13; // eax | |
int v14; // edx | |
int v15; // ecx | |
unsigned int v16; // r13d | |
char v17; // al | |
unsigned int v18; // r13d | |
int v19; // eax | |
__int64 v20; // r15 | |
unsigned __int8 v21; // r13 | |
int v22; // edi | |
__int64 v23; // rdx | |
__int64 v24; // rax | |
__int64 v25; // rax | |
__int64 v26; // r8 | |
char v27; // r15 | |
__int64 v28; // r15 | |
char *v30; // [rsp+38h] [rbp-70h] | |
char *v31; // [rsp+38h] [rbp-70h] | |
char *v32; // [rsp+40h] [rbp-68h] | |
char *v33; // [rsp+40h] [rbp-68h] | |
__int64 v34; // [rsp+48h] [rbp-60h] | |
unsigned __int8 (__fastcall *v36)(__int64, __int64); // [rsp+58h] [rbp-50h] | |
v3 = *a3; | |
v34 = a3[1]; | |
v36 = *(unsigned __int8 (__fastcall **)(__int64, __int64))(v34 + 32); | |
if ( v36(*a3, 34i64) ) | |
return 1; | |
v6 = a2; | |
if ( !a2 ) | |
goto LABEL_64; | |
v7 = 0i64; | |
v4 = a1; | |
v8 = 0i64; | |
while ( 1 ) | |
{ | |
v10 = (unsigned __int8)*v4; | |
if ( (v10 & 0x80u) == 0 ) | |
{ | |
v9 = v4 + 1; | |
v11 = 1114114; | |
LABEL_9: | |
v12 = 48; | |
switch ( v10 ) | |
{ | |
case 0u: | |
goto LABEL_27; | |
case 1u: | |
case 2u: | |
case 3u: | |
case 4u: | |
case 5u: | |
case 6u: | |
case 7u: | |
case 8u: | |
case 0xBu: | |
case 0xCu: | |
case 0xEu: | |
case 0xFu: | |
case 0x10u: | |
case 0x11u: | |
case 0x12u: | |
case 0x13u: | |
case 0x14u: | |
case 0x15u: | |
case 0x16u: | |
case 0x17u: | |
case 0x18u: | |
case 0x19u: | |
case 0x1Au: | |
case 0x1Bu: | |
case 0x1Cu: | |
case 0x1Du: | |
case 0x1Eu: | |
case 0x1Fu: | |
case 0x20u: | |
case 0x21u: | |
goto LABEL_19; | |
case 9u: | |
v12 = 116; | |
break; | |
case 0xAu: | |
v12 = 110; | |
break; | |
case 0xDu: | |
v12 = 114; | |
break; | |
case 0x22u: | |
goto LABEL_18; | |
default: | |
goto LABEL_17; | |
} | |
goto LABEL_27; | |
} | |
v13 = v10 & 0x1F; | |
v14 = v4[1] & 0x3F; | |
if ( (unsigned __int8)v10 <= 0xDFu ) | |
{ | |
v9 = v4 + 2; | |
v10 = v14 | (v13 << 6); | |
v11 = 1114114; | |
if ( v10 <= 0x22 ) | |
goto LABEL_9; | |
} | |
else | |
{ | |
v9 = v4 + 3; | |
v15 = (v14 << 6) | v4[2] & 0x3F; | |
if ( (unsigned __int8)v10 >= 0xF0u ) | |
{ | |
v10 = ((v10 & 7) << 18) | (v15 << 6) | *v9 & 0x3F; | |
if ( v10 != 1114112 ) | |
{ | |
v9 = v4 + 4; | |
v11 = 1114114; | |
if ( v10 <= 0x22 ) | |
goto LABEL_9; | |
goto LABEL_17; | |
} | |
LABEL_60: | |
if ( v7 ) | |
{ | |
if ( v7 >= v6 ) | |
{ | |
if ( v7 != v6 ) | |
goto LABEL_68; | |
} | |
else if ( a1[v7] <= -65 ) | |
{ | |
LABEL_68: | |
sub_14001D0B0(a1, v6, v7, v6, (__int64)&off_140021C40); | |
} | |
LABEL_65: | |
if ( (*(unsigned __int8 (__fastcall **)(__int64, char *, unsigned __int64, char *))(v34 + 24))( | |
v3, | |
&a1[v7], | |
v6 - v7, | |
v4) ) | |
{ | |
return 1; | |
} | |
return v36(v3, 34i64); | |
} | |
LABEL_64: | |
v7 = 0i64; | |
goto LABEL_65; | |
} | |
v10 = (v13 << 12) | v15; | |
v11 = 1114114; | |
if ( v10 <= 0x22 ) | |
goto LABEL_9; | |
} | |
LABEL_17: | |
if ( v10 == 92 ) | |
{ | |
LABEL_18: | |
v12 = v10; | |
} | |
else | |
{ | |
LABEL_19: | |
v30 = v9; | |
v32 = v4; | |
if ( sub_14001B110(v10) ) | |
{ | |
_BitScanReverse(&v16, v10 | 1); | |
v12 = ((v16 ^ 0x1C) >> 2) ^ 7; | |
v11 = v10; | |
v4 = v32; | |
v9 = v30; | |
} | |
else | |
{ | |
v17 = sub_14001A050(v10); | |
v11 = 1114113; | |
v12 = v10; | |
v4 = v32; | |
v9 = v30; | |
if ( !v17 ) | |
{ | |
_BitScanReverse(&v18, v10 | 1); | |
v12 = ((v18 ^ 0x1C) >> 2) ^ 7; | |
v11 = v10; | |
} | |
} | |
} | |
LABEL_27: | |
v19 = v11 - 1114112; | |
if ( v11 - 1114112 >= 3 ) | |
v19 = 3; | |
if ( v19 != 1 ) | |
break; | |
LABEL_6: | |
v8 = (unsigned __int64)&v9[v8 - (_QWORD)v4]; | |
v4 = v9; | |
if ( v9 == &a1[a2] ) | |
goto LABEL_60; | |
} | |
if ( v8 < v7 ) | |
goto LABEL_69; | |
if ( v7 ) | |
{ | |
if ( v7 >= v6 ) | |
{ | |
if ( v7 != v6 ) | |
goto LABEL_69; | |
} | |
else if ( a1[v7] < -64 ) | |
{ | |
goto LABEL_69; | |
} | |
} | |
if ( v8 ) | |
{ | |
if ( v8 >= v6 ) | |
{ | |
if ( v8 != v6 ) | |
goto LABEL_69; | |
} | |
else if ( a1[v8] <= -65 ) | |
{ | |
LABEL_69: | |
sub_14001D0B0(a1, v6, v7, v8, (__int64)&off_140021C28); | |
} | |
} | |
v31 = v9; | |
v33 = v4; | |
if ( !(*(unsigned __int8 (__fastcall **)(__int64, char *, unsigned __int64))(v34 + 24))(v3, &a1[v7], v8 - v7) ) | |
{ | |
v20 = v12; | |
v21 = 5; | |
while ( 2 ) | |
{ | |
v24 = v11 - 1114112; | |
if ( (unsigned int)v24 >= 3 ) | |
v24 = 3i64; | |
v22 = 1114113; | |
v23 = 92i64; | |
switch ( v24 ) | |
{ | |
case 0i64: | |
goto LABEL_57; | |
case 1i64: | |
v22 = 1114112; | |
v23 = (unsigned int)v20; | |
if ( (_DWORD)v20 != 1114112 ) | |
goto LABEL_44; | |
LABEL_57: | |
v28 = 1i64; | |
if ( v10 >= 0x80 ) | |
{ | |
v28 = 2i64; | |
if ( v10 > 0x7FF ) | |
v28 = 4i64 - (v10 < 0x10000); | |
} | |
v7 = v8 + v28; | |
v6 = a2; | |
v4 = v33; | |
v9 = v31; | |
goto LABEL_6; | |
case 2i64: | |
LABEL_44: | |
v11 = v22; | |
if ( !v36(v3, v23) ) | |
continue; | |
return 1; | |
case 3i64: | |
v23 = 125i64; | |
v25 = v21; | |
v21 = 0; | |
v22 = v11; | |
switch ( v25 ) | |
{ | |
case 0i64: | |
goto LABEL_57; | |
case 1i64: | |
goto LABEL_44; | |
case 2i64: | |
v21 = 2 - (v20 == 0); | |
v26 = 0i64; | |
if ( v20 ) | |
v26 = v20 - 1; | |
v27 = 4 * v20; | |
v23 = (v11 >> v27) & 0xF | 0x30; | |
if ( ((v11 >> v27) & 0xF) >= 0xA ) | |
v23 = ((v11 >> v27) & 0xF) + 87; | |
v22 = v11; | |
v20 = v26; | |
goto LABEL_44; | |
case 3i64: | |
v21 = 2; | |
v23 = 123i64; | |
v22 = v11; | |
goto LABEL_44; | |
case 4i64: | |
v21 = 3; | |
v23 = 117i64; | |
v22 = v11; | |
goto LABEL_44; | |
case 5i64: | |
JUMPOUT(0x14001824Fi64); | |
} | |
} | |
} | |
} | |
return 1; | |
} | |
// 14001824A: control flows out of bounds to 14001824F | |
// 1400182CA: variable 'v4' is possibly undefined | |
// 140021C28: using guessed type char *off_140021C28; | |
// 140021C40: using guessed type char *off_140021C40; | |
//----- (00000001400183F0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400183F0(unsigned __int8 *a1, unsigned __int64 a2, __int64 *a3) | |
{ | |
return sub_140017890(a3, a1, a2); | |
} | |
//----- (0000000140018410) ---------------------------------------------------- | |
char __fastcall sub_140018410(unsigned int *a1, __int64 *a2) | |
{ | |
__int64 v3; // rsi | |
unsigned __int8 (__fastcall *v4)(__int64, __int64); // r15 | |
char result; // al | |
unsigned int v6; // ebx | |
unsigned int v7; // r8d | |
unsigned int v8; // eax | |
__int64 v9; // rdi | |
unsigned __int8 v10; // bp | |
int v11; // r14d | |
__int64 v12; // rdx | |
unsigned int v13; // eax | |
__int64 v14; // rcx | |
char v15; // al | |
unsigned int v16; // eax | |
__int64 v17; // rcx | |
__int64 v18; // rcx | |
__int64 v19; // rax | |
__int64 v20; // rax | |
char v21; // di | |
v3 = *a2; | |
v4 = *(unsigned __int8 (__fastcall **)(__int64, __int64))(a2[1] + 32); | |
if ( v4(*a2, 39i64) ) | |
return 1; | |
v6 = *a1; | |
v7 = 1114114; | |
v8 = 48; | |
switch ( *a1 ) | |
{ | |
case 0u: | |
goto LABEL_17; | |
case 1u: | |
case 2u: | |
case 3u: | |
case 4u: | |
case 5u: | |
case 6u: | |
case 7u: | |
case 8u: | |
case 0xBu: | |
case 0xCu: | |
case 0xEu: | |
case 0xFu: | |
case 0x10u: | |
case 0x11u: | |
case 0x12u: | |
case 0x13u: | |
case 0x14u: | |
case 0x15u: | |
case 0x16u: | |
case 0x17u: | |
case 0x18u: | |
case 0x19u: | |
case 0x1Au: | |
case 0x1Bu: | |
case 0x1Cu: | |
case 0x1Du: | |
case 0x1Eu: | |
case 0x1Fu: | |
case 0x20u: | |
case 0x21u: | |
case 0x22u: | |
case 0x23u: | |
case 0x24u: | |
case 0x25u: | |
case 0x26u: | |
goto LABEL_7; | |
case 9u: | |
v9 = 116i64; | |
v10 = 5; | |
v11 = 1114113; | |
v12 = 92i64; | |
goto LABEL_20; | |
case 0xAu: | |
v9 = 110i64; | |
v10 = 5; | |
v11 = 1114113; | |
v12 = 92i64; | |
goto LABEL_20; | |
case 0xDu: | |
v9 = 114i64; | |
v10 = 5; | |
v11 = 1114113; | |
v12 = 92i64; | |
goto LABEL_20; | |
case 0x27u: | |
v9 = v6; | |
v10 = 5; | |
v11 = 1114113; | |
v12 = 92i64; | |
goto LABEL_20; | |
default: | |
if ( v6 == 92 ) | |
{ | |
v9 = 92i64; | |
v10 = 5; | |
v11 = 1114113; | |
v12 = 92i64; | |
LABEL_20: | |
while ( 2 ) | |
{ | |
if ( !v4(v3, v12) ) | |
{ | |
v18 = 3i64; | |
if ( (unsigned int)(v11 - 1114112) < 3 ) | |
v18 = (unsigned int)(v11 - 1114112); | |
v12 = 92i64; | |
v7 = v11; | |
v11 = 1114113; | |
switch ( v18 ) | |
{ | |
case 0i64: | |
goto LABEL_25; | |
case 1i64: | |
goto LABEL_24; | |
case 2i64: | |
continue; | |
case 3i64: | |
goto LABEL_26; | |
} | |
} | |
return 1; | |
} | |
} | |
LABEL_7: | |
if ( !sub_14001B110(v6) ) | |
{ | |
v15 = sub_14001A050(v6); | |
v7 = 1114113; | |
if ( v15 ) | |
{ | |
v8 = v6; | |
} | |
else | |
{ | |
_BitScanReverse(&v16, v6 | 1); | |
v8 = ((v16 ^ 0x1C) >> 2) ^ 7; | |
v7 = v6; | |
} | |
LABEL_17: | |
v9 = v8; | |
v10 = 5; | |
v17 = 3i64; | |
if ( v7 - 1114112 < 3 ) | |
v17 = v7 - 1114112; | |
v11 = 1114113; | |
v12 = 92i64; | |
switch ( v17 ) | |
{ | |
case 0i64: | |
goto LABEL_25; | |
case 1i64: | |
goto LABEL_24; | |
case 2i64: | |
goto LABEL_20; | |
case 3i64: | |
goto LABEL_26; | |
} | |
} | |
_BitScanReverse(&v13, v6 | 1); | |
v9 = ((v13 ^ 0x1C) >> 2) ^ 7; | |
v10 = 5; | |
v14 = 3i64; | |
if ( v6 - 1114112 < 3 ) | |
v14 = v6 - 1114112; | |
v11 = 1114113; | |
v12 = 92i64; | |
v7 = v6; | |
switch ( v14 ) | |
{ | |
case 0i64: | |
goto LABEL_25; | |
case 1i64: | |
LABEL_24: | |
v11 = 1114112; | |
v12 = (unsigned int)v9; | |
if ( (_DWORD)v9 != 1114112 ) | |
goto LABEL_20; | |
LABEL_25: | |
result = v4(v3, 39i64); | |
break; | |
case 2i64: | |
goto LABEL_20; | |
case 3i64: | |
LABEL_26: | |
v12 = 125i64; | |
v19 = v10; | |
v10 = 0; | |
v11 = v7; | |
switch ( v19 ) | |
{ | |
case 0i64: | |
goto LABEL_25; | |
case 1i64: | |
goto LABEL_20; | |
case 2i64: | |
v10 = 2 - (v9 == 0); | |
v20 = 0i64; | |
if ( v9 ) | |
v20 = v9 - 1; | |
v21 = 4 * v9; | |
v12 = (v7 >> v21) & 0xF | 0x30; | |
if ( ((v7 >> v21) & 0xF) >= 0xA ) | |
v12 = ((v7 >> v21) & 0xF) + 87; | |
v11 = v7; | |
v9 = v20; | |
goto LABEL_20; | |
case 3i64: | |
v10 = 2; | |
v12 = 123i64; | |
v11 = v7; | |
goto LABEL_20; | |
case 4i64: | |
v10 = 3; | |
v12 = 117i64; | |
v11 = v7; | |
goto LABEL_20; | |
case 5i64: | |
v10 = 4; | |
v12 = 92i64; | |
v11 = v7; | |
goto LABEL_20; | |
} | |
} | |
break; | |
} | |
return result; | |
} | |
//----- (0000000140018820) ---------------------------------------------------- | |
__int64 __fastcall sub_140018820(unsigned int *a1, __int64 *a2) | |
{ | |
unsigned int v2; // eax | |
unsigned __int64 v4; // r8 | |
int v5; // [rsp+24h] [rbp-4h] BYREF | |
v2 = *a1; | |
if ( !(a2[4] | a2[2]) ) | |
return (*(__int64 (__fastcall **)(__int64, _QWORD))(a2[1] + 32))(*a2, v2); | |
v5 = 0; | |
if ( v2 >= 0x80 ) | |
{ | |
if ( v2 >= 0x800 ) | |
{ | |
if ( v2 >= 0x10000 ) | |
{ | |
LOBYTE(v5) = (v2 >> 18) | 0xF0; | |
BYTE1(v5) = (v2 >> 12) & 0x3F | 0x80; | |
BYTE2(v5) = (v2 >> 6) & 0x3F | 0x80; | |
HIBYTE(v5) = v2 & 0x3F | 0x80; | |
v4 = 4i64; | |
} | |
else | |
{ | |
LOBYTE(v5) = (v2 >> 12) | 0xE0; | |
BYTE1(v5) = (v2 >> 6) & 0x3F | 0x80; | |
BYTE2(v5) = v2 & 0x3F | 0x80; | |
v4 = 3i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(v5) = (v2 >> 6) | 0xC0; | |
BYTE1(v5) = v2 & 0x3F | 0x80; | |
v4 = 2i64; | |
} | |
} | |
else | |
{ | |
LOBYTE(v5) = v2; | |
v4 = 1i64; | |
} | |
return sub_140017890(a2, (unsigned __int8 *)&v5, v4); | |
} | |
//----- (0000000140018910) ---------------------------------------------------- | |
__int64 __fastcall sub_140018910(unsigned __int64 a1, const __m128i *a2) | |
{ | |
__m128i v3; // xmm6 | |
int v4; // edi | |
int v5; // eax | |
__int128 *v6; // r8 | |
__int64 v7; // rax | |
unsigned __int64 v8; // r9 | |
char v9; // r11 | |
bool v10; // cc | |
__int64 result; // rax | |
__int128 v12; // [rsp+B0h] [rbp-28h] BYREF | |
v3 = _mm_loadu_si128(a2 + 1); | |
v4 = a2[3].m128i_i32[0]; | |
v5 = v4; | |
if ( (v4 & 4) != 0 ) | |
{ | |
v5 = v4 | 8; | |
if ( !v3.m128i_i64[0] ) | |
{ | |
a2[1].m128i_i64[0] = 1i64; | |
a2[1].m128i_i64[1] = 18i64; | |
} | |
} | |
a2[3].m128i_i32[0] = v5 | 4; | |
v6 = &v12; | |
v7 = 0i64; | |
v8 = a1; | |
do | |
{ | |
v8 >>= 4; | |
v9 = 87; | |
if ( (a1 & 0xF) < 0xA ) | |
v9 = 48; | |
*((_BYTE *)v6 - 1) = (a1 & 0xF) + v9; | |
v6 = (__int128 *)((char *)v6 - 1); | |
++v7; | |
v10 = a1 <= 0xF; | |
a1 = v8; | |
} | |
while ( !v10 ); | |
if ( (unsigned __int64)(128 - v7) >= 0x81 ) | |
sub_14001D030(128 - v7, 128i64, (__int64)&off_140021AF0); | |
result = sub_1400174B0( | |
(__int64)a2, | |
1, | |
"0x000102030405060708091011121314151617181920212223242526272829303132333435363738394041424344454647484950515" | |
"25354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899", | |
2ui64, | |
(__int64)v6, | |
v7); | |
a2[1] = v3; | |
a2[3].m128i_i32[0] = v4; | |
return result; | |
} | |
// 140021AF0: using guessed type void *off_140021AF0; | |
//----- (0000000140018A00) ---------------------------------------------------- | |
__int64 __fastcall sub_140018A00(unsigned __int8 a1, __int64 a2, unsigned __int64 a3) | |
{ | |
unsigned __int64 v4; // rcx | |
__int64 i; // r10 | |
unsigned __int64 v6; // rax | |
__int64 v7; // r10 | |
__int64 result; // rax | |
v4 = ((a2 + 7) & 0xFFFFFFFFFFFFFFF8ui64) - a2; | |
if ( !v4 ) | |
goto LABEL_10; | |
if ( v4 >= a3 ) | |
v4 = a3; | |
if ( v4 ) | |
{ | |
for ( i = 0i64; i != v4; ++i ) | |
{ | |
if ( *(_BYTE *)(a2 + i) == a1 ) | |
return 1i64; | |
} | |
v6 = a3 - 16; | |
if ( v4 <= a3 - 16 ) | |
goto LABEL_11; | |
} | |
else | |
{ | |
LABEL_10: | |
v6 = a3 - 16; | |
v4 = 0i64; | |
LABEL_11: | |
v7 = 0x101010101010101i64 * a1; | |
do | |
{ | |
if ( (~(v7 ^ *(_QWORD *)(a2 + v4)) & ((v7 ^ *(_QWORD *)(a2 + v4)) - 0x101010101010101i64) & 0x8080808080808080ui64) != 0 ) | |
break; | |
if ( (~(v7 ^ *(_QWORD *)(a2 + v4 + 8)) & ((v7 ^ *(_QWORD *)(a2 + v4 + 8)) - 0x101010101010101i64) & 0x8080808080808080ui64) != 0 ) | |
break; | |
v4 += 16i64; | |
} | |
while ( v4 <= v6 ); | |
if ( v4 > a3 ) | |
sub_14001D030(v4, a3, (__int64)&off_140021C78); | |
} | |
result = 0i64; | |
if ( v4 != a3 ) | |
{ | |
while ( *(_BYTE *)(a2 + v4) != a1 ) | |
{ | |
if ( a3 == ++v4 ) | |
return result; | |
} | |
return 1i64; | |
} | |
return result; | |
} | |
// 140021C78: using guessed type void *off_140021C78; | |
//----- (0000000140018B20) ---------------------------------------------------- | |
__int64 __fastcall sub_140018B20(unsigned __int8 a1, __int64 a2, unsigned __int64 a3) | |
{ | |
unsigned __int64 v4; // rax | |
unsigned __int64 v5; // r9 | |
unsigned __int64 v6; // r8 | |
bool v7; // cf | |
unsigned __int64 v8; // r9 | |
_BYTE *v9; // rsi | |
__int64 i; // r10 | |
bool v11; // zf | |
__int64 v12; // r8 | |
unsigned __int64 v13; // r10 | |
__int64 result; // rax | |
v4 = ((a2 + 7) & 0xFFFFFFFFFFFFFFF8ui64) - a2; | |
v5 = ((_BYTE)a3 - (_BYTE)v4) & 0xF; | |
v6 = 0i64; | |
v7 = a3 < v4; | |
if ( a3 <= v4 ) | |
v4 = a3; | |
if ( !v7 ) | |
v6 = v5; | |
v8 = a3 - v6; | |
if ( a3 < v6 ) | |
sub_14001D030(v8, a3, (__int64)&off_140021C90); | |
v9 = (_BYTE *)(a3 + a2 - 1); | |
for ( i = 0i64; v6 != i; ++i ) | |
{ | |
v11 = *v9-- == a1; | |
if ( v11 ) | |
return 1i64; | |
} | |
v12 = 0x101010101010101i64 * a1; | |
do | |
{ | |
v13 = v8; | |
if ( v8 <= v4 ) | |
break; | |
if ( (~(v12 ^ *(_QWORD *)(a2 + v8 - 16)) & ((v12 ^ *(_QWORD *)(a2 + v8 - 16)) - 0x101010101010101i64) & 0x8080808080808080ui64) != 0 ) | |
break; | |
v8 -= 16i64; | |
} | |
while ( (~(v12 ^ *(_QWORD *)(a2 + v13 - 8)) & ((v12 ^ *(_QWORD *)(a2 + v13 - 8)) - 0x101010101010101i64) & 0x8080808080808080ui64) == 0 ); | |
if ( v13 > a3 ) | |
sub_14001D040(v13, a3, (__int64)&off_140021CA8); | |
result = 0i64; | |
while ( v13 ) | |
{ | |
v11 = *(_BYTE *)(a2 + v13-- - 1) == a1; | |
if ( v11 ) | |
return 1i64; | |
} | |
return result; | |
} | |
// 140021C90: using guessed type void *off_140021C90; | |
// 140021CA8: using guessed type void *off_140021CA8; | |
//----- (0000000140018C60) ---------------------------------------------------- | |
void __fastcall __noreturn sub_140018C60(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
__int64 v3; // [rsp+28h] [rbp-60h] BYREF | |
__int64 v4; // [rsp+30h] [rbp-58h] BYREF | |
__int64 v5[4]; // [rsp+38h] [rbp-50h] BYREF | |
__int64 v6[6]; // [rsp+58h] [rbp-30h] BYREF | |
v3 = a1; | |
v4 = a2; | |
v5[0] = (__int64)&v3; | |
v5[1] = (__int64)sub_14001AD00; | |
v5[2] = (__int64)&v4; | |
v5[3] = (__int64)sub_14001AD00; | |
v6[2] = (__int64)&off_140021CF8; | |
v6[3] = 2i64; | |
v6[0] = 0i64; | |
v6[4] = (__int64)v5; | |
v6[5] = 2i64; | |
sub_14001CBB0((__int64)v6, a3); | |
} | |
// 140021CF8: using guessed type char *off_140021CF8; | |
//----- (0000000140018CE0) ---------------------------------------------------- | |
void __fastcall __noreturn sub_140018CE0(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
__int64 v3; // [rsp+28h] [rbp-60h] BYREF | |
__int64 v4; // [rsp+30h] [rbp-58h] BYREF | |
__int64 v5[4]; // [rsp+38h] [rbp-50h] BYREF | |
__int64 v6[6]; // [rsp+58h] [rbp-30h] BYREF | |
v3 = a1; | |
v4 = a2; | |
v5[0] = (__int64)&v3; | |
v5[1] = (__int64)sub_14001AD00; | |
v5[2] = (__int64)&v4; | |
v5[3] = (__int64)sub_14001AD00; | |
v6[2] = (__int64)&off_140021D28; | |
v6[3] = 2i64; | |
v6[0] = 0i64; | |
v6[4] = (__int64)v5; | |
v6[5] = 2i64; | |
sub_14001CBB0((__int64)v6, a3); | |
} | |
// 140021D28: using guessed type void *off_140021D28; | |
//----- (0000000140018D60) ---------------------------------------------------- | |
void __fastcall __noreturn sub_140018D60(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
__int64 v3; // [rsp+28h] [rbp-60h] BYREF | |
__int64 v4; // [rsp+30h] [rbp-58h] BYREF | |
__int64 v5[4]; // [rsp+38h] [rbp-50h] BYREF | |
__int64 v6[6]; // [rsp+58h] [rbp-30h] BYREF | |
v3 = a1; | |
v4 = a2; | |
v5[0] = (__int64)&v3; | |
v5[1] = (__int64)sub_14001AD00; | |
v5[2] = (__int64)&v4; | |
v5[3] = (__int64)sub_14001AD00; | |
v6[2] = (__int64)&off_140021D70; | |
v6[3] = 2i64; | |
v6[0] = 0i64; | |
v6[4] = (__int64)v5; | |
v6[5] = 2i64; | |
sub_14001CBB0((__int64)v6, a3); | |
} | |
// 140021D70: using guessed type char *off_140021D70; | |
//----- (0000000140018DE0) ---------------------------------------------------- | |
__int64 __fastcall sub_140018DE0(__int64 a1, __int64 a2, unsigned __int64 a3) | |
{ | |
__int64 result; // rax | |
unsigned __int64 v4; // r9 | |
__int64 v5; // r10 | |
unsigned __int64 v6; // rcx | |
unsigned __int64 v7; // rbx | |
int v8; // ebp | |
char v9; // di | |
unsigned __int64 v10; // r14 | |
char v11; // bp | |
char v12; // bp | |
__int64 v13; // rcx | |
result = a1; | |
v4 = 0i64; | |
if ( a3 >= 0xF ) | |
v4 = a3 - 15; | |
if ( !a3 ) | |
{ | |
LABEL_53: | |
*(_QWORD *)(result + 8) = a2; | |
*(_QWORD *)(result + 16) = a3; | |
v13 = 0i64; | |
goto LABEL_54; | |
} | |
v5 = ((a2 + 7) & 0xFFFFFFFFFFFFFFF8ui64) - a2; | |
v6 = 0i64; | |
while ( 1 ) | |
{ | |
v7 = *(unsigned __int8 *)(a2 + v6); | |
if ( (v7 & 0x80u) == 0i64 ) | |
{ | |
if ( v5 == -1 || (((_BYTE)v5 - (_BYTE)v6) & 7) != 0 ) | |
{ | |
++v6; | |
} | |
else | |
{ | |
for ( ; v6 < v4; v6 += 16i64 ) | |
{ | |
if ( (*(_QWORD *)(a2 + v6) & 0x8080808080808080ui64) != 0 ) | |
break; | |
if ( (*(_QWORD *)(a2 + v6 + 8) & 0x8080808080808080ui64) != 0 ) | |
break; | |
} | |
if ( v6 < a3 ) | |
{ | |
while ( *(char *)(a2 + v6) >= 0 ) | |
{ | |
if ( a3 == ++v6 ) | |
goto LABEL_53; | |
} | |
} | |
} | |
goto LABEL_6; | |
} | |
v8 = byte_140021D90[v7]; | |
v9 = 1; | |
if ( v8 == 4 ) | |
{ | |
if ( v6 + 1 >= a3 ) | |
goto LABEL_56; | |
v11 = *(_BYTE *)(a2 + v6 + 1); | |
if ( (_DWORD)v7 == 240 ) | |
{ | |
if ( (unsigned __int8)(v11 + 112) >= 0x30u ) | |
goto LABEL_57; | |
} | |
else if ( (_DWORD)v7 == 244 ) | |
{ | |
if ( v11 > -113 ) | |
goto LABEL_57; | |
} | |
else if ( (unsigned __int8)(v7 + 15) > 2u || v11 >= -64 ) | |
{ | |
goto LABEL_57; | |
} | |
v7 = v6 + 2; | |
if ( v6 + 2 >= a3 ) | |
goto LABEL_55; | |
if ( *(char *)(a2 + v7) > -65 ) | |
goto LABEL_58; | |
v10 = v6 + 3; | |
if ( v6 + 3 >= a3 ) | |
goto LABEL_55; | |
if ( *(char *)(a2 + v10) > -65 ) | |
{ | |
LOBYTE(v7) = 3; | |
goto LABEL_59; | |
} | |
goto LABEL_52; | |
} | |
if ( v8 == 3 ) | |
break; | |
if ( v8 != 2 ) | |
goto LABEL_57; | |
v10 = v6 + 1; | |
if ( v6 + 1 >= a3 ) | |
{ | |
LABEL_55: | |
v9 = 0; | |
goto LABEL_59; | |
} | |
LOBYTE(v7) = 1; | |
if ( *(char *)(a2 + v10) > -65 ) | |
goto LABEL_59; | |
LABEL_52: | |
v6 = v10 + 1; | |
LABEL_6: | |
if ( v6 >= a3 ) | |
goto LABEL_53; | |
} | |
if ( v6 + 1 >= a3 ) | |
{ | |
LABEL_56: | |
v9 = 0; | |
LABEL_57: | |
LOBYTE(v7) = 1; | |
goto LABEL_59; | |
} | |
v12 = *(_BYTE *)(a2 + v6 + 1); | |
if ( (_BYTE)v7 == 0xE0 ) | |
{ | |
if ( (v12 & 0xE0) != 0xA0 ) | |
goto LABEL_57; | |
} | |
else if ( (_DWORD)v7 == 237 ) | |
{ | |
if ( v12 >= -96 ) | |
goto LABEL_57; | |
} | |
else if ( (unsigned __int8)(v7 + 31) >= 0xCu ) | |
{ | |
LOBYTE(v7) = v7 & 0xFE; | |
if ( (_BYTE)v7 != 0xEE || v12 >= -64 ) | |
goto LABEL_57; | |
} | |
else if ( v12 > -65 ) | |
{ | |
goto LABEL_57; | |
} | |
v10 = v6 + 2; | |
if ( v6 + 2 >= a3 ) | |
goto LABEL_55; | |
if ( *(char *)(a2 + v10) <= -65 ) | |
goto LABEL_52; | |
LABEL_58: | |
LOBYTE(v7) = 2; | |
LABEL_59: | |
*(_QWORD *)(result + 8) = v6; | |
*(_BYTE *)(result + 16) = v9; | |
*(_BYTE *)(result + 17) = v7; | |
v13 = 1i64; | |
LABEL_54: | |
*(_QWORD *)result = v13; | |
return result; | |
} | |
// 140021D90: using guessed type unsigned __int8 byte_140021D90[256]; | |
//----- (0000000140018FF0) ---------------------------------------------------- | |
unsigned __int64 __fastcall sub_140018FF0(_BYTE *a1, unsigned __int64 a2) | |
{ | |
unsigned __int64 v2; // r10 | |
unsigned __int64 v3; // r8 | |
unsigned __int64 v4; // rdx | |
int v5; // eax | |
unsigned __int64 v6; // r9 | |
unsigned __int64 result; // rax | |
_BYTE *v8; // r8 | |
unsigned __int64 v9; // r9 | |
__m128i v10; // xmm0 | |
__int64 v11; // rax | |
__m128i si128; // xmm2 | |
__m128i v13; // xmm3 | |
__m128i v14; // xmm1 | |
__m128i v15; // xmm4 | |
__m128i v16; // xmm5 | |
__m128i v17; // xmm1 | |
_BYTE *v18; // rcx | |
_BYTE *v19; // r11 | |
unsigned __int64 v20; // rsi | |
__m128i v21; // xmm0 | |
__int64 v22; // r9 | |
__m128i v23; // xmm2 | |
__m128i v24; // xmm3 | |
__m128i v25; // xmm1 | |
__m128i v26; // xmm4 | |
__m128i v27; // xmm5 | |
__m128i v28; // xmm1 | |
unsigned __int64 v29; // r10 | |
__int64 v30; // rcx | |
unsigned __int64 v31; // rcx | |
unsigned __int64 v32; // r8 | |
__m128i v33; // xmm1 | |
unsigned __int64 v34; // rcx | |
const __m128i *v35; // r11 | |
unsigned __int64 v36; // rbx | |
int v37; // edi | |
__int64 v38; // rsi | |
__int64 v39; // rdx | |
const __m128i *v40; // r14 | |
__m128i v41; // xmm2 | |
__m128i v42; // xmm3 | |
__m128i v43; // xmm2 | |
unsigned __int64 v44; // rdx | |
v2 = ((unsigned __int64)(a1 + 7) & 0xFFFFFFFFFFFFFFF8ui64) - (_QWORD)a1; | |
if ( v2 > a2 || v2 > 8 || (v3 = a2 - v2, a2 - v2 < 8) ) | |
{ | |
if ( !a2 ) | |
return 0i64; | |
if ( a2 >= 4 ) | |
{ | |
v9 = a2 & 0xFFFFFFFFFFFFFFFCui64; | |
v8 = &a1[a2 & 0xFFFFFFFFFFFFFFFCui64]; | |
v10 = 0i64; | |
v11 = 0i64; | |
si128 = _mm_load_si128((const __m128i *)&xmmword_1400216E0); | |
v13 = _mm_load_si128((const __m128i *)&xmmword_1400216F0); | |
v14 = 0i64; | |
do | |
{ | |
v15 = _mm_cmpgt_epi8(_mm_cvtsi32_si128(*(unsigned __int16 *)&a1[v11]), si128); | |
v10 = _mm_add_epi64( | |
v10, | |
_mm_and_si128(_mm_shuffle_epi32(_mm_shufflelo_epi16(_mm_unpacklo_epi8(v15, v15), 212), 212), v13)); | |
v16 = _mm_cmpgt_epi8(_mm_cvtsi32_si128(*(unsigned __int16 *)&a1[v11 + 2]), si128); | |
v14 = _mm_add_epi64( | |
v14, | |
_mm_and_si128(_mm_shuffle_epi32(_mm_shufflelo_epi16(_mm_unpacklo_epi8(v16, v16), 212), 212), v13)); | |
v11 += 4i64; | |
} | |
while ( v9 != v11 ); | |
v17 = _mm_add_epi64(v14, v10); | |
result = _mm_add_epi64(_mm_shuffle_epi32(v17, 238), v17).m128i_u64[0]; | |
if ( v9 == a2 ) | |
return result; | |
} | |
else | |
{ | |
result = 0i64; | |
v8 = a1; | |
} | |
v18 = &a1[a2]; | |
do | |
result += *v8++ >= 0xC0; | |
while ( v8 != v18 ); | |
return result; | |
} | |
v4 = (unsigned __int64)(a1 + 7) & 0xFFFFFFFFFFFFFFF8ui64; | |
v5 = v3 & 7; | |
if ( (_BYTE *)v4 == a1 ) | |
{ | |
v6 = 0i64; | |
goto LABEL_22; | |
} | |
if ( v2 < 4 ) | |
{ | |
v6 = 0i64; | |
v19 = a1; | |
do | |
LABEL_21: | |
v6 += *v19++ >= 0xC0; | |
while ( v19 != (_BYTE *)v4 ); | |
goto LABEL_22; | |
} | |
v20 = v2 & 0xC; | |
v19 = &a1[v2 & 0xFFFFFFFFFFFFFFFCui64]; | |
v21 = 0i64; | |
v22 = 0i64; | |
v23 = _mm_load_si128((const __m128i *)&xmmword_1400216E0); | |
v24 = _mm_load_si128((const __m128i *)&xmmword_1400216F0); | |
v25 = 0i64; | |
do | |
{ | |
v26 = _mm_cmpgt_epi8(_mm_cvtsi32_si128(*(unsigned __int16 *)&a1[v22]), v23); | |
v21 = _mm_add_epi64( | |
v21, | |
_mm_and_si128(_mm_shuffle_epi32(_mm_shufflelo_epi16(_mm_unpacklo_epi8(v26, v26), 212), 212), v24)); | |
v27 = _mm_cmpgt_epi8(_mm_cvtsi32_si128(*(unsigned __int16 *)&a1[v22 + 2]), v23); | |
v25 = _mm_add_epi64( | |
v25, | |
_mm_and_si128(_mm_shuffle_epi32(_mm_shufflelo_epi16(_mm_unpacklo_epi8(v27, v27), 212), 212), v24)); | |
v22 += 4i64; | |
} | |
while ( v20 != v22 ); | |
v28 = _mm_add_epi64(v25, v21); | |
v6 = _mm_add_epi64(_mm_shuffle_epi32(v28, 238), v28).m128i_u64[0]; | |
if ( v2 != v20 ) | |
goto LABEL_21; | |
LABEL_22: | |
if ( (v3 & 7) != 0 ) | |
{ | |
v29 = v3 & 0xFFFFFFFFFFFFFFF8ui64; | |
v30 = *(_BYTE *)(v4 + (v3 & 0xFFFFFFFFFFFFFFF8ui64)) >= 0xC0; | |
if ( v5 != 1 ) | |
{ | |
v30 += *(_BYTE *)(v4 + v29 + 1) >= 0xC0; | |
if ( v5 != 2 ) | |
{ | |
v30 += *(_BYTE *)(v4 + v29 + 2) >= 0xC0; | |
if ( v5 != 3 ) | |
{ | |
v30 += *(_BYTE *)(v4 + v29 + 3) >= 0xC0; | |
if ( v5 != 4 ) | |
{ | |
v30 += *(_BYTE *)(v4 + v29 + 4) >= 0xC0; | |
if ( v5 != 5 ) | |
{ | |
v30 += *(_BYTE *)(v4 + v29 + 5) >= 0xC0; | |
if ( v5 != 6 ) | |
v30 += *(_BYTE *)(v4 + v29 + 6) >= 0xC0; | |
} | |
} | |
} | |
} | |
} | |
} | |
else | |
{ | |
v30 = 0i64; | |
} | |
v31 = v6 + v30; | |
v32 = v3 >> 3; | |
v33 = _mm_load_si128((const __m128i *)&xmmword_140021700); | |
while ( 1 ) | |
{ | |
result = v31; | |
if ( !v32 ) | |
break; | |
v35 = (const __m128i *)v4; | |
v36 = 192i64; | |
if ( v32 < 0xC0 ) | |
v36 = v32; | |
v37 = v36 & 3; | |
v38 = (unsigned __int8)v36 & 0xFC; | |
if ( (v36 & 0xFC) != 0 ) | |
{ | |
v39 = 32 * (v36 >> 2); | |
v34 = 0i64; | |
v40 = v35; | |
do | |
{ | |
if ( !v40 ) | |
break; | |
v41 = _mm_loadu_si128(v40); | |
v42 = _mm_loadu_si128(v40 + 1); | |
v40 += 2; | |
v43 = _mm_add_epi64( | |
_mm_and_si128( | |
_mm_or_si128(_mm_srli_epi64(v41, 6u), _mm_srli_epi64(_mm_xor_si128(v41, (__m128i)-1i64), 7u)), | |
v33), | |
_mm_and_si128( | |
_mm_or_si128(_mm_srli_epi64(v42, 6u), _mm_srli_epi64(_mm_xor_si128(v42, (__m128i)-1i64), 7u)), | |
v33)); | |
v34 += _mm_add_epi64(_mm_shuffle_epi32(v43, 238), v43).m128i_u64[0]; | |
v39 -= 32i64; | |
} | |
while ( v39 ); | |
} | |
else | |
{ | |
v34 = 0i64; | |
} | |
v4 = (unsigned __int64)v35 + 8 * v36; | |
v32 -= v36; | |
v31 = result + ((0x1000100010001i64 * ((v34 & 0xFF00FF00FF00FFi64) + ((v34 >> 8) & 0xFF00FF00FF00FFi64))) >> 48); | |
if ( (v36 & 3) != 0 ) | |
{ | |
if ( v35 ) | |
{ | |
v44 = (((unsigned __int64)~v35->m128i_i64[v38] >> 7) | ((unsigned __int64)v35->m128i_i64[v38] >> 6)) & 0x101010101010101i64; | |
if ( v37 != 1 ) | |
{ | |
v44 += (((unsigned __int64)~v35->m128i_i64[v38 + 1] >> 7) | ((unsigned __int64)v35->m128i_i64[v38 + 1] >> 6)) & 0x101010101010101i64; | |
if ( v37 != 2 ) | |
v44 += (((unsigned __int64)~v35[1].m128i_i64[v38] >> 7) | ((unsigned __int64)v35[1].m128i_i64[v38] >> 6)) & 0x101010101010101i64; | |
} | |
} | |
else | |
{ | |
v44 = 0i64; | |
} | |
return v31 + ((0x1000100010001i64 * ((v44 & 0xFF00FF00FF00FFi64) + ((v44 >> 8) & 0x700FF00FF00FFi64))) >> 48); | |
} | |
} | |
return result; | |
} | |
// 140019121: mask 0xFFFFFFFFFFFFFFFC is shortened because r10.8 <= 0x8 | |
// 1400216E0: using guessed type __int128 xmmword_1400216E0; | |
// 1400216F0: using guessed type __int128 xmmword_1400216F0; | |
// 140021700: using guessed type __int128 xmmword_140021700; | |
//----- (00000001400194E0) ---------------------------------------------------- | |
__int64 __fastcall sub_1400194E0(__int64 a1, __int64 a2, __int64 a3, _BYTE *a4, unsigned __int64 a5) | |
{ | |
__int64 v7; // r15 | |
unsigned __int64 v9; // r12 | |
unsigned __int64 v10; // rax | |
__int64 v11; // rdx | |
size_t v12; // r13 | |
unsigned __int64 v13; // rdx | |
size_t v14; // r12 | |
__int64 v15; // rax | |
_BYTE *v16; // rdx | |
__int64 v17; // r10 | |
__int64 v18; // r9 | |
__int64 v19; // r8 | |
__int64 v20; // rcx | |
unsigned __int64 v21; // rcx | |
unsigned __int8 v22; // cl | |
__int64 v23; // r8 | |
__int64 v24; // r10 | |
__int64 v25; // r11 | |
__int64 v26; // r10 | |
__int64 v27; // r9 | |
__int64 v28; // rcx | |
unsigned __int8 v29; // cl | |
__int64 v30; // r9 | |
__int64 v31; // r11 | |
__int64 v32; // r9 | |
__int64 v33; // r10 | |
__int64 v34; // r11 | |
unsigned __int64 v35; // rdx | |
__int64 v36; // rbp | |
unsigned __int64 v37; // rax | |
unsigned __int8 v38; // al | |
__int64 v39; // r10 | |
__int64 v40; // rax | |
__int64 v41; // r15 | |
__int64 v42; // r11 | |
__int64 v43; // rbp | |
unsigned __int64 v44; // r10 | |
__int64 v45; // r9 | |
unsigned __int8 v46; // al | |
__int64 v47; // r11 | |
__int64 v48; // rax | |
size_t v49; // rcx | |
_BYTE *v50; // r9 | |
unsigned __int64 v51; // r8 | |
__int64 v52; // rax | |
char v53; // r9 | |
__int64 v54; // r8 | |
__int64 v55; // r8 | |
__int64 v56; // rdx | |
unsigned __int64 v57; // r8 | |
__int64 v58; // rax | |
char v59; // r10 | |
__int64 v60; // r10 | |
char **v62; // r8 | |
char **v63; // r8 | |
__int64 v64; // rcx | |
__int64 v65; // [rsp+20h] [rbp-48h] | |
v7 = a2; | |
if ( !a5 ) | |
{ | |
*(_QWORD *)a1 = a2; | |
*(_QWORD *)(a1 + 8) = a3; | |
*(_QWORD *)(a1 + 16) = a4; | |
*(_OWORD *)(a1 + 24) = 0i64; | |
*(_QWORD *)(a1 + 40) = 0i64; | |
*(_QWORD *)(a1 + 48) = a3; | |
*(_WORD *)(a1 + 56) = 257; | |
*(_BYTE *)(a1 + 58) = 0; | |
return a1; | |
} | |
if ( a5 != 1 ) | |
{ | |
v17 = 1i64; | |
v10 = 0i64; | |
v18 = 1i64; | |
v19 = 0i64; | |
v9 = 1i64; | |
do | |
{ | |
v21 = v19 + v10; | |
if ( v19 + v10 >= a5 ) | |
goto LABEL_85; | |
v22 = a4[v21]; | |
if ( a4[v17] < v22 ) | |
{ | |
v20 = v18 + v19 + 1; | |
v9 = v20 - v10; | |
v19 = 0i64; | |
} | |
else if ( a4[v17] == v22 ) | |
{ | |
v23 = v19 + 1; | |
v24 = v23; | |
if ( v23 == v9 ) | |
v24 = 0i64; | |
else | |
v23 = 0i64; | |
v20 = v18 + v23; | |
v19 = v24; | |
} | |
else | |
{ | |
v20 = v18 + 1; | |
v9 = 1i64; | |
v19 = 0i64; | |
v10 = v18; | |
} | |
v17 = v20 + v19; | |
v18 = v20; | |
} | |
while ( v20 + v19 < a5 ); | |
v25 = 1i64; | |
v12 = 0i64; | |
v26 = 1i64; | |
v27 = 0i64; | |
v11 = 1i64; | |
while ( 1 ) | |
{ | |
v21 = v27 + v12; | |
if ( v27 + v12 >= a5 ) | |
break; | |
v29 = a4[v21]; | |
if ( a4[v25] > v29 ) | |
{ | |
v28 = v26 + v27 + 1; | |
v11 = v28 - v12; | |
v27 = 0i64; | |
} | |
else if ( a4[v25] == v29 ) | |
{ | |
v30 = v27 + 1; | |
v31 = v30; | |
if ( v30 == v11 ) | |
v31 = 0i64; | |
else | |
v30 = 0i64; | |
v28 = v26 + v30; | |
v27 = v31; | |
} | |
else | |
{ | |
v28 = v26 + 1; | |
v11 = 1i64; | |
v27 = 0i64; | |
v12 = v26; | |
} | |
v25 = v28 + v27; | |
v26 = v28; | |
if ( v28 + v27 >= a5 ) | |
goto LABEL_4; | |
} | |
LABEL_85: | |
v62 = &off_140021F38; | |
goto LABEL_88; | |
} | |
v9 = 1i64; | |
v10 = 0i64; | |
v11 = 1i64; | |
v12 = 0i64; | |
LABEL_4: | |
if ( v10 > v12 ) | |
v12 = v10; | |
else | |
v9 = v11; | |
if ( v12 > a5 ) | |
{ | |
v63 = &off_140021EF0; | |
v64 = v12; | |
goto LABEL_93; | |
} | |
v13 = v12 + v9; | |
if ( __CFADD__(v12, v9) ) | |
sub_14001D050(v9, v13, (__int64)&off_140021F08); | |
if ( v13 > a5 ) | |
{ | |
v63 = &off_140021F08; | |
v64 = v12 + v9; | |
goto LABEL_93; | |
} | |
if ( memcmp(a4, &a4[v9], v12) ) | |
{ | |
v14 = a5 - v12; | |
if ( v12 > a5 - v12 ) | |
v14 = v12; | |
if ( a5 - 1 >= 3 ) | |
{ | |
v51 = a5 & 0xFFFFFFFFFFFFFFFCui64; | |
v15 = 0i64; | |
v16 = a4; | |
do | |
{ | |
v52 = v15 | (1i64 << *v16) | (1i64 << v16[1]) | (1i64 << v16[2]); | |
v53 = v16[3]; | |
v16 += 4; | |
v15 = v52 | (1i64 << v53); | |
v51 -= 4i64; | |
} | |
while ( v51 ); | |
} | |
else | |
{ | |
v15 = 0i64; | |
v16 = a4; | |
} | |
if ( (a5 & 3) != 0 ) | |
{ | |
v54 = 0i64; | |
do | |
v15 |= 1i64 << v16[v54++]; | |
while ( (a5 & 3) != v54 ); | |
} | |
v9 = v14 + 1; | |
v55 = -1i64; | |
v56 = -1i64; | |
v49 = v12; | |
goto LABEL_83; | |
} | |
v32 = 1i64; | |
v33 = 0i64; | |
v34 = 1i64; | |
v35 = 0i64; | |
while ( v34 + v33 < a5 ) | |
{ | |
v21 = ~v34 + a5 - v33; | |
if ( v21 >= a5 ) | |
{ | |
LABEL_86: | |
v62 = &off_140021F50; | |
goto LABEL_88; | |
} | |
v37 = a5 + ~v33 - v35; | |
if ( v37 >= a5 ) | |
{ | |
LABEL_87: | |
v62 = &off_140021F68; | |
v21 = v37; | |
LABEL_88: | |
sub_14001CD00(v21, a5, (__int64)v62); | |
} | |
v38 = a4[v37]; | |
if ( a4[v21] < v38 ) | |
{ | |
v36 = v33 + v34 + 1; | |
v32 = v36 - v35; | |
v33 = 0i64; | |
LABEL_40: | |
v34 = v36; | |
if ( v32 == v9 ) | |
break; | |
} | |
else | |
{ | |
if ( a4[v21] == v38 ) | |
{ | |
v39 = v33 + 1; | |
v40 = v39; | |
if ( v39 == v32 ) | |
v40 = 0i64; | |
else | |
v39 = 0i64; | |
v36 = v34 + v39; | |
v33 = v40; | |
goto LABEL_40; | |
} | |
v32 = 1i64; | |
v33 = 0i64; | |
v35 = v34++; | |
if ( v9 == 1 ) | |
break; | |
} | |
} | |
v65 = v7; | |
v41 = 1i64; | |
v42 = 0i64; | |
v43 = 1i64; | |
v44 = 0i64; | |
while ( v42 + v43 < a5 ) | |
{ | |
v21 = ~v43 + a5 - v42; | |
if ( v21 >= a5 ) | |
goto LABEL_86; | |
v37 = a5 + ~v42 - v44; | |
if ( v37 >= a5 ) | |
goto LABEL_87; | |
v46 = a4[v37]; | |
if ( a4[v21] > v46 ) | |
{ | |
v45 = v42 + v43 + 1; | |
v41 = v45 - v44; | |
v42 = 0i64; | |
LABEL_53: | |
v43 = v45; | |
if ( v41 == v9 ) | |
break; | |
} | |
else | |
{ | |
if ( a4[v21] == v46 ) | |
{ | |
v47 = v42 + 1; | |
v48 = v47; | |
if ( v47 == v41 ) | |
v48 = 0i64; | |
else | |
v47 = 0i64; | |
v45 = v43 + v47; | |
v42 = v48; | |
goto LABEL_53; | |
} | |
v41 = 1i64; | |
v42 = 0i64; | |
v44 = v43++; | |
if ( v9 == 1 ) | |
break; | |
} | |
} | |
if ( v35 > v44 ) | |
v44 = v35; | |
if ( v9 > a5 ) | |
{ | |
v63 = &off_140021F20; | |
v64 = v9; | |
LABEL_93: | |
sub_14001D040(v64, a5, (__int64)v63); | |
} | |
v49 = a5 - v44; | |
v7 = v65; | |
if ( v9 ) | |
{ | |
if ( v9 >= 4 ) | |
{ | |
v57 = v9 & 0xFFFFFFFFFFFFFFFCui64; | |
v15 = 0i64; | |
v50 = a4; | |
do | |
{ | |
v58 = v15 | (1i64 << *v50) | (1i64 << v50[1]) | (1i64 << v50[2]); | |
v59 = v50[3]; | |
v50 += 4; | |
v15 = v58 | (1i64 << v59); | |
v57 -= 4i64; | |
} | |
while ( v57 ); | |
} | |
else | |
{ | |
v15 = 0i64; | |
v50 = a4; | |
} | |
v55 = 0i64; | |
if ( (v9 & 3) != 0 ) | |
{ | |
v60 = 0i64; | |
do | |
v15 |= 1i64 << v50[v60++]; | |
while ( (v9 & 3) != v60 ); | |
} | |
v56 = a5; | |
} | |
else | |
{ | |
v55 = 0i64; | |
v56 = a5; | |
v15 = 0i64; | |
v9 = 0i64; | |
} | |
LABEL_83: | |
*(_QWORD *)a1 = v7; | |
*(_QWORD *)(a1 + 8) = a3; | |
*(_QWORD *)(a1 + 16) = a4; | |
*(_QWORD *)(a1 + 24) = a5; | |
*(_QWORD *)(a1 + 32) = 1i64; | |
*(_QWORD *)(a1 + 40) = v12; | |
*(_QWORD *)(a1 + 48) = v49; | |
*(_QWORD *)(a1 + 56) = v9; | |
*(_QWORD *)(a1 + 64) = v15; | |
*(_QWORD *)(a1 + 72) = 0i64; | |
*(_QWORD *)(a1 + 80) = a3; | |
*(_QWORD *)(a1 + 88) = v55; | |
*(_QWORD *)(a1 + 96) = v56; | |
return a1; | |
} | |
// 140021EF0: using guessed type char *off_140021EF0; | |
// 140021F08: using guessed type char *off_140021F08; | |
// 140021F20: using guessed type char *off_140021F20; | |
// 140021F38: using guessed type char *off_140021F38; | |
// 140021F50: using guessed type char *off_140021F50; | |
// 140021F68: using guessed type char *off_140021F68; | |
//----- (0000000140019A60) ---------------------------------------------------- | |
void __fastcall __noreturn sub_140019A60( | |
char *a1, | |
unsigned __int64 a2, | |
unsigned __int64 a3, | |
unsigned __int64 a4, | |
__int64 a5) | |
{ | |
unsigned __int64 v5; // rax | |
unsigned __int64 v6; // rax | |
unsigned __int64 v7; // r9 | |
__int64 v8; // rax | |
char *v9; // r11 | |
char *v10; // r8 | |
char *v11; // r8 | |
char *v12; // r8 | |
char v13; // r9 | |
__int64 v14; // rdx | |
int v15; // edx | |
int v16; // r11d | |
int v17; // r8d | |
unsigned int v18; // ecx | |
unsigned int v19; // [rsp+2Ch] [rbp-CCh] BYREF | |
char *v20; // [rsp+30h] [rbp-C8h] BYREF | |
unsigned __int64 v21; // [rsp+38h] [rbp-C0h] | |
__int64 v22[2]; // [rsp+40h] [rbp-B8h] BYREF | |
void **v23; // [rsp+50h] [rbp-A8h] | |
__int64 v24; // [rsp+58h] [rbp-A0h] | |
unsigned __int64 **v25; // [rsp+60h] [rbp-98h] | |
__int64 v26; // [rsp+68h] [rbp-90h] | |
unsigned __int64 *v27; // [rsp+70h] [rbp-88h] BYREF | |
__int64 (__fastcall *v28)(unsigned __int64 *, __int64); // [rsp+78h] [rbp-80h] | |
unsigned __int64 *v29; // [rsp+80h] [rbp-78h] | |
void *v30; // [rsp+88h] [rbp-70h] | |
const char **v31; // [rsp+90h] [rbp-68h] | |
void *v32; // [rsp+98h] [rbp-60h] | |
const char **v33; // [rsp+A0h] [rbp-58h] | |
__int64 (__fastcall *v34)(__int64, __int64 *); // [rsp+A8h] [rbp-50h] | |
const char **v35; // [rsp+B0h] [rbp-48h] | |
__int64 (__fastcall *v36)(__int64, __int64 *); // [rsp+B8h] [rbp-40h] | |
const char *v37; // [rsp+C0h] [rbp-38h] BYREF | |
__int64 v38; // [rsp+C8h] [rbp-30h] | |
__int64 v39[2]; // [rsp+D0h] [rbp-28h] BYREF | |
unsigned __int64 v40; // [rsp+E0h] [rbp-18h] BYREF | |
unsigned __int64 v41; // [rsp+E8h] [rbp-10h] BYREF | |
unsigned __int64 v42; // [rsp+F0h] [rbp-8h] BYREF | |
v40 = a3; | |
v41 = a4; | |
if ( a2 < 0x101 ) | |
{ | |
v20 = a1; | |
v21 = a2; | |
v37 = "from_str_radix_int: must lie in the range `[2, 36]` - found "; | |
v38 = 0i64; | |
if ( a3 > a2 ) | |
goto LABEL_13; | |
} | |
else | |
{ | |
v5 = 256i64; | |
if ( a1[256] <= -65 ) | |
{ | |
v5 = 255i64; | |
if ( a1[255] <= -65 ) | |
{ | |
v5 = 254i64; | |
if ( a1[254] <= -65 ) | |
v5 = 253i64; | |
} | |
} | |
if ( a1[v5] <= -65 ) | |
sub_14001D0B0(a1, a2, 0i64, v5, a5); | |
v20 = a1; | |
v21 = v5; | |
v37 = "[...]byte index is out of bounds of `"; | |
v38 = 5i64; | |
if ( a3 > a2 ) | |
{ | |
LABEL_13: | |
if ( a3 > a2 ) | |
a4 = a3; | |
v39[0] = a4; | |
v27 = (unsigned __int64 *)v39; | |
v28 = sub_14001AD00; | |
v29 = (unsigned __int64 *)&v20; | |
v30 = sub_14001AFA0; | |
v31 = &v37; | |
v32 = sub_14001AFA0; | |
v23 = &off_140021FA8; | |
v24 = 3i64; | |
v22[0] = 0i64; | |
v25 = &v27; | |
v26 = 3i64; | |
sub_14001CBB0((__int64)v22, a5); | |
} | |
} | |
if ( a4 > a2 ) | |
goto LABEL_13; | |
if ( a3 > a4 ) | |
{ | |
v27 = &v40; | |
v28 = sub_14001AD00; | |
v29 = &v41; | |
v30 = sub_14001AD00; | |
v31 = (const char **)&v20; | |
v32 = sub_14001AFA0; | |
v33 = &v37; | |
v34 = sub_14001AFA0; | |
v23 = (void **)&off_140022000; | |
v24 = 4i64; | |
v22[0] = 0i64; | |
v25 = &v27; | |
v26 = 4i64; | |
sub_14001CBB0((__int64)v22, a5); | |
} | |
if ( a3 ) | |
{ | |
if ( a3 >= a2 ) | |
{ | |
if ( a3 != a2 ) | |
goto LABEL_23; | |
} | |
else if ( a1[a3] < -64 ) | |
{ | |
LABEL_23: | |
v42 = a3; | |
v6 = a2; | |
if ( a3 < a2 ) | |
{ | |
v7 = 0i64; | |
if ( a3 >= 3 ) | |
v7 = a3 - 3; | |
v8 = a3 + 1; | |
if ( a3 + 1 < v7 ) | |
sub_14001D050(v7, v8, (__int64)&off_1400220E8); | |
if ( a3 + 1 != v7 ) | |
{ | |
v9 = &a1[v7]; | |
v8 -= v7; | |
if ( a1[a3] <= -65 ) | |
{ | |
if ( v7 != a3 ) | |
{ | |
v10 = &a1[a3]; | |
if ( *(v10 - 1) <= -65 ) | |
{ | |
v11 = v10 - 1; | |
if ( v9 != v11 ) | |
{ | |
if ( *(v11 - 1) <= -65 ) | |
{ | |
v12 = v11 - 1; | |
if ( v9 != v12 ) | |
{ | |
if ( *(v12 - 1) <= -65 ) | |
{ | |
if ( v9 != v12 - 1 ) | |
v8 -= 5i64; | |
} | |
else | |
{ | |
v8 -= 4i64; | |
} | |
} | |
} | |
else | |
{ | |
v8 -= 3i64; | |
} | |
} | |
} | |
else | |
{ | |
v8 -= 2i64; | |
} | |
} | |
} | |
else | |
{ | |
--v8; | |
} | |
} | |
v6 = v7 + v8; | |
} | |
if ( v6 ) | |
{ | |
if ( v6 >= a2 ) | |
{ | |
if ( v6 != a2 ) | |
LABEL_46: | |
sub_14001D0B0(a1, a2, v6, a2, a5); | |
} | |
else if ( a1[v6] <= -65 ) | |
{ | |
goto LABEL_46; | |
} | |
} | |
if ( v6 == a2 ) | |
LABEL_49: | |
sub_14001CC50((__int64)"called `Option::unwrap()` on a `None` value", 43i64, a5); | |
v13 = a1[v6]; | |
if ( v13 < 0 ) | |
{ | |
v15 = v13 & 0x1F; | |
v16 = a1[v6 + 1] & 0x3F; | |
if ( (unsigned __int8)v13 <= 0xDFu ) | |
{ | |
v18 = v16 | (v15 << 6); | |
} | |
else | |
{ | |
v17 = (v16 << 6) | a1[v6 + 2] & 0x3F; | |
if ( (unsigned __int8)v13 < 0xF0u ) | |
{ | |
v18 = (v15 << 12) | v17; | |
} | |
else | |
{ | |
v18 = ((v13 & 7) << 18) | (v17 << 6) | a1[v6 + 3] & 0x3F; | |
if ( v18 == 1114112 ) | |
goto LABEL_49; | |
} | |
} | |
v19 = v18; | |
v14 = 1i64; | |
if ( v18 >= 0x80 ) | |
{ | |
v14 = 2i64; | |
if ( v18 > 0x7FF ) | |
v14 = 4i64 - (v18 < 0x10000); | |
} | |
} | |
else | |
{ | |
v19 = (unsigned __int8)v13; | |
v14 = 1i64; | |
} | |
v39[0] = v6; | |
v39[1] = v6 + v14; | |
v27 = &v42; | |
v28 = sub_14001AD00; | |
v29 = (unsigned __int64 *)&v19; | |
v30 = sub_140018410; | |
v31 = (const char **)v39; | |
v32 = sub_1400165E0; | |
v33 = (const char **)&v20; | |
v34 = sub_14001AFA0; | |
v35 = &v37; | |
v36 = sub_14001AFA0; | |
v23 = &off_140022078; | |
v24 = 5i64; | |
v22[0] = 0i64; | |
v25 = &v27; | |
v26 = 5i64; | |
sub_14001CBB0((__int64)v22, a5); | |
} | |
} | |
a3 = a4; | |
goto LABEL_23; | |
} | |
// 140021FA8: using guessed type void *off_140021FA8; | |
// 140022000: using guessed type char *off_140022000; | |
// 140022078: using guessed type void *off_140022078; | |
// 1400220E8: using guessed type char *off_1400220E8; | |
//----- (0000000140019F10) ---------------------------------------------------- | |
char __fastcall sub_140019F10( | |
int a1, | |
_BYTE *a2, | |
__int64 a3, | |
__int64 a4, | |
unsigned __int64 a5, | |
unsigned __int8 *a6, | |
__int64 a7) | |
{ | |
_BYTE *v7; // rax | |
_BYTE *v8; // r8 | |
unsigned __int64 v9; // r11 | |
_BYTE *v10; // rbx | |
__int64 v11; // rdi | |
unsigned __int64 v12; // r10 | |
__int64 v13; // r11 | |
__int64 v14; // rbx | |
unsigned __int8 *v16; // r8 | |
unsigned __int8 *v17; // rdx | |
int v18; // r9d | |
int v19; // r10d | |
char v20; // al | |
if ( a3 ) | |
{ | |
v7 = a2; | |
v8 = &a2[2 * a3]; | |
v9 = 0i64; | |
do | |
{ | |
v10 = v7; | |
v11 = (unsigned __int8)v7[1]; | |
v7 += 2; | |
v12 = v9 + v11; | |
if ( *v10 == BYTE1(a1) ) | |
{ | |
if ( v12 < v9 ) | |
sub_14001D050(v9, v9 + v11, (__int64)&off_140022128); | |
if ( v12 > a5 ) | |
sub_14001D040(v9 + v11, a5, (__int64)&off_140022128); | |
v13 = a4 + v9; | |
v14 = 0i64; | |
while ( v11 != v14 ) | |
{ | |
if ( *(_BYTE *)(v13 + v14++) == (unsigned __int8)a1 ) | |
{ | |
v20 = 0; | |
return v20 & 1; | |
} | |
} | |
} | |
else if ( *v10 > BYTE1(a1) ) | |
{ | |
break; | |
} | |
v9 = v12; | |
} | |
while ( v7 != v8 ); | |
} | |
if ( a7 ) | |
{ | |
v16 = a6; | |
v17 = &a6[a7]; | |
a1 = (unsigned __int16)a1; | |
v20 = 1; | |
while ( 1 ) | |
{ | |
v18 = *v16; | |
if ( (v18 & 0x80u) != 0 ) | |
{ | |
if ( v16 + 1 == v17 ) | |
sub_14001CC50((__int64)"called `Option::unwrap()` on a `None` value", 43i64, (__int64)&off_140022140); | |
v19 = v16[1]; | |
v16 += 2; | |
a1 -= v19 | ((v18 & 0x7F) << 8); | |
if ( a1 < 0 ) | |
return v20 & 1; | |
} | |
else | |
{ | |
++v16; | |
a1 -= v18; | |
if ( a1 < 0 ) | |
return v20 & 1; | |
} | |
v20 ^= 1u; | |
if ( v16 == v17 ) | |
return v20 & 1; | |
} | |
} | |
v20 = 1; | |
return v20 & 1; | |
} | |
// 140022128: using guessed type char *off_140022128; | |
// 140022140: using guessed type char *off_140022140; | |
//----- (000000014001A050) ---------------------------------------------------- | |
char __fastcall sub_14001A050(unsigned int a1) | |
{ | |
char result; // al | |
if ( a1 < 0x20 ) | |
return 0; | |
result = 1; | |
if ( a1 >= 0x7F ) | |
{ | |
if ( a1 >= 0x10000 ) | |
{ | |
if ( a1 >= 0x20000 ) | |
{ | |
result = 0; | |
if ( !_mm_movemask_ps((__m128)_mm_cmpgt_epi32( | |
_mm_load_si128((const __m128i *)&xmmword_140021730), | |
_mm_xor_si128( | |
_mm_add_epi32( | |
_mm_shuffle_epi32(_mm_cvtsi32_si128(a1), 0), | |
(__m128i)xmmword_140021710), | |
(__m128i)xmmword_140021720))) | |
&& a1 - 201547 >= 5 | |
&& a1 - 205744 >= 0xADD50 | |
&& (a1 & 0xFFFFFFE0) != 173792 | |
&& (a1 & 0xFFFFFFFE) != 178206 ) | |
{ | |
return a1 - 1114112 < 0xFFFD01F0; | |
} | |
} | |
else | |
{ | |
return sub_140019F10(a1, byte_1400223F6, 44i64, (__int64)&unk_14002244E, 0xC4ui64, byte_140022512, 450i64); | |
} | |
} | |
else | |
{ | |
return sub_140019F10(a1, byte_140022158, 40i64, (__int64)&unk_1400221A8, 0x11Fui64, byte_1400222C7, 303i64); | |
} | |
} | |
return result; | |
} | |
// 140021710: using guessed type __int128 xmmword_140021710; | |
// 140021720: using guessed type __int128 xmmword_140021720; | |
// 140021730: using guessed type __int128 xmmword_140021730; | |
// 140022158: using guessed type _BYTE byte_140022158[80]; | |
// 1400222C7: using guessed type unsigned __int8 byte_1400222C7[303]; | |
// 1400223F6: using guessed type _BYTE byte_1400223F6[88]; | |
// 140022512: using guessed type unsigned __int8 byte_140022512[450]; | |
//----- (000000014001A180) ---------------------------------------------------- | |
char __fastcall sub_14001A180(__int64 a1, _QWORD *a2) | |
{ | |
char v3; // al | |
char result; // al | |
char *v5; // rdx | |
__int64 v6; // r8 | |
_QWORD *v7; // [rsp+28h] [rbp-20h] BYREF | |
char v8; // [rsp+30h] [rbp-18h] | |
char v9; // [rsp+31h] [rbp-17h] | |
__int64 v10; // [rsp+38h] [rbp-10h] BYREF | |
v10 = a1; | |
v3 = (*(__int64 (__fastcall **)(_QWORD, const char *, __int64))(a2[1] + 24i64))(*a2, "ParseIntError", 13i64); | |
v7 = a2; | |
v8 = v3; | |
v9 = 0; | |
sub_140016B60(&v7, (__int64)&unk_140022720, 4ui64, (__int64)&v10, (__int64)&off_140022740); | |
if ( !v9 ) | |
return v8 != 0; | |
result = 1; | |
if ( !v8 ) | |
{ | |
if ( (v7[6] & 4) != 0 ) | |
{ | |
v5 = "} }(\n(,\n"; | |
v6 = 1i64; | |
} | |
else | |
{ | |
v5 = " }(\n(,\n"; | |
v6 = 2i64; | |
} | |
return (*(__int64 (__fastcall **)(_QWORD, char *, __int64))(v7[1] + 24i64))(*v7, v5, v6); | |
} | |
return result; | |
} | |
// 140022740: using guessed type __int64 (__fastcall *off_140022740)(); | |
//----- (000000014001A250) ---------------------------------------------------- | |
__int64 __fastcall sub_14001A250(__int64 a1, unsigned __int8 *a2, unsigned __int64 a3) | |
{ | |
unsigned __int8 *v3; // r9 | |
int v4; // eax | |
__int64 v5; // rdx | |
__int64 v6; // rax | |
unsigned int v7; // r10d | |
char v8; // al | |
__int64 v9; // r10 | |
unsigned __int128 v10; // rax | |
unsigned int v11; // edi | |
bool v12; // cf | |
if ( !a3 ) | |
{ | |
*(_BYTE *)(a1 + 1) = 0; | |
goto LABEL_20; | |
} | |
v3 = a2; | |
v4 = *a2; | |
if ( v4 == 45 ) | |
{ | |
if ( a3 != 1 ) | |
goto LABEL_9; | |
goto LABEL_8; | |
} | |
if ( v4 == 43 ) | |
{ | |
if ( --a3 ) | |
{ | |
v3 = a2 + 1; | |
goto LABEL_9; | |
} | |
LABEL_8: | |
*(_BYTE *)(a1 + 1) = 1; | |
goto LABEL_20; | |
} | |
LABEL_9: | |
if ( a3 < 0x11 ) | |
{ | |
v5 = 0i64; | |
v6 = 0i64; | |
while ( 1 ) | |
{ | |
v7 = v3[v5] - 48; | |
if ( v7 > 9 ) | |
goto LABEL_8; | |
v6 = v7 + 10 * v6; | |
if ( a3 == ++v5 ) | |
goto LABEL_13; | |
} | |
} | |
v9 = 0i64; | |
v6 = 0i64; | |
do | |
{ | |
if ( a3 == v9 ) | |
{ | |
LABEL_13: | |
*(_QWORD *)(a1 + 8) = v6; | |
v8 = 0; | |
goto LABEL_21; | |
} | |
v10 = 0xA * (unsigned __int128)(unsigned __int64)v6; | |
BYTE8(v10) = *((_QWORD *)&v10 + 1) != 0i64; | |
v11 = v3[v9] - 48; | |
if ( v11 >= 0xA ) | |
goto LABEL_8; | |
if ( BYTE8(v10) ) | |
break; | |
++v9; | |
v12 = __CFADD__(v11, (_QWORD)v10); | |
v6 = v11 + (_QWORD)v10; | |
} | |
while ( !v12 ); | |
*(_BYTE *)(a1 + 1) = 2; | |
LABEL_20: | |
v8 = 1; | |
LABEL_21: | |
*(_BYTE *)a1 = v8; | |
return a1; | |
} | |
//----- (000000014001A310) ---------------------------------------------------- | |
__int64 __fastcall sub_14001A310(unsigned __int8 *a1, __int64 a2) | |
{ | |
unsigned __int8 v2; // cl | |
char *v3; // r8 | |
__int64 v4; // rax | |
unsigned __int8 v5; // r10 | |
char v6; // si | |
bool v7; // cc | |
char v9; // [rsp+B0h] [rbp-8h] BYREF | |
v2 = *a1; | |
v3 = &v9; | |
v4 = 0i64; | |
v5 = v2; | |
do | |
{ | |
v5 >>= 4; | |
v6 = 87; | |
if ( (v2 & 0xFu) < 0xA ) | |
v6 = 48; | |
*--v3 = (v2 & 0xF) + v6; | |
++v4; | |
v7 = v2 <= 0xFu; | |
v2 = v5; | |
} | |
while ( !v7 ); | |
if ( (unsigned __int64)(128 - v4) >= 0x81 ) | |
sub_14001D030(128 - v4, 128i64, (__int64)&off_140021AF0); | |
return sub_1400174B0( | |
a2, | |
1, | |
"0x00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525" | |
"354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899", | |
2ui64, | |
(__int64)v3, | |
v4); | |
} | |
// 140021AF0: using guessed type void *off_140021AF0; | |
//----- (000000014001A3B0) ---------------------------------------------------- | |
__int64 __fastcall sub_14001A3B0(unsigned __int8 *a1, __int64 a2) | |
{ | |
unsigned __int8 v2; // cl | |
char *v3; // r8 | |
__int64 v4; // rax | |
unsigned __int8 v5; // r10 | |
char v6; // si | |
bool v7; // cc | |
char v9; // [rsp+B0h] [rbp-8h] BYREF | |
v2 = *a1; | |
v3 = &v9; | |
v4 = 0i64; | |
v5 = v2; | |
do | |
{ | |
v5 >>= 4; | |
v6 = 55; | |
if ( (v2 & 0xFu) < 0xA ) | |
v6 = 48; | |
*--v3 = (v2 & 0xF) + v6; | |
++v4; | |
v7 = v2 <= 0xFu; | |
v2 = v5; | |
} | |
while ( !v7 ); | |
if ( (unsigned __int64)(128 - v4) >= 0x81 ) | |
sub_14001D030(128 - v4, 128i64, (__int64)&off_140021AF0); | |
return sub_1400174B0( | |
a2, | |
1, | |
"0x00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525" | |
"354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899", | |
2ui64, | |
(__int64)v3, | |
v4); | |
} | |
// 140021AF0: using guessed type void *off_140021AF0; | |
//----- (000000014001A450) ---------------------------------------------------- | |
__int64 __fastcall sub_14001A450(unsigned int *a1, __int64 a2) | |
{ | |
unsigned int v2; // ecx | |
char *v3; // r9 | |
__int64 v4; // rax | |
unsigned int v5; // r10d | |
char v6; // si | |
bool v7; // cc | |
char v9; // [rsp+B0h] [rbp-8h] BYREF | |
v2 = *a1; | |
v3 = &v9; | |
v4 = 0i64; | |
v5 = v2; | |
do | |
{ | |
v5 >>= 4; | |
v6 = 55; | |
if ( (v2 & 0xF) < 0xA ) | |
v6 = 48; | |
*--v3 = (v2 & 0xF) + v6; | |
++v4; | |
v7 = v2 <= 0xF; | |
v2 = v5; | |
} | |
while ( !v7 ); | |
if ( (unsigned __int64)(128 - v4) >= 0x81 ) | |
sub_14001D030(128 - v4, 128i64, (__int64)&off_140021AF0); | |
return sub_1400174B0( | |
a2, | |
1, | |
"0x00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525" | |
"354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899", | |
2ui64, | |
(__int64)v3, | |
v4); | |
} | |
// 140021AF0: using guessed type void *off_140021AF0; | |
//----- (000000014001A4F0) ---------------------------------------------------- | |
__int64 __fastcall sub_14001A4F0(unsigned __int64 *a1, __int64 a2) | |
{ | |
unsigned __int64 v2; // rcx | |
char *v3; // r9 | |
__int64 v4; // rax | |
unsigned __int64 v5; // r10 | |
char v6; // si | |
bool v7; // cc | |
char v9; // [rsp+B0h] [rbp-8h] BYREF | |
v2 = *a1; | |
v3 = &v9; | |
v4 = 0i64; | |
v5 = v2; | |
do | |
{ | |
v5 >>= 4; | |
v6 = 87; | |
if ( (v2 & 0xF) < 0xA ) | |
v6 = 48; | |
*--v3 = (v2 & 0xF) + v6; | |
++v4; | |
v7 = v2 <= 0xF; | |
v2 = v5; | |
} | |
while ( !v7 ); | |
if ( (unsigned __int64)(128 - v4) >= 0x81 ) | |
sub_14001D030(128 - v4, 128i64, (__int64)&off_140021AF0); | |
return sub_1400174B0( | |
a2, | |
1, | |
"0x00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525" | |
"354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899", | |
2ui64, | |
(__int64)v3, | |
v4); | |
} | |
// 140021AF0: using guessed type void *off_140021AF0; | |
//----- (000000014001A590) ---------------------------------------------------- | |
__int64 __fastcall sub_14001A590(unsigned __int64 *a1, __int64 a2) | |
{ | |
unsigned __int64 v2; // rcx | |
char *v3; // r9 | |
__int64 v4; // rax | |
unsigned __int64 v5; // r10 | |
char v6; // si | |
bool v7; // cc | |
char v9; // [rsp+B0h] [rbp-8h] BYREF | |
v2 = *a1; | |
v3 = &v9; | |
v4 = 0i64; | |
v5 = v2; | |
do | |
{ | |
v5 >>= 4; | |
v6 = 55; | |
if ( (v2 & 0xF) < 0xA ) | |
v6 = 48; | |
*--v3 = (v2 & 0xF) + v6; | |
++v4; | |
v7 = v2 <= 0xF; | |
v2 = v5; | |
} | |
while ( !v7 ); | |
if ( (unsigned __int64)(128 - v4) >= 0x81 ) | |
sub_14001D030(128 - v4, 128i64, (__int64)&off_140021AF0); | |
return sub_1400174B0( | |
a2, | |
1, | |
"0x00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525" | |
"354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899", | |
2ui64, | |
(__int64)v3, | |
v4); | |
} | |
// 140021AF0: using guessed type void *off_140021AF0; | |
//----- (000000014001A630) ---------------------------------------------------- | |
__int64 __fastcall sub_14001A630(unsigned __int8 *a1, __int64 a2) | |
{ | |
int v2; // eax | |
unsigned __int64 v3; // rax | |
__int64 v4; // rcx | |
unsigned __int8 v5; // cl | |
char *v6; // r8 | |
__int64 v7; // rax | |
unsigned __int8 v8; // r10 | |
char v9; // si | |
bool v10; // cc | |
unsigned __int8 v11; // cl | |
unsigned __int8 v12; // r10 | |
char v13; // si | |
char v15[37]; // [rsp+30h] [rbp-88h] BYREF | |
__int16 v16; // [rsp+55h] [rbp-63h] | |
char v17; // [rsp+B0h] [rbp-8h] BYREF | |
v2 = *(_DWORD *)(a2 + 48); | |
if ( (v2 & 0x10) != 0 ) | |
{ | |
v5 = *a1; | |
v6 = &v17; | |
v7 = 0i64; | |
v8 = v5; | |
do | |
{ | |
v8 >>= 4; | |
v9 = 87; | |
if ( (v5 & 0xFu) < 0xA ) | |
v9 = 48; | |
*--v6 = (v5 & 0xF) + v9; | |
++v7; | |
v10 = v5 <= 0xFu; | |
v5 = v8; | |
} | |
while ( !v10 ); | |
} | |
else | |
{ | |
if ( (v2 & 0x20) == 0 ) | |
{ | |
v3 = *a1; | |
if ( v3 <= 0x63 ) | |
{ | |
v4 = 38i64; | |
if ( (unsigned __int8)v3 >= 0xAu ) | |
{ | |
v16 = *(_WORD *)&a0x000102030405[2 * v3 + 2]; | |
v4 = 37i64; | |
return sub_1400174B0( | |
a2, | |
1, | |
"from_str_radix_int: must lie in the range `[2, 36]` - found ", | |
0i64, | |
(__int64)&v15[v4], | |
39 - v4); | |
} | |
} | |
else | |
{ | |
v16 = *(_WORD *)&a0x000102030405[2 * ((unsigned __int8)v3 % 0x64u) + 2]; | |
v4 = 36i64; | |
LOBYTE(v3) = (unsigned __int8)v3 / 0x64u; | |
} | |
v15[v4] = v3 | 0x30; | |
return sub_1400174B0( | |
a2, | |
1, | |
"from_str_radix_int: must lie in the range `[2, 36]` - found ", | |
0i64, | |
(__int64)&v15[v4], | |
39 - v4); | |
} | |
v11 = *a1; | |
v6 = &v17; | |
v7 = 0i64; | |
v12 = v11; | |
do | |
{ | |
v12 >>= 4; | |
v13 = 55; | |
if ( (v11 & 0xFu) < 0xA ) | |
v13 = 48; | |
*--v6 = (v11 & 0xF) + v13; | |
++v7; | |
v10 = v11 <= 0xFu; | |
v11 = v12; | |
} | |
while ( !v10 ); | |
} | |
if ( (unsigned __int64)(128 - v7) >= 0x81 ) | |
sub_14001D030(128 - v7, 128i64, (__int64)&off_140021AF0); | |
return sub_1400174B0( | |
a2, | |
1, | |
"0x00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525" | |
"354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899", | |
2ui64, | |
(__int64)v6, | |
v7); | |
} | |
// 140021AF0: using guessed type void *off_140021AF0; | |
// 14001A630: using guessed type char var_88[37]; | |
//----- (000000014001A7D0) ---------------------------------------------------- | |
__int64 __fastcall sub_14001A7D0(unsigned __int64 *a1, __int64 a2) | |
{ | |
int v3; // eax | |
unsigned __int64 v4; // rcx | |
__int64 v5; // rax | |
__int64 v6; // r11 | |
unsigned __int64 v7; // rdx | |
int v8; // esi | |
bool v9; // cc | |
__int64 v10; // rax | |
unsigned __int64 v11; // rcx | |
char *v12; // r8 | |
__int64 v13; // rax | |
unsigned __int64 v14; // r9 | |
char v15; // si | |
unsigned __int64 v16; // rcx | |
unsigned __int64 v17; // r9 | |
char v18; // si | |
__int16 v20[66]; // [rsp+34h] [rbp-94h] BYREF | |
char v21[16]; // [rsp+B8h] [rbp-10h] BYREF | |
v3 = *(_DWORD *)(a2 + 48); | |
if ( (v3 & 0x10) != 0 ) | |
{ | |
v11 = *a1; | |
v12 = v21; | |
v13 = 0i64; | |
v14 = v11; | |
do | |
{ | |
v14 >>= 4; | |
v15 = 87; | |
if ( (v11 & 0xF) < 0xA ) | |
v15 = 48; | |
*--v12 = (v11 & 0xF) + v15; | |
++v13; | |
v9 = v11 <= 0xF; | |
v11 = v14; | |
} | |
while ( !v9 ); | |
} | |
else | |
{ | |
if ( (v3 & 0x20) == 0 ) | |
{ | |
v4 = *a1; | |
v5 = 39i64; | |
if ( v4 < 0x2710 ) | |
{ | |
v7 = v4; | |
if ( v4 <= 0x63 ) | |
goto LABEL_8; | |
} | |
else | |
{ | |
v6 = 39i64; | |
do | |
{ | |
v7 = v4 / 0x2710; | |
v8 = v4 % 0x2710; | |
v5 = v6 - 4; | |
*(__int16 *)((char *)v20 + v6) = *(_WORD *)&a0x000102030405[2 * ((unsigned int)(5243 * v8) >> 19) + 2]; | |
*(__int16 *)((char *)&v20[1] + v6) = *(_WORD *)&a0x000102030405[2 | |
* (unsigned __int16)(v8 | |
- 100 | |
* ((unsigned __int16)((unsigned int)(5243 * v8) >> 16) >> 3)) | |
+ 2]; | |
v6 -= 4i64; | |
v9 = v4 <= 0x5F5E0FF; | |
v4 /= 0x2710ui64; | |
} | |
while ( !v9 ); | |
if ( v7 <= 0x63 ) | |
{ | |
LABEL_8: | |
if ( v7 >= 0xA ) | |
{ | |
*(__int16 *)((char *)&v20[1] + v5) = *(_WORD *)&a0x000102030405[2 * v7 + 2]; | |
v10 = v5 - 2; | |
} | |
else | |
{ | |
*((_BYTE *)&v20[1] + v5 + 1) = v7 + 48; | |
v10 = v5 - 1; | |
} | |
return sub_1400174B0( | |
a2, | |
1, | |
"from_str_radix_int: must lie in the range `[2, 36]` - found ", | |
0i64, | |
(__int64)&v20[2] + v10, | |
39 - v10); | |
} | |
} | |
*(__int16 *)((char *)&v20[1] + v5) = *(_WORD *)&a0x000102030405[2 * ((unsigned __int16)v7 % 0x64u) + 2]; | |
v5 -= 2i64; | |
v7 = (unsigned int)(5243 * ((unsigned __int16)v7 >> 2)) >> 17; | |
goto LABEL_8; | |
} | |
v16 = *a1; | |
v12 = v21; | |
v13 = 0i64; | |
v17 = v16; | |
do | |
{ | |
v17 >>= 4; | |
v18 = 55; | |
if ( (v16 & 0xF) < 0xA ) | |
v18 = 48; | |
*--v12 = (v16 & 0xF) + v18; | |
++v13; | |
v9 = v16 <= 0xF; | |
v16 = v17; | |
} | |
while ( !v9 ); | |
} | |
if ( (unsigned __int64)(128 - v13) >= 0x81 ) | |
sub_14001D030(128 - v13, 128i64, (__int64)&off_140021AF0); | |
return sub_1400174B0( | |
a2, | |
1, | |
"0x00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525" | |
"354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899", | |
2ui64, | |
(__int64)v12, | |
v13); | |
} | |
// 140021AF0: using guessed type void *off_140021AF0; | |
//----- (000000014001AA00) ---------------------------------------------------- | |
__int64 __fastcall sub_14001AA00(unsigned __int8 *a1, __int64 a2) | |
{ | |
unsigned __int64 v2; // rax | |
__int64 v3; // rcx | |
char v5[37]; // [rsp+31h] [rbp-27h] BYREF | |
__int16 v6; // [rsp+56h] [rbp-2h] | |
v2 = *a1; | |
if ( v2 <= 0x63 ) | |
{ | |
v3 = 38i64; | |
if ( (unsigned __int8)v2 >= 0xAu ) | |
{ | |
v6 = *(_WORD *)&a0x000102030405[2 * v2 + 2]; | |
v3 = 37i64; | |
return sub_1400174B0( | |
a2, | |
1, | |
"from_str_radix_int: must lie in the range `[2, 36]` - found ", | |
0i64, | |
(__int64)&v5[v3], | |
39 - v3); | |
} | |
} | |
else | |
{ | |
v6 = *(_WORD *)&a0x000102030405[2 * ((unsigned __int8)v2 % 0x64u) + 2]; | |
v3 = 36i64; | |
LOBYTE(v2) = (unsigned __int8)v2 / 0x64u; | |
} | |
v5[v3] = v2 | 0x30; | |
return sub_1400174B0( | |
a2, | |
1, | |
"from_str_radix_int: must lie in the range `[2, 36]` - found ", | |
0i64, | |
(__int64)&v5[v3], | |
39 - v3); | |
} | |
// 14001AA00: using guessed type char var_27[37]; | |
//----- (000000014001AAA0) ---------------------------------------------------- | |
__int64 __fastcall sub_14001AAA0(unsigned int *a1, __int64 a2) | |
{ | |
__int64 v2; // r9 | |
unsigned __int64 v3; // r8 | |
__int64 v5; // rax | |
__int64 v6; // rsi | |
unsigned __int64 v7; // rdx | |
int v8; // edi | |
bool v9; // cc | |
__int64 v10; // rax | |
__int16 v12[33]; // [rsp+35h] [rbp-43h] BYREF | |
v2 = (int)*a1; | |
v3 = *a1; | |
if ( v2 < 0 ) | |
v3 = -(__int64)(int)*a1; | |
v5 = 39i64; | |
if ( v3 >= 0x2710 ) | |
{ | |
v6 = 39i64; | |
do | |
{ | |
v7 = v3 / 0x2710; | |
v8 = v3 % 0x2710; | |
v5 = v6 - 4; | |
*(__int16 *)((char *)v12 + v6) = *(_WORD *)&a0x000102030405[2 * ((unsigned int)(5243 * v8) >> 19) + 2]; | |
*(__int16 *)((char *)&v12[1] + v6) = *(_WORD *)&a0x000102030405[2 | |
* (unsigned __int16)(v8 | |
- 100 | |
* ((unsigned __int16)((unsigned int)(5243 * v8) >> 16) >> 3)) | |
+ 2]; | |
v6 -= 4i64; | |
v9 = v3 <= 0x5F5E0FF; | |
v3 /= 0x2710ui64; | |
} | |
while ( !v9 ); | |
if ( v7 <= 0x63 ) | |
goto LABEL_8; | |
goto LABEL_7; | |
} | |
v7 = v3; | |
if ( v3 > 0x63 ) | |
{ | |
LABEL_7: | |
*(__int16 *)((char *)&v12[1] + v5) = *(_WORD *)&a0x000102030405[2 * ((unsigned __int16)v7 % 0x64u) + 2]; | |
v5 -= 2i64; | |
v7 = (unsigned int)(5243 * ((unsigned __int16)v7 >> 2)) >> 17; | |
} | |
LABEL_8: | |
if ( v7 >= 0xA ) | |
{ | |
*(__int16 *)((char *)&v12[1] + v5) = *(_WORD *)&a0x000102030405[2 * v7 + 2]; | |
v10 = v5 - 2; | |
} | |
else | |
{ | |
*((_BYTE *)&v12[1] + v5 + 1) = v7 + 48; | |
v10 = v5 - 1; | |
} | |
return sub_1400174B0( | |
a2, | |
(int)v2 >= 0, | |
"from_str_radix_int: must lie in the range `[2, 36]` - found ", | |
0i64, | |
(__int64)&v12[2] + v10, | |
39 - v10); | |
} | |
//----- (000000014001ABE0) ---------------------------------------------------- | |
__int64 __fastcall sub_14001ABE0(unsigned int *a1, __int64 a2) | |
{ | |
unsigned __int64 v3; // rcx | |
__int64 v4; // rax | |
__int64 v5; // r11 | |
unsigned __int64 v6; // rdx | |
int v7; // esi | |
bool v8; // cc | |
__int64 v9; // rax | |
__int16 v11[29]; // [rsp+2Dh] [rbp-3Bh] BYREF | |
v3 = *a1; | |
v4 = 39i64; | |
if ( v3 >= 0x2710 ) | |
{ | |
v5 = 39i64; | |
do | |
{ | |
v6 = v3 / 0x2710; | |
v7 = v3 % 0x2710; | |
v4 = v5 - 4; | |
*(__int16 *)((char *)v11 + v5) = *(_WORD *)&a0x000102030405[2 * ((unsigned int)(5243 * v7) >> 19) + 2]; | |
*(__int16 *)((char *)&v11[1] + v5) = *(_WORD *)&a0x000102030405[2 | |
* (unsigned __int16)(v7 | |
- 100 | |
* ((unsigned __int16)((unsigned int)(5243 * v7) >> 16) >> 3)) | |
+ 2]; | |
v5 -= 4i64; | |
v8 = v3 <= 0x5F5E0FF; | |
v3 /= 0x2710ui64; | |
} | |
while ( !v8 ); | |
if ( v6 <= 0x63 ) | |
goto LABEL_6; | |
goto LABEL_5; | |
} | |
v6 = v3; | |
if ( v3 > 0x63 ) | |
{ | |
LABEL_5: | |
*(__int16 *)((char *)&v11[1] + v4) = *(_WORD *)&a0x000102030405[2 * ((unsigned __int16)v6 % 0x64u) + 2]; | |
v4 -= 2i64; | |
v6 = (unsigned int)(5243 * ((unsigned __int16)v6 >> 2)) >> 17; | |
} | |
LABEL_6: | |
if ( v6 >= 0xA ) | |
{ | |
*(__int16 *)((char *)&v11[1] + v4) = *(_WORD *)&a0x000102030405[2 * v6 + 2]; | |
v9 = v4 - 2; | |
} | |
else | |
{ | |
*((_BYTE *)&v11[1] + v4 + 1) = v6 + 48; | |
v9 = v4 - 1; | |
} | |
return sub_1400174B0( | |
a2, | |
1, | |
"from_str_radix_int: must lie in the range `[2, 36]` - found ", | |
0i64, | |
(__int64)&v11[2] + v9, | |
39 - v9); | |
} | |
//----- (000000014001AD00) ---------------------------------------------------- | |
__int64 __fastcall sub_14001AD00(unsigned __int64 *a1, __int64 a2) | |
{ | |
unsigned __int64 v3; // rcx | |
__int64 v4; // rax | |
__int64 v5; // r11 | |
unsigned __int64 v6; // rdx | |
int v7; // esi | |
bool v8; // cc | |
__int64 v9; // rax | |
__int16 v11[29]; // [rsp+2Dh] [rbp-3Bh] BYREF | |
v3 = *a1; | |
v4 = 39i64; | |
if ( v3 >= 0x2710 ) | |
{ | |
v5 = 39i64; | |
do | |
{ | |
v6 = v3 / 0x2710; | |
v7 = v3 % 0x2710; | |
v4 = v5 - 4; | |
*(__int16 *)((char *)v11 + v5) = *(_WORD *)&a0x000102030405[2 * ((unsigned int)(5243 * v7) >> 19) + 2]; | |
*(__int16 *)((char *)&v11[1] + v5) = *(_WORD *)&a0x000102030405[2 | |
* (unsigned __int16)(v7 | |
- 100 | |
* ((unsigned __int16)((unsigned int)(5243 * v7) >> 16) >> 3)) | |
+ 2]; | |
v5 -= 4i64; | |
v8 = v3 <= 0x5F5E0FF; | |
v3 /= 0x2710ui64; | |
} | |
while ( !v8 ); | |
if ( v6 <= 0x63 ) | |
goto LABEL_6; | |
goto LABEL_5; | |
} | |
v6 = v3; | |
if ( v3 > 0x63 ) | |
{ | |
LABEL_5: | |
*(__int16 *)((char *)&v11[1] + v4) = *(_WORD *)&a0x000102030405[2 * ((unsigned __int16)v6 % 0x64u) + 2]; | |
v4 -= 2i64; | |
v6 = (unsigned int)(5243 * ((unsigned __int16)v6 >> 2)) >> 17; | |
} | |
LABEL_6: | |
if ( v6 >= 0xA ) | |
{ | |
*(__int16 *)((char *)&v11[1] + v4) = *(_WORD *)&a0x000102030405[2 * v6 + 2]; | |
v9 = v4 - 2; | |
} | |
else | |
{ | |
*((_BYTE *)&v11[1] + v4 + 1) = v6 + 48; | |
v9 = v4 - 1; | |
} | |
return sub_1400174B0( | |
a2, | |
1, | |
"from_str_radix_int: must lie in the range `[2, 36]` - found ", | |
0i64, | |
(__int64)&v11[2] + v9, | |
39 - v9); | |
} | |
//----- (000000014001AE40) ---------------------------------------------------- | |
__int64 __fastcall sub_14001AE40(unsigned __int8 **a1, __int64 a2) | |
{ | |
return sub_14001A630(*a1, a2); | |
} | |
//----- (000000014001AE50) ---------------------------------------------------- | |
__int64 __fastcall sub_14001AE50(_BYTE **a1, _QWORD *a2) | |
{ | |
unsigned __int8 v3; // al | |
unsigned int v4; // ebx | |
_QWORD *v5; // rsi | |
__int64 v7; // [rsp+28h] [rbp-30h] BYREF | |
_QWORD *v8; // [rsp+30h] [rbp-28h] | |
unsigned __int8 v9; // [rsp+38h] [rbp-20h] | |
char v10; // [rsp+39h] [rbp-1Fh] | |
__int64 v11[3]; // [rsp+40h] [rbp-18h] BYREF | |
if ( !**a1 ) | |
return (*(__int64 (__fastcall **)(_QWORD, char *, __int64))(a2[1] + 24i64))( | |
*a2, | |
"NoneErrorUtf8Errorvalid_up_toerror_len", | |
4i64); | |
v11[0] = (__int64)(*a1 + 1); | |
v3 = (*(__int64 (__fastcall **)(_QWORD, const char *, __int64))(a2[1] + 24i64))( | |
*a2, | |
"SomeNoneErrorUtf8Errorvalid_up_toerror_len", | |
4i64); | |
v8 = a2; | |
v9 = v3; | |
v7 = 0i64; | |
v10 = 0; | |
sub_140016D90(&v7, (__int64)v11, (__int64)&off_140021AB0); | |
v4 = v9; | |
if ( v7 ) | |
{ | |
LOBYTE(v4) = 1; | |
if ( !v9 ) | |
{ | |
v5 = v8; | |
if ( v7 != 1 | |
|| !v10 | |
|| (v8[6] & 4) != 0 | |
|| !(*(unsigned __int8 (__fastcall **)(_QWORD, char *, __int64))(v8[1] + 24i64))(*v8, ",\n", 1i64) ) | |
{ | |
return (*(unsigned int (__fastcall **)(_QWORD, void *, __int64))(v5[1] + 24i64))(*v5, &unk_1400217F8, 1i64); | |
} | |
} | |
} | |
return v4; | |
} | |
// 140021AB0: using guessed type __int64 (__fastcall *off_140021AB0)(); | |
// 14001AE50: using guessed type __int64 var_18[3]; | |
//----- (000000014001AF40) ---------------------------------------------------- | |
__int64 __fastcall sub_14001AF40(_QWORD *a1) | |
{ | |
return (*(__int64 (__fastcall **)(_QWORD))(a1[1] + 24i64))(*a1); | |
} | |
//----- (000000014001AF60) ---------------------------------------------------- | |
__int64 __fastcall sub_14001AF60(unsigned __int8 **a1, _QWORD *a2) | |
{ | |
return (*(__int64 (__fastcall **)(_QWORD, _QWORD, _QWORD))(a2[1] + 24i64))( | |
*a2, | |
*(&off_140022C90 + **a1), | |
qword_140022C68[**a1]); | |
} | |
// 140022C68: using guessed type _QWORD qword_140022C68[5]; | |
// 140022C90: using guessed type void *off_140022C90; | |
//----- (000000014001AF90) ---------------------------------------------------- | |
bool __fastcall sub_14001AF90(__int64 **a1, __int64 *a2) | |
{ | |
return sub_1400172A0(*a2, a2[1], *a1); | |
} | |
//----- (000000014001AFA0) ---------------------------------------------------- | |
__int64 __fastcall sub_14001AFA0(__int64 a1, __int64 *a2) | |
{ | |
return sub_140017890(a2, *(unsigned __int8 **)a1, *(_QWORD *)(a1 + 8)); | |
} | |
//----- (000000014001AFC0) ---------------------------------------------------- | |
__int64 __fastcall sub_14001AFC0(unsigned __int8 ***a1, __int64 *a2) | |
{ | |
return sub_140017890(a2, **a1, (unsigned __int64)(*a1)[1]); | |
} | |
//----- (000000014001AFE0) ---------------------------------------------------- | |
char __fastcall sub_14001AFE0(__int64 a1, _QWORD *a2) | |
{ | |
char v4; // al | |
char result; // al | |
char *v6; // rdx | |
__int64 v7; // r8 | |
_QWORD *v8; // [rsp+30h] [rbp-28h] BYREF | |
char v9; // [rsp+38h] [rbp-20h] | |
char v10; // [rsp+39h] [rbp-1Fh] | |
__int64 v11[3]; // [rsp+40h] [rbp-18h] BYREF | |
v11[0] = a1 + 8; | |
v4 = (*(__int64 (__fastcall **)(_QWORD, char *, __int64))(a2[1] + 24i64))(*a2, "Utf8Errorvalid_up_toerror_len", 9i64); | |
v8 = a2; | |
v9 = v4; | |
v10 = 0; | |
sub_140016B60(&v8, (__int64)"valid_up_toerror_len", 0xBui64, a1, (__int64)&off_140022700); | |
sub_140016B60(&v8, (__int64)"error_len", 9ui64, (__int64)v11, (__int64)&off_1400227B0); | |
if ( !v10 ) | |
return v9 != 0; | |
result = 1; | |
if ( !v9 ) | |
{ | |
if ( (v8[6] & 4) != 0 ) | |
{ | |
v6 = "} }(\n(,\n"; | |
v7 = 1i64; | |
} | |
else | |
{ | |
v6 = " }(\n(,\n"; | |
v7 = 2i64; | |
} | |
return (*(__int64 (__fastcall **)(_QWORD, char *, __int64))(v8[1] + 24i64))(*v8, v6, v7); | |
} | |
return result; | |
} | |
// 140022700: using guessed type __int64 (__fastcall *off_140022700)(); | |
// 1400227B0: using guessed type __int64 (__fastcall *off_1400227B0)(); | |
// 14001AFE0: using guessed type __int64 var_18[3]; | |
//----- (000000014001B0D0) ---------------------------------------------------- | |
bool __fastcall sub_14001B0D0(unsigned int a1) | |
{ | |
if ( a1 << 11 >= 0x88050000 ) | |
sub_14001CD00(1i64, 1i64, (__int64)&off_1400227D0); | |
return a1 < 0x20 || a1 - 127 < 0x21; | |
} | |
// 1400227D0: using guessed type char *off_1400227D0; | |
//----- (000000014001B110) ---------------------------------------------------- | |
char __fastcall sub_14001B110(int a1) | |
{ | |
unsigned int v1; // r8d | |
unsigned __int64 v2; // rax | |
unsigned __int64 v3; // r9 | |
int v4; // r10d | |
unsigned __int64 v5; // r11 | |
bool v6; // cc | |
unsigned __int64 v7; // rax | |
unsigned int v8; // edi | |
unsigned __int8 v9; // si | |
unsigned __int64 v10; // rax | |
unsigned __int64 v11; // rax | |
unsigned __int64 v12; // r8 | |
int v13; // edx | |
unsigned int v14; // ecx | |
unsigned __int64 v15; // r8 | |
unsigned int v16; // edx | |
unsigned __int64 v17; // r10 | |
v1 = a1 << 11; | |
v2 = 33i64; | |
v3 = 0i64; | |
v4 = 255; | |
v5 = 33i64; | |
while ( 1 ) | |
{ | |
while ( 1 ) | |
{ | |
v7 = v3 + (v2 >> 1); | |
v8 = dword_140022800[v7] << 11; | |
v9 = v8 != v1; | |
if ( v8 < v1 ) | |
v9 = -1; | |
if ( v9 != 1 ) | |
break; | |
v5 = v7; | |
v6 = v7 <= v3; | |
v2 = v7 - v3; | |
if ( v6 ) | |
goto LABEL_10; | |
} | |
v10 = v7 + 1; | |
if ( v9 != 255 ) | |
break; | |
v3 = v10; | |
v2 = v5 - v10; | |
if ( v5 <= v3 ) | |
goto LABEL_10; | |
} | |
v3 = v10; | |
LABEL_10: | |
if ( v3 > 0x20 ) | |
sub_14001CD00(v3, 33i64, (__int64)&off_1400227D0); | |
v11 = (unsigned __int64)dword_140022800[v3] >> 21; | |
v12 = 727i64; | |
if ( v3 == 32 || (v12 = (unsigned __int64)dword_140022800[v3 + 1] >> 21, v3) ) | |
{ | |
v4 = dword_140022800[v3 - 1] & 0x1FFFFF; | |
v13 = 1; | |
} | |
else | |
{ | |
v13 = 0; | |
} | |
if ( !v13 ) | |
v4 = 0; | |
if ( v12 + ~v11 ) | |
{ | |
v14 = a1 - v4; | |
v15 = v12 - 1; | |
v16 = 0; | |
v17 = (unsigned __int64)dword_140022800[v3] >> 21; | |
while ( 1 ) | |
{ | |
if ( v17 > 0x2D6 ) | |
{ | |
if ( v11 < 0x2D8 ) | |
v11 = 727i64; | |
sub_14001CD00(v11, 727i64, (__int64)&off_1400227E8); | |
} | |
v16 += byte_140022884[v17]; | |
if ( v16 > v14 ) | |
break; | |
if ( v15 == ++v17 ) | |
{ | |
LOBYTE(v11) = v15; | |
return v11 & 1; | |
} | |
} | |
LOBYTE(v11) = v17; | |
} | |
return v11 & 1; | |
} | |
// 1400227D0: using guessed type char *off_1400227D0; | |
// 1400227E8: using guessed type char *off_1400227E8; | |
// 140022800: using guessed type unsigned int dword_140022800[33]; | |
// 140022884: using guessed type unsigned __int8 byte_140022884[727]; | |
//----- (000000014001B580) ---------------------------------------------------- | |
_QWORD *__fastcall sub_14001B580(_QWORD *a1, char a2) | |
{ | |
*a1 = &type_info::`vftable'; | |
if ( (a2 & 1) != 0 ) | |
j_j_free(a1); | |
return a1; | |
} | |
// 140022CC0: using guessed type void *type_info::`vftable'; | |
//----- (000000014001B7FC) ---------------------------------------------------- | |
__int64 sub_14001B7FC() | |
{ | |
uintptr_t v0; // rax | |
__int64 result; // rax | |
unsigned __int64 v2; // [rsp+20h] [rbp-10h] BYREF | |
struct _FILETIME SystemTimeAsFileTime; // [rsp+40h] [rbp+10h] BYREF | |
LARGE_INTEGER PerformanceCount; // [rsp+48h] [rbp+18h] BYREF | |
v0 = _security_cookie; | |
if ( _security_cookie == 0x2B992DDFA232i64 ) | |
{ | |
SystemTimeAsFileTime = 0i64; | |
GetSystemTimeAsFileTime(&SystemTimeAsFileTime); | |
v2 = (unsigned __int64)SystemTimeAsFileTime; | |
v2 ^= GetCurrentThreadId(); | |
v2 ^= GetCurrentProcessId(); | |
QueryPerformanceCounter(&PerformanceCount); | |
v0 = ((unsigned __int64)&v2 ^ v2 ^ PerformanceCount.QuadPart ^ ((unsigned __int64)PerformanceCount.LowPart << 32)) & 0xFFFFFFFFFFFFi64; | |
if ( v0 == 0x2B992DDFA232i64 ) | |
v0 = 0x2B992DDFA233i64; | |
_security_cookie = v0; | |
} | |
result = ~v0; | |
qword_1400270D8 = result; | |
return result; | |
} | |
// 1400270D8: using guessed type __int64 qword_1400270D8; | |
//----- (000000014001B8A8) ---------------------------------------------------- | |
__int64 __fastcall UserMathErrorFunction(struct _exception *a1) | |
{ | |
return 0i64; | |
} | |
//----- (000000014001B8BC) ---------------------------------------------------- | |
void sub_14001B8BC() | |
{ | |
InitializeSListHead(&stru_1400272C0); | |
} | |
// 1400272C0: using guessed type union _SLIST_HEADER stru_1400272C0; | |
//----- (000000014001B8D0) ---------------------------------------------------- | |
void *sub_14001B8D0() | |
{ | |
return &unk_1400272D0; | |
} | |
//----- (000000014001B8D8) ---------------------------------------------------- | |
void *sub_14001B8D8() | |
{ | |
return &unk_1400272D8; | |
} | |
//----- (000000014001B908) ---------------------------------------------------- | |
void *sub_14001B908() | |
{ | |
return &unk_1400272F0; | |
} | |
//----- (000000014001B910) ---------------------------------------------------- | |
void *sub_14001B910() | |
{ | |
return &unk_1400272E8; | |
} | |
//----- (000000014001B918) ---------------------------------------------------- | |
void sub_14001B918() | |
{ | |
dword_1400272E0 = 0; | |
} | |
// 1400272E0: using guessed type int dword_1400272E0; | |
//----- (000000014001BB34) ---------------------------------------------------- | |
void sub_14001BB34() | |
{ | |
void (**i)(void); // rbx | |
for ( i = qword_140023368; i < qword_140023368; ++i ) | |
{ | |
if ( *i ) | |
(*i)(); | |
} | |
} | |
// 140023368: using guessed type void (*qword_140023368[2])(void); | |
//----- (000000014001BB70) ---------------------------------------------------- | |
void __fastcall sub_14001BB70() | |
{ | |
void (**i)(void); // rbx | |
for ( i = &qword_140023378; i < &qword_140023378; ++i ) | |
{ | |
if ( *i ) | |
(*i)(); | |
} | |
} | |
// 140023378: using guessed type void (*qword_140023378)(void); | |
//----- (000000014001BE80) ---------------------------------------------------- | |
bool __fastcall sub_14001BE80(_QWORD *_RCX, __int64 a2, int _R8D, char a4) | |
{ | |
bool result; // al | |
__int64 v5; // rdx | |
__int64 v6; // r9 | |
_BYTE *v7; // r10 | |
unsigned __int64 v8; // r11 | |
__int64 v9; // rax | |
int v10; // r10d | |
__int64 v11; // r9 | |
_DWORD *v12; // r11 | |
_DWORD *v13; // rsi | |
_DWORD *v14; // rdi | |
char *v15; // rsi | |
result = 0; | |
if ( (_WORD)_R8D && !a4 ) | |
{ | |
v5 = a2 + 1; | |
v6 = *_RCX; | |
v7 = (_BYTE *)_RCX[2]; | |
v8 = _RCX[3]; | |
v9 = v8 - 4; | |
if ( v8 < 4 ) | |
{ | |
while ( 1 ) | |
{ | |
result = 1; | |
if ( !v8 ) | |
break; | |
__asm { tzcnt ecx, r8d } | |
v15 = (char *)_RCX + v5; | |
if ( *((_BYTE *)_RCX + v5 + v6) == *v7 && (v8 == 1 || v15[v6 + 1] == v7[1] && (v8 == 2 || v15[v6 + 2] == v7[2])) ) | |
break; | |
LOWORD(_R8D) = __ROL2__(-2, (char)_RCX) & _R8D; | |
if ( !(_WORD)_R8D ) | |
return 0; | |
} | |
} | |
else if ( v9 > 0 ) | |
{ | |
LABEL_10: | |
__asm { tzcnt ecx, r8d } | |
v12 = (_DWORD *)((char *)_RCX + v5 + v6); | |
v13 = (_DWORD *)((char *)v12 + v9); | |
v14 = v7; | |
do | |
{ | |
if ( *v12 != *v14 ) | |
{ | |
LABEL_9: | |
LOWORD(_R8D) = __ROL2__(-2, (char)_RCX) & _R8D; | |
if ( !(_WORD)_R8D ) | |
return 0; | |
goto LABEL_10; | |
} | |
++v12; | |
++v14; | |
} | |
while ( v12 < v13 ); | |
if ( *v13 != *(_DWORD *)&v7[v9] ) | |
goto LABEL_9; | |
return 1; | |
} | |
else | |
{ | |
v10 = *(_DWORD *)&v7[v9]; | |
v11 = v9 + v6; | |
do | |
{ | |
__asm { tzcnt ecx, r8d } | |
result = *(_DWORD *)((char *)_RCX + v5 + v11) == v10; | |
if ( *(_DWORD *)((char *)_RCX + v5 + v11) == v10 ) | |
break; | |
LOWORD(_R8D) = __ROL2__(-2, (char)_RCX) & _R8D; | |
} | |
while ( (_WORD)_R8D ); | |
} | |
} | |
return result; | |
} | |
// 14001BF9F: conditional instruction was optimized away because r11.8==3 | |
//----- (000000014001BFB0) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14001BFB0(__int64 a1, __int64 a2, __int128 *a3, __int64 a4) | |
{ | |
__int128 v4; // xmm0 | |
__int128 v5; // xmm1 | |
__int64 v6; // [rsp+40h] [rbp-48h] BYREF | |
__int64 v7; // [rsp+48h] [rbp-40h] BYREF | |
__int128 v8[3]; // [rsp+50h] [rbp-38h] BYREF | |
v6 = a1; | |
v7 = a2; | |
v4 = *a3; | |
v5 = a3[1]; | |
v8[2] = a3[2]; | |
v8[1] = v5; | |
v8[0] = v4; | |
sub_14001CDA0(0, (__int64)&v6, (__int64)&off_14001E6E0, (__int64)&v7, (__int64)&off_14001E6E0, v8, a4); | |
} | |
// 14001E6E0: using guessed type __int64 (__fastcall *off_14001E6E0)(); | |
//----- (000000014001C010) ---------------------------------------------------- | |
__int64 __fastcall sub_14001C010(unsigned __int64 *a1, __int64 a2, __int64 a3) | |
{ | |
bool v3; // cf | |
unsigned __int64 v4; // rdx | |
unsigned __int64 v6; // rcx | |
unsigned __int64 v7; // rdi | |
__int64 result; // rax | |
__int64 v9[2]; // [rsp+28h] [rbp-40h] BYREF | |
__int64 v10; // [rsp+38h] [rbp-30h] | |
__int64 v11[2]; // [rsp+40h] [rbp-28h] BYREF | |
__int64 v12; // [rsp+50h] [rbp-18h] | |
v3 = __CFADD__(a3, a2); | |
v4 = a3 + a2; | |
if ( v3 ) | |
LABEL_12: | |
sub_140015AA0(); | |
v6 = *a1; | |
if ( 2 * v6 > v4 ) | |
v4 = 2 * v6; | |
v7 = 4i64; | |
if ( v4 >= 5 ) | |
v7 = v4; | |
if ( v6 ) | |
{ | |
v9[0] = a1[1]; | |
v9[1] = 2 * v6; | |
v10 = 2i64; | |
} | |
else | |
{ | |
v10 = 0i64; | |
} | |
result = sub_140002F90(v11, 2 * v7, 2i64 * (v7 >> 62 == 0), (__int64)v9); | |
if ( v11[0] ) | |
{ | |
result = 0x8000000000000001ui64; | |
if ( v12 != 0x8000000000000001ui64 ) | |
{ | |
if ( v12 ) | |
sub_14001CB30(); | |
goto LABEL_12; | |
} | |
} | |
else | |
{ | |
a1[1] = v11[1]; | |
*a1 = v7; | |
} | |
return result; | |
} | |
//----- (000000014001C0D0) ---------------------------------------------------- | |
__int64 __fastcall sub_14001C0D0(__int64 *a1, __int64 a2, __int64 a3) | |
{ | |
bool v3; // cf | |
unsigned __int64 v4; // rdx | |
__int64 v6; // rax | |
unsigned __int64 v7; // rcx | |
__int64 v8; // rdi | |
__int64 result; // rax | |
__int64 v10[2]; // [rsp+28h] [rbp-40h] BYREF | |
__int64 v11; // [rsp+38h] [rbp-30h] | |
__int64 v12[2]; // [rsp+40h] [rbp-28h] BYREF | |
__int64 v13; // [rsp+50h] [rbp-18h] | |
v3 = __CFADD__(a3, a2); | |
v4 = a3 + a2; | |
if ( v3 ) | |
LABEL_12: | |
sub_140015AA0(); | |
v6 = *a1; | |
v7 = 2 * *a1; | |
if ( v7 > v4 ) | |
v4 = v7; | |
v8 = 8i64; | |
if ( v4 >= 9 ) | |
v8 = v4; | |
if ( v6 ) | |
{ | |
v10[0] = a1[1]; | |
v10[1] = v6; | |
v11 = 1i64; | |
} | |
else | |
{ | |
v11 = 0i64; | |
} | |
result = sub_140002F90(v12, v8, v8 >= 0, (__int64)v10); | |
if ( v12[0] ) | |
{ | |
result = 0x8000000000000001ui64; | |
if ( v13 != 0x8000000000000001ui64 ) | |
{ | |
if ( v13 ) | |
sub_14001CB30(); | |
goto LABEL_12; | |
} | |
} | |
else | |
{ | |
a1[1] = v12[1]; | |
*a1 = v8; | |
} | |
return result; | |
} | |
//----- (000000014001C190) ---------------------------------------------------- | |
void __noreturn sub_14001C190() | |
{ | |
__int64 v0[6]; // [rsp+28h] [rbp-30h] BYREF | |
v0[2] = (__int64)&off_14001EB68; | |
v0[3] = 1i64; | |
v0[0] = 0i64; | |
v0[4] = (__int64)"/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v0[5] = 0i64; | |
sub_14001CBB0((__int64)v0, (__int64)&off_14001EB78); | |
} | |
// 14001EB68: using guessed type char *off_14001EB68; | |
// 14001EB78: using guessed type void *off_14001EB78; | |
//----- (000000014001C1E0) ---------------------------------------------------- | |
__int64 __fastcall sub_14001C1E0(__int64 a1, unsigned __int8 *a2, unsigned __int64 a3) | |
{ | |
unsigned __int64 v6; // rax | |
__int64 result; // rax | |
__int64 v8; // r14 | |
char **v9; // rax | |
v6 = *(_QWORD *)a1; | |
if ( *(_QWORD *)a1 - *(_QWORD *)(a1 + 16) < a3 ) | |
{ | |
result = sub_140004570(a1); | |
if ( result ) | |
return result; | |
v6 = *(_QWORD *)a1; | |
} | |
if ( v6 <= a3 ) | |
{ | |
*(_BYTE *)(a1 + 29) = 1; | |
v9 = sub_140005AB0((unsigned __int8 *)(a1 + 24), a2, a3); | |
result = sub_140005010((__int64)v9); | |
*(_BYTE *)(a1 + 29) = 0; | |
} | |
else | |
{ | |
v8 = *(_QWORD *)(a1 + 16); | |
memcpy((void *)(v8 + *(_QWORD *)(a1 + 8)), a2, a3); | |
*(_QWORD *)(a1 + 16) = a3 + v8; | |
return 0i64; | |
} | |
return result; | |
} | |
//----- (000000014001C260) ---------------------------------------------------- | |
signed __int64 sub_14001C260() | |
{ | |
signed __int64 result; // rax | |
char v1; // [rsp+28h] [rbp-20h] BYREF | |
__int64 *v2; // [rsp+30h] [rbp-18h] BYREF | |
__int64 v3[2]; // [rsp+38h] [rbp-10h] BYREF | |
result = qword_140027178; | |
if ( qword_140027178 != 3 ) | |
{ | |
v3[0] = (__int64)&SRWLock; | |
v3[1] = (__int64)&v1; | |
v2 = v3; | |
return sub_14001C3B0(&qword_140027178, 1, (__int64)&v2, (__int64)&off_14001F398, (__int64)&off_14001F380); | |
} | |
return result; | |
} | |
// 14001F380: using guessed type char *off_14001F380; | |
// 14001F398: using guessed type __int64 (__fastcall *off_14001F398)(); | |
// 140027178: using guessed type __int64 qword_140027178; | |
//----- (000000014001C2D0) ---------------------------------------------------- | |
signed __int64 __fastcall sub_14001C2D0(__int64 a1) | |
{ | |
signed __int64 result; // rax | |
char v2; // [rsp+30h] [rbp-28h] BYREF | |
__int64 *v3; // [rsp+38h] [rbp-20h] BYREF | |
__int64 v4[3]; // [rsp+40h] [rbp-18h] BYREF | |
result = qword_140027178; | |
if ( qword_140027178 != 3 ) | |
{ | |
v4[0] = a1; | |
v4[1] = (__int64)&SRWLock; | |
v4[2] = (__int64)&v2; | |
v3 = v4; | |
return sub_14001C3B0(&qword_140027178, 1, (__int64)&v3, (__int64)&off_14001F358, (__int64)&off_14001F380); | |
} | |
return result; | |
} | |
// 14001F358: using guessed type __int64 (__fastcall *off_14001F358)(); | |
// 14001F380: using guessed type char *off_14001F380; | |
// 140027178: using guessed type __int64 qword_140027178; | |
//----- (000000014001C340) ---------------------------------------------------- | |
bool sub_14001C340() | |
{ | |
return *(_QWORD *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 88i64) == 0i64; | |
} | |
// 140027270: using guessed type int TlsIndex; | |
//----- (000000014001C360) ---------------------------------------------------- | |
__int64 __fastcall sub_14001C360(__int64 a1) | |
{ | |
__int64 result; // rax | |
__int64 v2; // rcx | |
__int64 v3; // [rsp+28h] [rbp-10h] BYREF | |
sub_14000E850(&v3, a1); | |
result = v3; | |
_InterlockedDecrement64(&qword_1400271C0); | |
v2 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
--*(_QWORD *)(v2 + 88); | |
return result; | |
} | |
// 1400271C0: using guessed type __int64 qword_1400271C0; | |
// 140027270: using guessed type int TlsIndex; | |
//----- (000000014001C3B0) ---------------------------------------------------- | |
signed __int64 __fastcall sub_14001C3B0(volatile signed __int64 *a1, char a2, __int64 a3, __int64 a4, __int64 a5) | |
{ | |
signed __int64 result; // rax | |
signed __int64 i; // rdi | |
int v8; // eax | |
__int64 v9; // rbx | |
__int64 v10; // rax | |
volatile signed __int64 *v11; // rax | |
_QWORD *ThreadLocalStoragePointer; // rdx | |
signed __int64 v13; // rax | |
volatile signed __int64 *v14; // rcx | |
int v15; // eax | |
__int64 v16; // rax | |
__int64 v17; // rdi | |
__int64 v18; // rax | |
volatile signed __int8 *v19; // rdi | |
void (__fastcall *v20)(volatile signed __int8 *, void *, __int64, __int64); // rbx | |
volatile signed __int64 *v21; // rcx | |
HANDLE v22; // rcx | |
int v23; // eax | |
signed __int64 v24; // rax | |
void *v25; // rbx | |
volatile signed __int64 *v26; // rcx | |
__int64 v27[4]; // [rsp+28h] [rbp-58h] BYREF | |
__int64 v28; // [rsp+48h] [rbp-38h] BYREF | |
bool v29; // [rsp+50h] [rbp-30h] | |
char **v30; // [rsp+58h] [rbp-28h] | |
__int64 v31; // [rsp+60h] [rbp-20h] | |
__int64 *v32; // [rsp+68h] [rbp-18h] | |
__int64 v33; // [rsp+70h] [rbp-10h] | |
HANDLE hObject; // [rsp+78h] [rbp-8h] BYREF | |
volatile signed __int64 *v35; // [rsp+80h] [rbp+0h] | |
int v36; // [rsp+8Ch] [rbp+Ch] BYREF | |
__int64 v37; // [rsp+90h] [rbp+10h] BYREF | |
volatile signed __int64 *v38; // [rsp+98h] [rbp+18h] | |
__int64 v39; // [rsp+A0h] [rbp+20h] | |
char v40; // [rsp+AFh] [rbp+2Fh] | |
__int64 v41; // [rsp+B0h] [rbp+30h] | |
v41 = -2i64; | |
v27[2] = a4; | |
v27[3] = a3; | |
v40 = a2; | |
result = *a1; | |
i = *a1; | |
if ( !*a1 ) | |
goto LABEL_4; | |
while ( 1 ) | |
{ | |
if ( i == 1 ) | |
{ | |
if ( !v40 ) | |
{ | |
v30 = &off_140020680; | |
v31 = 1i64; | |
v28 = 0i64; | |
v32 = (__int64 *)"/rustc/90c541806f23a127002de5b4038be731ba1458ca\\library\\core\\src\\str\\pattern.rs"; | |
v33 = 0i64; | |
sub_14001CBB0((__int64)&v28, a5); | |
} | |
goto LABEL_4; | |
} | |
if ( i == 3 ) | |
return result; | |
if ( (i & 3) != 2 ) | |
JUMPOUT(0x14001C8BCi64); | |
while ( 1 ) | |
{ | |
v8 = *(unsigned __int8 *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 80i64); | |
if ( v8 != 1 ) | |
{ | |
if ( v8 ) | |
sub_14001CB40( | |
(__int64)"use of std::thread::current() is not possible after the thread's local data has been destroyed", | |
94i64, | |
(__int64)&off_14001EAC8); | |
v9 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
sub_14000CA80(v9 + 64, (__int64)qword_14000DCB0); | |
*(_BYTE *)(v9 + 80) = 1; | |
} | |
if ( *(_QWORD *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 64i64) ) | |
sub_14001CF90( | |
(__int64)"already borrowedlibrary\\std\\src\\io\\stdio.rs", | |
16i64, | |
(__int64)&v28, | |
(__int64)&off_14001E650, | |
(__int64)&off_14001F580); | |
v10 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
*(_QWORD *)(v10 + 64) = -1i64; | |
v11 = *(volatile signed __int64 **)(v10 + 72); | |
if ( !v11 ) | |
JUMPOUT(0x14001C4F9i64); | |
if ( _InterlockedIncrement64(v11) <= 0 ) | |
LABEL_48: | |
BUG(); | |
ThreadLocalStoragePointer = NtCurrentTeb()->ThreadLocalStoragePointer; | |
++*(_QWORD *)(ThreadLocalStoragePointer[TlsIndex] + 64i64); | |
v37 = (__int64)v11; | |
LOBYTE(v39) = 0; | |
v38 = (volatile signed __int64 *)(i - 2); | |
v13 = _InterlockedCompareExchange64(a1, (signed __int64)&v37 + 2, i); | |
if ( i == v13 ) | |
break; | |
i = v13; | |
v14 = (volatile signed __int64 *)v37; | |
if ( v37 ) | |
{ | |
if ( !_InterlockedDecrement64((volatile signed __int64 *)v37) ) | |
sub_140002DF0((__int64)v14); | |
} | |
if ( (i & 3) != 2 ) | |
goto LABEL_43; | |
} | |
while ( !(_BYTE)v39 ) | |
{ | |
v15 = *(unsigned __int8 *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 80i64); | |
if ( v15 != 1 ) | |
{ | |
if ( !v15 ) | |
JUMPOUT(0x14001C5D1i64); | |
JUMPOUT(0x14001C84Fi64); | |
} | |
if ( *(_QWORD *)(*((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex) + 64i64) ) | |
JUMPOUT(0x14001C808i64); | |
v16 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
*(_QWORD *)(v16 + 64) = -1i64; | |
v17 = *(_QWORD *)(v16 + 72); | |
if ( !v17 ) | |
JUMPOUT(0x14001C63Ei64); | |
if ( _InterlockedIncrement64((volatile signed __int64 *)v17) <= 0 ) | |
goto LABEL_48; | |
v18 = *((_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + (unsigned int)TlsIndex); | |
++*(_QWORD *)(v18 + 64); | |
v35 = (volatile signed __int64 *)v17; | |
if ( !_InterlockedDecrement8((volatile signed __int8 *)(v17 + 40)) ) | |
goto LABEL_32; | |
v19 = (volatile signed __int8 *)(v17 + 40); | |
v20 = (void (__fastcall *)(volatile signed __int8 *, void *, __int64, __int64))qword_140027200; | |
if ( qword_140027200 ) | |
{ | |
do | |
v20(v19, &unk_140020308, 1i64, 0xFFFFFFFFi64); | |
while ( _InterlockedCompareExchange8(v19, 0, 1) != 1 ); | |
LABEL_32: | |
v21 = v35; | |
if ( !_InterlockedDecrement64(v35) ) | |
goto LABEL_33; | |
} | |
else | |
{ | |
v22 = (HANDLE)qword_140027030; | |
if ( qword_140027030 == -1 ) | |
{ | |
hObject = (HANDLE)-1i64; | |
v23 = off_140027040(&hObject, 3221225472i64, 0i64, 0i64); | |
if ( v23 ) | |
{ | |
v36 = v23; | |
v27[0] = (__int64)&v36; | |
v27[1] = (__int64)sub_14001AAA0; | |
v30 = &off_140020338; | |
v31 = 1i64; | |
v28 = 0i64; | |
v32 = v27; | |
v33 = 1i64; | |
JUMPOUT(0x14001C8AAi64); | |
} | |
v22 = hObject; | |
v24 = _InterlockedCompareExchange64(&qword_140027030, (signed __int64)hObject, -1i64); | |
if ( v24 != -1 ) | |
{ | |
v25 = (void *)v24; | |
CloseHandle(hObject); | |
v22 = v25; | |
} | |
} | |
off_140027050(v22, v19, 0i64, 0i64); | |
*v19 = 0; | |
v21 = v35; | |
if ( !_InterlockedDecrement64(v35) ) | |
LABEL_33: | |
sub_140002DF0((__int64)v21); | |
} | |
} | |
v26 = (volatile signed __int64 *)v37; | |
if ( v37 && !_InterlockedDecrement64((volatile signed __int64 *)v37) ) | |
sub_140002DF0((__int64)v26); | |
LABEL_43: | |
result = *a1; | |
for ( i = *a1; !result; i = result ) | |
{ | |
LABEL_4: | |
result = _InterlockedCompareExchange64(a1, 2i64, i); | |
if ( i == result ) | |
{ | |
v38 = a1; | |
v37 = 1i64; | |
v28 = 3i64; | |
v29 = i == 1; | |
JUMPOUT(0x14001C7A5i64); | |
} | |
} | |
} | |
} | |
// 14001C4F7: control flows out of bounds to 14001C4F9 | |
// 14001C5CA: control flows out of bounds to 14001C5D1 | |
// 14001C63C: control flows out of bounds to 14001C63E | |
// 14001C7A1: control flows out of bounds to 14001C7A5 | |
// 14001C8A2: control flows out of bounds to 14001C8AA | |
// 14001C44A: control flows out of bounds to 14001C8BC | |
// 14001C5B1: control flows out of bounds to 14001C84F | |
// 14001C60E: control flows out of bounds to 14001C808 | |
// 14000DCB0: using guessed type __int64 qword_14000DCB0[6]; | |
// 14001E650: using guessed type __int64 (__fastcall *off_14001E650)(); | |
// 14001EAC8: using guessed type void *off_14001EAC8; | |
// 14001F580: using guessed type char *off_14001F580; | |
// 140020338: using guessed type char *off_140020338; | |
// 140020680: using guessed type char *off_140020680; | |
// 140027030: using guessed type __int64 qword_140027030; | |
// 140027040: using guessed type __int64 (__fastcall *off_140027040)(_QWORD, _QWORD, _QWORD, _QWORD); | |
// 140027050: using guessed type __int64 (__fastcall *off_140027050)(_QWORD, _QWORD, _QWORD, _QWORD); | |
// 140027200: using guessed type __int64 qword_140027200; | |
// 140027270: using guessed type int TlsIndex; | |
//----- (000000014001CA70) ---------------------------------------------------- | |
__int64 __fastcall sub_14001CA70(__int64 *a1, __int64 a2, __int64 a3) | |
{ | |
bool v3; // cf | |
unsigned __int64 v4; // rdx | |
__int64 v6; // rax | |
unsigned __int64 v7; // rcx | |
__int64 v8; // rdi | |
__int64 result; // rax | |
__int64 v10[2]; // [rsp+28h] [rbp-40h] BYREF | |
__int64 v11; // [rsp+38h] [rbp-30h] | |
__int64 v12[2]; // [rsp+40h] [rbp-28h] BYREF | |
__int64 v13; // [rsp+50h] [rbp-18h] | |
v3 = __CFADD__(a3, a2); | |
v4 = a3 + a2; | |
if ( v3 ) | |
LABEL_12: | |
sub_140015AA0(); | |
v6 = *a1; | |
v7 = 2 * *a1; | |
if ( v7 > v4 ) | |
v4 = v7; | |
v8 = 8i64; | |
if ( v4 >= 9 ) | |
v8 = v4; | |
if ( v6 ) | |
{ | |
v10[0] = a1[1]; | |
v10[1] = v6; | |
v11 = 1i64; | |
} | |
else | |
{ | |
v11 = 0i64; | |
} | |
result = sub_140015A10(v12, v8, v8 >= 0, (__int64)v10); | |
if ( v12[0] ) | |
{ | |
result = 0x8000000000000001ui64; | |
if ( v13 != 0x8000000000000001ui64 ) | |
{ | |
if ( v13 ) | |
sub_14001CB30(); | |
goto LABEL_12; | |
} | |
} | |
else | |
{ | |
a1[1] = v12[1]; | |
*a1 = v8; | |
} | |
return result; | |
} | |
//----- (000000014001CB30) ---------------------------------------------------- | |
void __noreturn sub_14001CB30() | |
{ | |
sub_140015AF0(); | |
} | |
//----- (000000014001CB40) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14001CB40(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
__int64 v3[2]; // [rsp+28h] [rbp-50h] BYREF | |
__int64 v4[2]; // [rsp+38h] [rbp-40h] BYREF | |
__int64 v5[6]; // [rsp+48h] [rbp-30h] BYREF | |
v3[0] = a1; | |
v3[1] = a2; | |
v4[0] = (__int64)v3; | |
v4[1] = (__int64)sub_14001AFA0; | |
v5[2] = (__int64)&off_140021820; | |
v5[3] = 1i64; | |
v5[0] = 0i64; | |
v5[4] = (__int64)v4; | |
v5[5] = 1i64; | |
sub_14001CBB0((__int64)v5, a3); | |
} | |
// 140021820: using guessed type char *off_140021820; | |
//----- (000000014001CBB0) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14001CBB0(__int64 a1, __int64 a2) | |
{ | |
__int64 v2[4]; // [rsp+20h] [rbp-28h] BYREF | |
char v3; // [rsp+40h] [rbp-8h] | |
v2[0] = (__int64)"from_str_radix_int: must lie in the range `[2, 36]` - found "; | |
v2[1] = (__int64)&off_140021898; | |
v2[2] = a1; | |
v2[3] = a2; | |
v3 = 1; | |
sub_14000A5B0((__int64)v2); | |
} | |
// 140021898: using guessed type __int64 (__fastcall *off_140021898)(); | |
//----- (000000014001CBF0) ---------------------------------------------------- | |
void sub_14001CBF0() | |
{ | |
JUMPOUT(0x14001CC24i64); | |
} | |
// 14001CC20: control flows out of bounds to 14001CC24 | |
//----- (000000014001CC50) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14001CC50(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
__int64 v3[2]; // [rsp+28h] [rbp-40h] BYREF | |
__int64 v4[6]; // [rsp+38h] [rbp-30h] BYREF | |
v3[0] = a1; | |
v3[1] = a2; | |
v4[2] = (__int64)v3; | |
v4[3] = 1i64; | |
v4[0] = 0i64; | |
v4[4] = (__int64)"from_str_radix_int: must lie in the range `[2, 36]` - found "; | |
v4[5] = 0i64; | |
sub_14001CBB0((__int64)v4, a3); | |
} | |
//----- (000000014001CCA0) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14001CCA0(__int64 a1, __int64 a2) | |
{ | |
__int64 v2[8]; // [rsp+28h] [rbp-40h] BYREF | |
v2[0] = a1; | |
v2[1] = a2; | |
v2[4] = (__int64)v2; | |
v2[5] = 1i64; | |
v2[2] = 0i64; | |
v2[6] = (__int64)"from_str_radix_int: must lie in the range `[2, 36]` - found "; | |
v2[7] = 0i64; | |
sub_14001CBF0(); | |
BUG(); | |
} | |
//----- (000000014001CD00) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14001CD00(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
__int64 v3; // [rsp+28h] [rbp-60h] BYREF | |
__int64 v4; // [rsp+30h] [rbp-58h] BYREF | |
__int64 v5[4]; // [rsp+38h] [rbp-50h] BYREF | |
__int64 v6[6]; // [rsp+58h] [rbp-30h] BYREF | |
v3 = a1; | |
v4 = a2; | |
v5[0] = (__int64)&v4; | |
v5[1] = (__int64)sub_14001AD00; | |
v5[2] = (__int64)&v3; | |
v5[3] = (__int64)sub_14001AD00; | |
v6[2] = (__int64)&off_140021928; | |
v6[3] = 2i64; | |
v6[0] = 0i64; | |
v6[4] = (__int64)v5; | |
v6[5] = 2i64; | |
sub_14001CBB0((__int64)v6, a3); | |
} | |
// 140021928: using guessed type char *off_140021928; | |
//----- (000000014001CD80) ---------------------------------------------------- | |
void __noreturn sub_14001CD80() | |
{ | |
sub_14001CCA0( | |
(__int64)"panic in a function that cannot unwindmatches!===assertion failed: `(left right)`\n" | |
" left: ``,\n" | |
" right: ``: ", | |
38i64); | |
} | |
//----- (000000014001CDA0) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14001CDA0( | |
char a1, | |
__int64 a2, | |
__int64 a3, | |
__int64 a4, | |
__int64 a5, | |
__int128 *a6, | |
__int64 a7) | |
{ | |
char *v7; // rcx | |
__int64 v8; // rdx | |
__int128 v9; // xmm0 | |
__int128 v10; // xmm1 | |
char *v11; // [rsp+20h] [rbp-D8h] BYREF | |
__int64 v12; // [rsp+28h] [rbp-D0h] | |
__int64 v13[2]; // [rsp+30h] [rbp-C8h] BYREF | |
__int64 v14[2]; // [rsp+40h] [rbp-B8h] BYREF | |
char **v15; // [rsp+50h] [rbp-A8h] BYREF | |
__int64 (__fastcall *v16)(__int64, __int64 *); // [rsp+58h] [rbp-A0h] | |
__int64 *v17; // [rsp+60h] [rbp-98h] | |
__int64 (__fastcall *v18)(_QWORD *); // [rsp+68h] [rbp-90h] | |
__int64 *v19; // [rsp+70h] [rbp-88h] | |
__int64 (__fastcall *v20)(_QWORD *); // [rsp+78h] [rbp-80h] | |
__int128 *v21; // [rsp+80h] [rbp-78h] | |
bool (__fastcall *v22)(__int64 *, __int64 *); // [rsp+88h] [rbp-70h] | |
__int64 v23[2]; // [rsp+90h] [rbp-68h] BYREF | |
void **v24; // [rsp+A0h] [rbp-58h] | |
__int64 v25; // [rsp+A8h] [rbp-50h] | |
__int64 *v26; // [rsp+B0h] [rbp-48h] | |
__int64 v27; // [rsp+B8h] [rbp-40h] | |
__int128 v28[3]; // [rsp+C0h] [rbp-38h] BYREF | |
v13[0] = a2; | |
v13[1] = a3; | |
v14[0] = a4; | |
v14[1] = a5; | |
if ( a1 ) | |
{ | |
if ( a1 != 1 ) | |
{ | |
v11 = "matches!===assertion failed: `(left right)`\n left: ``,\n right: ``: "; | |
v8 = a7; | |
v12 = 7i64; | |
if ( !*((_QWORD *)a6 + 2) ) | |
{ | |
LABEL_6: | |
v15 = &v11; | |
v16 = sub_14001AFA0; | |
v17 = v13; | |
v18 = sub_14001AF40; | |
v19 = v14; | |
v20 = sub_14001AF40; | |
v24 = &off_140021A00; | |
v25 = 4i64; | |
v23[0] = 0i64; | |
v26 = (__int64 *)&v15; | |
v27 = 3i64; | |
sub_14001CBB0((__int64)v23, v8); | |
} | |
LABEL_8: | |
v9 = *a6; | |
v10 = a6[1]; | |
v28[2] = a6[2]; | |
v28[1] = v10; | |
v28[0] = v9; | |
v15 = &v11; | |
v16 = sub_14001AFA0; | |
v17 = v13; | |
v18 = sub_14001AF40; | |
v19 = v14; | |
v20 = sub_14001AF40; | |
v21 = v28; | |
v22 = sub_140017290; | |
v24 = &off_1400219B8; | |
v25 = 4i64; | |
v23[0] = 0i64; | |
v26 = (__int64 *)&v15; | |
v27 = 4i64; | |
sub_14001CBB0((__int64)v23, v8); | |
} | |
v7 = "!===assertion failed: `(left right)`\n left: ``,\n right: ``: "; | |
} | |
else | |
{ | |
v7 = "==assertion failed: `(left right)`\n left: ``,\n right: ``: "; | |
} | |
v11 = v7; | |
v8 = a7; | |
v12 = 2i64; | |
if ( !*((_QWORD *)a6 + 2) ) | |
goto LABEL_6; | |
goto LABEL_8; | |
} | |
// 1400219B8: using guessed type void *off_1400219B8; | |
// 140021A00: using guessed type void *off_140021A00; | |
//----- (000000014001CF90) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14001CF90(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5) | |
{ | |
__int64 v5[2]; // [rsp+28h] [rbp-70h] BYREF | |
__int64 v6[2]; // [rsp+38h] [rbp-60h] BYREF | |
__int64 v7[4]; // [rsp+48h] [rbp-50h] BYREF | |
__int64 v8[6]; // [rsp+68h] [rbp-30h] BYREF | |
v5[0] = a1; | |
v5[1] = a2; | |
v6[0] = a3; | |
v6[1] = a4; | |
v7[0] = (__int64)v5; | |
v7[1] = (__int64)sub_14001AFA0; | |
v7[2] = (__int64)v6; | |
v7[3] = (__int64)sub_14001AF40; | |
v8[2] = (__int64)&off_140021A48; | |
v8[3] = 2i64; | |
v8[0] = 0i64; | |
v8[4] = (__int64)v7; | |
v8[5] = 2i64; | |
sub_14001CBB0((__int64)v8, a5); | |
} | |
// 140021A48: using guessed type char *off_140021A48; | |
//----- (000000014001D030) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14001D030(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
sub_140018C60(a1, a2, a3); | |
} | |
//----- (000000014001D040) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14001D040(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
sub_140018CE0(a1, a2, a3); | |
} | |
//----- (000000014001D050) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14001D050(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
sub_140018D60(a1, a2, a3); | |
} | |
//----- (000000014001D060) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14001D060(__int64 a1) | |
{ | |
__int64 v1[6]; // [rsp+28h] [rbp-30h] BYREF | |
v1[2] = (__int64)&off_140021EC0; | |
v1[3] = 1i64; | |
v1[0] = 0i64; | |
v1[4] = (__int64)"from_str_radix_int: must lie in the range `[2, 36]` - found "; | |
v1[5] = 0i64; | |
sub_14001CBB0((__int64)v1, a1); | |
} | |
// 140021EC0: using guessed type char *off_140021EC0; | |
//----- (000000014001D0B0) ---------------------------------------------------- | |
void __fastcall __noreturn sub_14001D0B0( | |
char *a1, | |
unsigned __int64 a2, | |
unsigned __int64 a3, | |
unsigned __int64 a4, | |
__int64 a5) | |
{ | |
sub_140019A60(a1, a2, a3, a4, a5); | |
} | |
// nfuncs=446 queued=363 decompiled=363 lumina nreq=0 worse=0 better=0 | |
#error "There were 2 decompilation failure(s) on 363 function(s)" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment