Created
July 2, 2025 15:29
-
-
Save purofle/33a81f5b6f4de15bc7f53a2214577c7c to your computer and use it in GitHub Desktop.
ucrtbase.dll 在 Windows Insider 27881 下逆向的结果
This file contains hidden or 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
| /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ | |
| double __cdecl pow(double _X,double _Y) | |
| { | |
| ulonglong uVar1; | |
| uint uVar2; | |
| int iVar3; | |
| double dVar4; | |
| longlong lVar5; | |
| double dVar6; | |
| uint uVar7; | |
| ulonglong uVar8; | |
| uint uVar9; | |
| uint uVar10; | |
| int iVar11; | |
| longlong lVar12; | |
| double dVar13; | |
| undefined1 auVar14 [16]; | |
| undefined1 auVar15 [16]; | |
| undefined1 auVar16 [16]; | |
| undefined1 auVar17 [64]; | |
| undefined1 auVar18 [64]; | |
| undefined1 in_register_00001248 [56]; | |
| undefined1 auVar19 [64]; | |
| double dVar20; | |
| undefined1 auVar21 [16]; | |
| undefined1 auVar22 [16]; | |
| undefined1 auVar23 [16]; | |
| double dVar24; | |
| double dVar25; | |
| undefined1 auVar26 [16]; | |
| undefined1 extraout_var [60]; | |
| undefined1 extraout_var_00 [60]; | |
| auVar19._8_56_ = in_register_00001248; | |
| auVar19._0_8_ = _Y; | |
| /* 0x800b0 2333 pow */ | |
| if (((byte)DAT_18013be70 & 3) != 3) { | |
| dVar13 = (double)FUN_1800a7a60(); | |
| return dVar13; | |
| } | |
| lVar12 = 0; | |
| iVar3 = 0; | |
| uVar10 = (uint)((ulonglong)_X >> 0x20); | |
| uVar7 = uVar10 >> 0x14; | |
| uVar2 = (uint)((ulonglong)_Y >> 0x20); | |
| uVar9 = uVar2 >> 0x14; | |
| dVa r13 = _X; | |
| if ((0x7fd < uVar7 - 1) || (0x7f < (uVar9 & 0x7ff) - 0x3be)) { | |
| uVar8 = (longlong)_Y * 2; | |
| if (0xffdffffffffffffe < uVar8 - 1) { | |
| if ((uVar8 == 0) || (dVar13 = _Y, _X == 1.0)) { | |
| if (0xfff0000000000000 < ((ulonglong)dVar13 ^ 0x8000000000000) * 2) goto LAB_180065ff3; | |
| } | |
| else { | |
| uVar1 = (longlong)_X * 2; | |
| if ((0xffe0000000000000 < uVar1) || (0xffe0000000000000 < uVar8)) { | |
| LAB_180065ff3: | |
| return _X + _Y; | |
| } | |
| if (uVar1 != 0x7fe0000000000000) { | |
| if ((uint)(uVar1 < 0x7fe0000000000000) != (uVar2 >> 0x1f ^ 1)) { | |
| return _Y * _Y; | |
| } | |
| return 0.0; | |
| } | |
| } | |
| return 1.0; | |
| } | |
| if (0xffdffffffffffffe < (longlong)_X * 2 - 1U) { | |
| dVar13 = _X * _X; | |
| iVar11 = 0; | |
| if ((((((ulonglong)_X & 0x8000000000000000) != 0) && | |
| (uVar7 = uVar2 >> 0x14 & 0x7ff, iVar11 = iVar3, uVar7 - 0x3ff < 0x35)) && | |
| (uVar8 = 1L << ((ulonglong)(0x433 - uVar7) & 0x3f), ((ulonglong)_Y & uVar8 - 1) == 0)) && | |
| (((ulonglong)_Y & uVar8) != 0)) { | |
| dVar13 = -dVar13; | |
| iVar11 = 1; | |
| } | |
| if ((longlong)_X * 2 != 0) { | |
| if (((ulonglong)_Y & 0x8000000000000000) != 0) { | |
| return 1.0 / dVar13; | |
| } | |
| return dVar13; | |
| } | |
| if (((ulonglong)_Y & 0x8000000000000000) != 0) { | |
| dVar13 = FUN_1800b0740(iVar11); | |
| return dVar13; | |
| } | |
| return dVar13; | |
| } | |
| if (((ulonglong)_X & 0x8000000000000000) != 0) { | |
| uVar7 = uVar2 >> 0x14 & 0x7ff; | |
| if (uVar7 < 0x3ff) { | |
| LAB_180066199: | |
| dVar13 = FUN_1800eb2fc(_X); | |
| return dVar13; | |
| } | |
| if (uVar7 < 0x434) { | |
| uVar8 = 1L << ((ulonglong)(0x433 - uVar7) & 0x3f); | |
| if (((ulonglong)_Y & uVar8 - 1) != 0) goto LAB_180066199; | |
| iVar3 = 2 - (uint)((uVar8 & (ulonglong)_Y) != 0); | |
| } | |
| else { | |
| iVar3 = 2; | |
| } | |
| dVar13 = ABS(_X); // abs(-1.0) == 1.0 | |
| uVar7 = uVar10 >> 0x14 & 0x7ff; | |
| lVar12 = 0x80000; | |
| if (iVar3 != 1) { | |
| lVar12 = 0; | |
| } | |
| } | |
| if (0x7f < (uVar9 & 0x7ff) - 0x3be) { | |
| if (dVar13 == 1.0) { // dVar13 == 1.0 | |
| return 1.0; | |
| } | |
| if ((uVar9 & 0x7ff) < 0x3be) { | |
| if ((ulonglong)dVar13 < 0x3ff0000000000001) { | |
| return 1.0 - _Y; | |
| } | |
| return _Y + 1.0; | |
| } | |
| if (0x3ff0000000000000 < (ulonglong)dVar13 != uVar9 < 0x800) { | |
| dVar13 = (double)FUN_18006aba0(0); | |
| return dVar13; | |
| } | |
| dVar13 = FUN_1800eb33c(0); | |
| return dVar13; | |
| } | |
| if (uVar7 == 0) { | |
| dVar13 = (double)((longlong)ABS(_X * 4503599627370496.0) + 0xfcc0000000000000); | |
| } | |
| } | |
| if (_Y == 1.0) { | |
| return _X; | |
| } | |
| if (dVar13 == 1.0) { | |
| return _X; | |
| } | |
| uVar7 = (uint)((longlong)dVar13 + 0xc0196aab00000000U >> 0x20); | |
| dVar20 = (double)((int)uVar7 >> 0x14); | |
| lVar5 = (ulonglong)(uVar7 >> 0xd & 0x7f) * 0x20; | |
| auVar26._8_8_ = 0; | |
| auVar26._0_8_ = *(ulonglong *)(&DAT_180104c08 + lVar5); | |
| auVar14._8_8_ = 0; | |
| auVar14._0_8_ = (longlong)dVar13 - ((longlong)dVar13 + 0xc0196aab00000000U & 0xfff0000000000000 ); | |
| auVar14 = vfmadd213sd_fma(auVar26,auVar14,ZEXT816(0xbff0000000000000)); | |
| dVar13 = dVar20 * 0.6931471805598903 + *(double *)(&DAT_180104c18 + lVar5); | |
| dVar25 = auVar14._0_8_; | |
| dVar24 = dVar25 * -0.5 * dVar25; | |
| auVar15._0_8_ = -dVar24; | |
| auVar15._8_8_ = 0x8000000000000000; | |
| auVar22._8_8_ = 0; | |
| auVar22._0_8_ = dVar25 * -0.5; | |
| auVar14 = vfmadd213sd_fma(auVar22,auVar14,auVar15); | |
| dVar6 = dVar13 + dVar25; | |
| dVar4 = dVar24 + dVar6; | |
| dVar13 = auVar14._0_8_ + | |
| dVar20 * 5.497923018708371e-14 + *(double *)(&DAT_180104c20 + lVar5) + | |
| (dVar13 - dVar6) + dVar25 + (dVar6 - dVar4) + dVar24 + | |
| (((0.7999999995323976 - dVar25 * 0.6666666663487739) + | |
| (dVar25 * 1.0000415263675542 - 1.142909628459501) * dVar24) * dVar24 + | |
| (dVar25 * 0.5000000000000007 - 0.6666666666666679)) * dVar24 * dVar25; | |
| dVar6 = dVar13 + dVar4; | |
| dVar24 = dVar6 * _Y; | |
| auVar16._0_8_ = -dVar24; | |
| auVar16._8_8_ = 0x8000000000000000; | |
| uVar10 = (uint)((ulonglong)dVar24 >> 0x34) & 0x7ff; | |
| auVar23._8_8_ = 0; | |
| auVar23._0_8_ = dVar6; | |
| auVar14 = vfmadd213sd_fma(auVar19._0_16_,auVar23,auVar16); | |
| iVar3 = (int)lVar12; | |
| uVar7 = uVar10; | |
| if (0x3e < uVar10 - 0x3c9) { | |
| if (0x7fffffff < uVar10 - 0x3c9) { | |
| if (iVar3 != 0) { | |
| return -(dVar24 + 1.0); | |
| } | |
| return dVar24 + 1.0; | |
| } | |
| uVar7 = 0; | |
| if (0x408 < uVar10) { | |
| if (((ulonglong)dVar24 & 0x8000000000000000) == 0) { | |
| dVar13 = FUN_1800eb33c(iVar3); | |
| return dVar13; | |
| } | |
| dVar13 = (double)FUN_18006aba0(iVar3); | |
| return dVar13; | |
| } | |
| } | |
| dVar20 = dVar24 * 369.3299304675746 + 103079215104.5; | |
| uVar8 = (ulonglong)dVar20 >> 0x10; | |
| dVar20 = (double)(int)((ulonglong)dVar20 >> 0x10); | |
| dVar13 = (dVar24 - dVar20 * 0.0027076061741126978) + dVar20 * 5.0411407304988844e-14 + | |
| auVar14._0_8_ + ((dVar4 - dVar6) + dVar13) * _Y; | |
| dVar4 = dVar13 * dVar13; | |
| dVar6 = (double)((lVar12 + uVar8 << 0x2c) + *(longlong *)(&DAT_180105cd8 + (uVar8 & 0xff) * 0x1 0)) | |
| ; | |
| dVar13 = (dVar13 * 0.16666666666665886 + 0.49999999999996786) * dVar4 + | |
| dVar13 + *(double *)(&DAT_180105cd0 + (uVar8 & 0xff) * 0x10) + | |
| (dVar13 * 0.008333335853047663 + 0.04166668084093659) * dVar4 * dVar4; | |
| if (uVar7 == 0) { | |
| if ((uVar8 & 0x80000000) == 0) { | |
| auVar17._0_4_ = | |
| FUN_1800adf9c(((double)((longlong)dVar6 + -0x3f10000000000000) * dVar13 + | |
| (double)((longlong)dVar6 + -0x3f10000000000000)) * 5.486124068793689e+303 ); | |
| auVar17._4_60_ = extraout_var; | |
| dVar6 = auVar17._0_8_; | |
| } | |
| else { | |
| dVar6 = (double)((longlong)dVar6 + 0x3fe0000000000000); | |
| dVar4 = dVar6 + dVar6 * dVar13; | |
| auVar21._8_8_ = 0; | |
| auVar21._0_8_ = dVar4; | |
| auVar14 = vandpd_avx(auVar21,_DAT_180108100); | |
| if (auVar14._0_8_ < 1.0) { | |
| auVar14 = vcmpsd_avx(auVar21,ZEXT816(0),1); | |
| auVar14 = vblendvpd_avx(ZEXT816(0x3ff0000000000000),ZEXT816(0xbff0000000000000),auVar14) ; | |
| dVar24 = auVar14._0_8_; | |
| dVar4 = ((dVar6 - dVar4) + dVar6 * dVar13 + (dVar24 - (dVar24 + dVar4)) + dVar4 + | |
| dVar24 + dVar4) - dVar24; | |
| if (dVar4 == 0.0) { | |
| dVar4 = (double)((ulonglong)dVar6 & 0x8000000000000000); | |
| } | |
| } | |
| auVar18._0_4_ = FUN_18006ab68(dVar4 * 2.2250738585072014e-308); | |
| auVar18._4_60_ = extraout_var_00; | |
| dVar6 = auVar18._0_8_; | |
| } | |
| } | |
| else { | |
| dVar6 = dVar13 * dVar6 + dVar6; | |
| } | |
| /* WARNING: Read-only address (ram,0x000180108100) is written */ | |
| return dVar6; | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment