Skip to content

Instantly share code, notes, and snippets.

@purofle
Created July 2, 2025 16:55
Show Gist options
  • Select an option

  • Save purofle/84ee8ef5c7f46a143aa3781eea01471b to your computer and use it in GitHub Desktop.

Select an option

Save purofle/84ee8ef5c7f46a143aa3781eea01471b to your computer and use it in GitHub Desktop.
uartbase.dll 在稳定版windows下逆向的结果
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
double __cdecl pow(double _X,double _Y)
{
ulonglong uVar1;
uint uVar2;
uint uVar3;
int iVar4;
double dVar5;
longlong lVar6;
double dVar7;
uint uVar8;
ulonglong 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;
/* 0x5f7b0 2333 pow */
if (((byte)DAT_180138e60 & 3) != 3) {
dVar13 = (double)FUN_18009d5c0();
return dVar13;
}
lVar12 = 0;
iVar4 = 0;
uVar10 = (uint)((ulonglong)_X >> 0x20);
uVar3 = uVar10 >> 0x14;
uVar2 = (uint)((ulonglong)_Y >> 0x20);
uVar8 = uVar2 >> 0x14;
dVar13 = _X;
if ((uVar3 - 1 < 0x7fe) && ((uVar8 & 0x7ff) - 0x3be < 0x80)) {
LAB_18005f8d9:
uVar3 = (uint)((longlong)dVar13 + 0xc0196aab00000000U >> 0x20);
dVar20 = (double)((int)uVar3 >> 0x14);
lVar6 = (ulonglong)(uVar3 >> 0xd & 0x7f) * 0x20;
auVar26._8_8_ = 0;
auVar26._0_8_ = *(ulonglong *)(&DAT_1801023c8 + lVar6);
auVar14._8_8_ = 0;
auVar14._0_8_ = (longlong)dVar13 - ((longlong)dVar13 + 0xc0196aab00000000U & 0xfff00000000000 00)
;
auVar14 = vfmadd213sd_fma(auVar26,auVar14,ZEXT816(0xbff0000000000000));
dVar13 = dVar20 * 0.6931471805598903 + *(double *)(&DAT_1801023d8 + lVar6);
dVar25 = auVar14._0_8_;
dVar24 = dVar25 * -0.5 * dVar25;
dVar5 = dVar13 + dVar25;
dVar7 = dVar24 + dVar5;
auVar15._0_8_ = -dVar24;
auVar15._8_8_ = 0;
auVar22._8_8_ = 0;
auVar22._0_8_ = dVar25 * -0.5;
auVar14 = vfmadd213sd_fma(auVar22,auVar14,auVar15);
dVar13 = auVar14._0_8_ +
dVar20 * 5.497923018708371e-14 + *(double *)(&DAT_1801023e0 + lVar6) +
(dVar13 - dVar5) + dVar25 + (dVar5 - dVar7) + dVar24 +
(((0.7999999995323976 - dVar25 * 0.6666666663487739) +
(dVar25 * 1.0000415263675542 - 1.142909628459501) * dVar24) * dVar24 +
(dVar25 * 0.5000000000000007 - 0.6666666666666679)) * dVar24 * dVar25;
dVar5 = dVar13 + dVar7;
dVar24 = dVar5 * _Y;
auVar16._0_8_ = -dVar24;
auVar16._8_8_ = 0;
uVar10 = (uint)((ulonglong)dVar24 >> 0x34) & 0x7ff;
auVar23._8_8_ = 0;
auVar23._0_8_ = dVar5;
auVar14 = vfmadd213sd_fma(auVar19._0_16_,auVar23,auVar16);
iVar4 = (int)lVar12;
uVar3 = uVar10;
if (0x3e < uVar10 - 0x3c9) {
if (0x7fffffff < uVar10 - 0x3c9) {
if (iVar4 == 0) {
return dVar24 + 1.0;
}
return -(dVar24 + 1.0);
}
uVar3 = 0;
if (0x408 < uVar10) {
if (((ulonglong)dVar24 & 0x8000000000000000) != 0) {
dVar13 = (double)FUN_18005ffb0(iVar4);
return dVar13;
}
dVar13 = FUN_1800e41c0(iVar4);
return dVar13;
}
}
dVar20 = dVar24 * 369.3299304675746 + 103079215104.5;
uVar9 = (ulonglong)dVar20 >> 0x10;
dVar20 = (double)(int)((ulonglong)dVar20 >> 0x10);
dVar13 = (dVar24 - dVar20 * 0.0027076061741126978) + dVar20 * 5.0411407304988844e-14 +
auVar14._0_8_ + ((dVar7 - dVar5) + dVar13) * _Y;
dVar5 = dVar13 * dVar13;
dVar7 = (double)((lVar12 + uVar9 << 0x2c) +
*(longlong *)(&DAT_180103448 + (uVar9 & 0xff) * 0x10));
dVar13 = (dVar13 * 0.16666666666665886 + 0.49999999999996786) * dVar5 +
dVar13 + *(double *)(&DAT_180103440 + (uVar9 & 0xff) * 0x10) +
(dVar13 * 0.008333335853047663 + 0.04166668084093659) * dVar5 * dVar5;
if (uVar3 != 0) {
return dVar13 * dVar7 + dVar7;
}
if ((uVar9 & 0x80000000) != 0) {
dVar7 = (double)((longlong)dVar7 + 0x3fe0000000000000);
dVar5 = dVar7 + dVar7 * dVar13;
auVar21._8_8_ = 0;
auVar21._0_8_ = dVar5;
auVar14 = vandpd_avx(auVar21,_DAT_1801046d0);
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_;
dVar5 = ((dVar7 - dVar5) + dVar7 * dVar13 + (dVar24 - (dVar24 + dVar5)) + dVar5 +
dVar24 + dVar5) - dVar24;
if (dVar5 == 0.0) {
dVar5 = (double)((ulonglong)dVar7 & 0x8000000000000000);
}
}
auVar17._0_4_ = FUN_18005ff78(dVar5 * 2.2250738585072014e-308);
auVar17._4_60_ = extraout_var;
return auVar17._0_8_;
}
auVar18._0_4_ =
FUN_1800a34ec(((double)((longlong)dVar7 + -0x3f10000000000000) * dVar13 +
(double)((longlong)dVar7 + -0x3f10000000000000)) * 5.486124068793689e+303) ;
auVar18._4_60_ = extraout_var_00;
return auVar18._0_8_;
}
uVar9 = (longlong)_Y * 2;
if (uVar9 - 1 < 0xffdfffffffffffff) {
if (0xffdffffffffffffe < (longlong)_X * 2 - 1U) {
dVar13 = _X * _X;
iVar11 = 0;
if ((((((ulonglong)_X & 0x8000000000000000) != 0) &&
(uVar3 = uVar2 >> 0x14 & 0x7ff, iVar11 = iVar4, uVar3 - 0x3ff < 0x35)) &&
(uVar9 = 1L << ((ulonglong)(0x433 - uVar3) & 0x3f), ((ulonglong)_Y & uVar9 - 1) == 0)) &&
(((ulonglong)_Y & uVar9) != 0)) {
dVar13 = -dVar13;
iVar11 = 1;
}
if ((longlong)_X * 2 == 0) {
if ((auVar19 & (undefined1 [64])0x8000000000000000) == (undefined1 [64])0x0) {
return dVar13;
}
dVar13 = FUN_1800a2930(iVar11);
return dVar13;
}
if ((auVar19 & (undefined1 [64])0x8000000000000000) == (undefined1 [64])0x0) {
return dVar13;
}
return 1.0 / dVar13;
}
if (((ulonglong)_X & 0x8000000000000000) != 0) {
uVar3 = uVar2 >> 0x14 & 0x7ff;
if (uVar3 < 0x3ff) {
LAB_18005fdb9:
dVar13 = FUN_1800e4180(_X);
return dVar13;
}
if (uVar3 < 0x434) {
uVar9 = 1L << ((ulonglong)(0x433 - uVar3) & 0x3f);
if (((ulonglong)_Y & uVar9 - 1) != 0) goto LAB_18005fdb9;
iVar4 = 2 - (uint)((uVar9 & (ulonglong)_Y) != 0);
}
else {
iVar4 = 2;
}
dVar13 = ABS(_X);
uVar3 = uVar10 >> 0x14 & 0x7ff;
lVar12 = 0x80000;
if (iVar4 != 1) {
lVar12 = 0;
}
}
if ((uVar8 & 0x7ff) - 0x3be < 0x80) {
if (uVar3 == 0) {
dVar13 = (double)((longlong)ABS(_X * 4503599627370496.0) + 0xfcc0000000000000);
}
goto LAB_18005f8d9;
}
if (dVar13 != 1.0) {
if (0x3bd < (uVar8 & 0x7ff)) {
if (0x3ff0000000000000 < (ulonglong)dVar13 == uVar8 < 0x800) {
dVar13 = FUN_1800e41c0(0);
return dVar13;
}
dVar13 = (double)FUN_18005ffb0(0);
return dVar13;
}
if (0x3ff0000000000000 < (ulonglong)dVar13) {
return _Y + 1.0;
}
return 1.0 - _Y;
}
LAB_18005ff1a:
dVar13 = 1.0;
}
else {
if (uVar9 == 0) {
uVar9 = (ulonglong)_X ^ 0x8000000000000;
joined_r0x00018005ff14:
if (uVar9 * 2 < 0xfff0000000000001) goto LAB_18005ff1a;
}
else {
if (_X == 1.0) {
uVar9 = (ulonglong)_Y ^ 0x8000000000000;
goto joined_r0x00018005ff14;
}
uVar1 = (longlong)_X * 2;
if ((uVar1 < 0xffe0000000000001) && (uVar9 < 0xffe0000000000001)) {
if (uVar1 != 0x7fe0000000000000) {
if ((uint)(uVar1 < 0x7fe0000000000000) == (uVar2 >> 0x1f ^ 1)) {
return 0.0;
}
return _Y * _Y;
}
goto LAB_18005ff1a;
}
}
dVar13 = _X + _Y;
}
/* WARNING: Read-only address (ram,0x0001801046d0) is written */
return dVar13;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment