1. // bad sp value at call has been detected, the output may be wrong!
  2. // positive sp value has been detected, the output may be wrong!
  3. void __fastcall sub_142109BA0(__int64 a1)
  4. {
  5. __int64 v1; // rsi
  6. char v2; // dl
  7. int v3; // ecx
  8. unsigned __int64 v4; // rax
  9. int v5; // eax
  10. __int64 v6; // rcx
  11. __int64 v7; // rbx
  12. bool v8; // cf
  13. bool v9; // of
  14. int v10; // eax
  15. __int64 v11; // rdx
  16. __int64 v12; // rax
  17. unsigned __int64 v13; // rdx
  18. __int16 v14; // cx
  19. unsigned __int64 v15; // r8
  20. unsigned __int64 v16; // rax
  21. __int16 v17; // cx
  22. char v18; // dl
  23. char v19; // al
  24. bool v20; // cl
  25. char v21; // cl
  26. char v22; // dl
  27. char v23; // dl
  28. char v24; // al
  29. char v25; // cl
  30. __int64 v26; // [rsp-11248h] [rbp-11298h]
  31. _QWORD v27[8773]; // [rsp-11210h] [rbp-11260h] BYREF
  32. if ( (unsigned int)((__int64 (__fastcall *)(__int64, __int64, _QWORD *))sub_142116B90)(a1, 1i64, v27) )
  33. {
  34. if ( !v2 )
  35. {
  36. v4 = __rdtsc();
  37. ((void (__fastcall *)(_QWORD, _QWORD, _QWORD))loc_142117341)((unsigned int)(v3 + 1027895471), HIDWORD(v4), v27[4]);
  38. v5 = ((__int64 (*)(void))((char *)&sub_142127BE0 + 2))();
  39. v7 = (unsigned int)(-117 * *(_DWORD *)(v1 + 1218337789));
  40. v8 = __CFADD__((unsigned __int64)(-117i64 * *(int *)(v1 + 1218337789)) >> 32 != 0, v5);
  41. v9 = __OFADD__((unsigned __int64)(-117i64 * *(int *)(v1 + 1218337789)) >> 32 != 0, v5);
  42. v10 = ((unsigned __int64)(-117i64 * *(int *)(v1 + 1218337789)) >> 32 != 0) + v5;
  43. v8 |= __CFADD__(v10, 11594992);
  44. v9 |= __OFADD__(11594992, v10);
  45. v10 += 11594992;
  46. if ( !v8 && v8 )
  47. {
  48. if ( !((v10 < 0) ^ v9 | (v10 == 0)) )
  49. {
  50. if ( v10 < 0 != v9 )
  51. {
  52. if ( (v10 < 0) ^ v9 | (v10 == 0) )
  53. {
  54. v11 = v26;
  55. if ( !(_BYTE)v10 )
  56. {
  57. BYTE1(v11) = -84;
  58. ((void (__fastcall *)(__int64, __int64))((char *)&loc_142112CCA + 5))(v6, v11);
  59. v12 = ((__int64 (*)(void))((char *)&loc_14211D9ED + 2))();
  60. if ( v8 )
  61. {
  62. HIBYTE(v14) += 112;
  63. LOBYTE(v13) = v13 - 62;
  64. *(_DWORD *)(v7 + 93024313) ^= 0xB0ECA3u;
  65. v16 = v13 + v12;
  66. if ( v15 >= v13 && v15 < v16 )
  67. {
  68. if ( (__int64)v15 >= (__int64)v16 || ((v16 & 0x8000) != 0) != v9 )
  69. JUMPOUT(0x14210A1C6i64);
  70. v17 = v14 + 5533;
  71. if ( HIBYTE(v17) == 114 )
  72. JUMPOUT(0x142115FC4i64);
  73. _enable();
  74. if ( (_BYTE)v17 == 0xE8 )
  75. goto LABEL_48;
  76. if ( *(_BYTE *)(v15 - 7) != 0xFF || (v18 = *(_BYTE *)(v15 - 6), (((v18 & 0x38) - 16) & 0xF7) != 0) )
  77. {
  78. v18 = *(_BYTE *)(v15 - 6);
  79. v19 = 0;
  80. }
  81. else
  82. {
  83. v19 = 1;
  84. }
  85. v20 = v18 == -1 && (((v17 & 0x38) - 16) & 0xF7) == 0;
  86. v21 = v19 | v20;
  87. if ( *(_BYTE *)(v15 - 4) != 0xFF || (v22 = *(_BYTE *)(v15 - 3), (((v22 & 0x38) - 16) & 0xF7) != 0) )
  88. v22 = *(_BYTE *)(v15 - 3);
  89. else
  90. v21 = 1;
  91. if ( v22 != -1 || (v23 = *(_BYTE *)(v15 - 2), (((v23 & 0x38) - 16) & 0xF7) != 0) )
  92. {
  93. v23 = *(_BYTE *)(v15 - 2);
  94. v24 = 0;
  95. }
  96. else
  97. {
  98. v24 = 1;
  99. }
  100. if ( (v25 = v24 | v21, v23 == -1) && (((*(_BYTE *)(v15 - 1) & 0x38) - 16) & 0xF7) == 0 || v25 )
  101. LABEL_48:
  102. JUMPOUT(0x14210A2D0i64);
  103. }
  104. JUMPOUT(0x14210A4D9i64);
  105. }
  106. JUMPOUT(0x142117882i64);
  107. }
  108. JUMPOUT(0x142128988i64);
  109. }
  110. JUMPOUT(0x14210A0FBi64);
  111. }
  112. JUMPOUT(0x14210A176i64);
  113. }
  114. JUMPOUT(0x142114945i64);
  115. }
  116. JUMPOUT(0x14210A167i64);
  117. }
  118. JUMPOUT(0x14210A111i64);
  119. }
  120. JUMPOUT(0x142109C01i64);
  121. }