uw_frame_state_for
0x00bf58b0 · 1913 bytes · unknown
Decompiled
undefined (0 params)
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
undefined4 uw_frame_state_for(void)
{
char *pcVar1;
byte bVar2;
short *psVar3;
int iVar4;
byte bVar5;
char cVar6;
byte bVar7;
byte bVar8;
int in_EAX;
int iVar9;
size_t sVar10;
byte *pbVar11;
byte *pbVar12;
uint *puVar13;
byte bVar14;
uint uVar15;
int iVar16;
int *in_EDX;
uint uVar17;
byte *pbVar18;
uint *puVar19;
int *piVar20;
int *piVar21;
bool bVar22;
char *local_4c;
uint *local_44;
byte *local_34;
int local_24;
uint local_20;
uVar17 = 0xc0;
bVar22 = ((uint)in_EDX & 1) != 0;
piVar20 = in_EDX;
if (bVar22) {
uVar17 = 0xbf;
*(undefined1 *)in_EDX = 0;
piVar20 = (int *)((int)in_EDX + 1);
}
piVar21 = piVar20;
if (((uint)piVar20 & 2) != 0) {
piVar21 = (int *)((int)piVar20 + 2);
*(undefined2 *)piVar20 = 0;
uVar17 = uVar17 - 2;
}
for (uVar15 = uVar17 >> 2; uVar15 != 0; uVar15 = uVar15 - 1) {
*piVar21 = 0;
piVar21 = piVar21 + 1;
}
piVar20 = piVar21;
if ((uVar17 & 2) != 0) {
piVar20 = (int *)((int)piVar21 + 2);
*(undefined2 *)piVar21 = 0;
}
if (bVar22) {
*(undefined1 *)piVar20 = 0;
}
*(undefined4 *)(in_EAX + 0x68) = 0;
*(undefined4 *)(in_EAX + 0x50) = 0;
if (*(int *)(in_EAX + 0x4c) == 0) {
return 5;
}
iVar9 = _Unwind_Find_FDE((*(int *)(in_EAX + 0x4c) + -1) - (*(int *)(in_EAX + 0x60) >> 0x1f),
in_EAX + 0x54);
if (iVar9 == 0) {
psVar3 = *(short **)(in_EAX + 0x4c);
iVar9 = *(int *)(in_EAX + 0x48);
if (((*psVar3 != -0x47a8) || (*(int *)(psVar3 + 1) != 0x77)) ||
(iVar16 = iVar9 + 4, psVar3[3] != -0x7f33)) {
if ((char)*psVar3 != -0x48) {
return 5;
}
if (*(int *)((int)psVar3 + 1) != 0xad) {
return 5;
}
if (*(short *)((int)psVar3 + 5) != -0x7f33) {
return 5;
}
iVar16 = iVar9 + 0xa0;
}
iVar4 = *(int *)(iVar16 + 0x1c);
in_EDX[0x28] = 1;
in_EDX[0x26] = 4;
in_EDX[1] = 1;
*in_EDX = (iVar16 + 0x2c) - iVar4;
in_EDX[6] = (iVar16 + 0x20) - iVar4;
in_EDX[2] = (iVar16 + 0x28) - iVar4;
in_EDX[4] = (iVar16 + 0x24) - iVar4;
in_EDX[0xc] = (iVar16 + 0x14) - iVar4;
in_EDX[0xe] = (iVar16 + 0x10) - iVar4;
in_EDX[0x10] = (iVar16 + 0x38) - iVar4;
in_EDX[0x25] = iVar4 - iVar9;
in_EDX[7] = 1;
in_EDX[3] = 1;
in_EDX[5] = 1;
in_EDX[0xd] = 1;
in_EDX[0xf] = 1;
in_EDX[0xb] = 1;
in_EDX[10] = (iVar16 + 0x18) - iVar4;
in_EDX[0x11] = 1;
in_EDX[0x2d] = 8;
*(undefined1 *)((int)in_EDX + 0xbb) = 1;
return 0;
}
in_EDX[0x29] = *(int *)(in_EAX + 0x5c);
iVar16 = (iVar9 + 4) - *(int *)(iVar9 + 4);
local_4c = (char *)(iVar16 + 9);
sVar10 = strlen(local_4c);
pbVar11 = (byte *)(iVar16 + 10 + sVar10);
if ((*(char *)(iVar16 + 9) == 'e') && (*(char *)(iVar16 + 10) == 'h')) {
iVar4 = *(int *)pbVar11;
pbVar11 = pbVar11 + 4;
local_4c = (char *)(iVar16 + 0xb);
in_EDX[0x2f] = iVar4;
}
if (3 < *(byte *)(iVar16 + 8)) {
if (*pbVar11 != 4) {
return 3;
}
if (pbVar11[1] != 0) {
return 3;
}
pbVar11 = pbVar11 + 2;
}
uVar17 = 0;
bVar14 = 0;
do {
bVar8 = *pbVar11;
bVar7 = bVar14 & 0x1f;
bVar14 = bVar14 + 7;
uVar17 = uVar17 | (bVar8 & 0x7f) << bVar7;
pbVar11 = pbVar11 + 1;
} while ((char)bVar8 < '\0');
in_EDX[0x2c] = uVar17;
uVar17 = 0;
pbVar11 = (byte *)read_sleb128();
bVar14 = 0;
in_EDX[0x2b] = local_24;
if (*(char *)(iVar16 + 8) == '\x01') {
pbVar18 = pbVar11 + 1;
in_EDX[0x2d] = (uint)*pbVar11;
}
else {
do {
pbVar18 = pbVar11 + 1;
bVar8 = *pbVar11;
bVar7 = bVar14 & 0x1f;
bVar14 = bVar14 + 7;
uVar17 = uVar17 | (bVar8 & 0x7f) << bVar7;
pbVar11 = pbVar18;
} while ((char)bVar8 < '\0');
in_EDX[0x2d] = uVar17;
}
*(undefined1 *)((int)in_EDX + 0xb9) = 0xff;
local_44 = (uint *)0x0;
cVar6 = *local_4c;
pcVar1 = local_4c;
if (cVar6 == 'z') {
uVar17 = 0;
bVar14 = 0;
pbVar11 = pbVar18;
do {
pbVar18 = pbVar11 + 1;
bVar8 = *pbVar11;
bVar7 = bVar14 & 0x1f;
bVar14 = bVar14 + 7;
uVar17 = uVar17 | (bVar8 & 0x7f) << bVar7;
pbVar11 = pbVar18;
} while ((char)bVar8 < '\0');
local_44 = (uint *)(pbVar18 + uVar17);
*(undefined1 *)((int)in_EDX + 0xba) = 1;
pcVar1 = local_4c + 1;
cVar6 = local_4c[1];
}
while (cVar6 != '\0') {
if (cVar6 == 'L') {
bVar14 = *pbVar18;
pbVar18 = pbVar18 + 1;
*(byte *)((int)in_EDX + 0xb9) = bVar14;
}
else if (cVar6 == 'R') {
bVar14 = *pbVar18;
pbVar18 = pbVar18 + 1;
*(byte *)(in_EDX + 0x2e) = bVar14;
}
else if (cVar6 == 'P') {
bVar14 = *pbVar18;
if (bVar14 == 0xff) goto _L223;
bVar7 = bVar14 & 0x70;
bVar8 = bVar14 & 0x70;
if (bVar7 == 0x20) {
local_34 = *(byte **)(in_EAX + 0x54);
}
else if (bVar7 < 0x21) {
if ((bVar7 != 0) && (bVar7 != 0x10)) goto _L223;
LAB_00bf5cb0:
local_34 = (byte *)0x0;
}
else if (bVar8 == 0x40) {
local_34 = *(byte **)(in_EAX + 0x5c);
}
else {
if (bVar8 == 0x50) goto LAB_00bf5cb0;
if (bVar8 != 0x30) goto _L223;
local_34 = *(byte **)(in_EAX + 0x58);
}
pbVar11 = pbVar18 + 1;
if (bVar14 == 0x50) {
pbVar11 = pbVar18 + 4;
pbVar18 = (byte *)((undefined4 *)((uint)pbVar11 & 0xfffffffc) + 1);
pbVar12 = *(byte **)((uint)pbVar11 & 0xfffffffc);
}
else {
switch(bVar14 & 0xf) {
case 0:
case 3:
case 0xb:
puVar13 = (uint *)(pbVar18 + 1);
pbVar18 = pbVar18 + 5;
uVar17 = *puVar13;
break;
case 1:
bVar7 = 0;
uVar17 = 0;
pbVar12 = pbVar11;
do {
pbVar18 = pbVar12 + 1;
bVar2 = *pbVar12;
bVar5 = bVar7 & 0x1f;
bVar7 = bVar7 + 7;
uVar17 = uVar17 | (bVar2 & 0x7f) << bVar5;
pbVar12 = pbVar18;
} while ((char)bVar2 < '\0');
break;
case 2:
uVar17 = (uint)*(ushort *)(pbVar18 + 1);
pbVar18 = pbVar18 + 3;
break;
case 4:
case 0xc:
puVar13 = (uint *)(pbVar18 + 1);
pbVar18 = pbVar18 + 9;
uVar17 = *puVar13;
break;
default:
goto _L223;
case 9:
pbVar18 = (byte *)read_sleb128();
uVar17 = local_20;
break;
case 10:
pbVar12 = pbVar18 + 1;
pbVar18 = pbVar18 + 3;
uVar17 = (int)*(short *)pbVar12;
}
pbVar12 = (byte *)0x0;
if (uVar17 != 0) {
if (bVar8 == 0x10) {
local_34 = pbVar11;
}
pbVar12 = local_34 + uVar17;
if ((char)bVar14 < '\0') {
pbVar12 = *(byte **)pbVar12;
}
}
}
in_EDX[0x2a] = (int)pbVar12;
}
else {
puVar13 = local_44;
if (cVar6 != 'S') goto LAB_00bf5dac;
*(undefined1 *)((int)in_EDX + 0xbb) = 1;
}
cVar6 = pcVar1[1];
pcVar1 = pcVar1 + 1;
}
puVar13 = (uint *)pbVar18;
if (local_44 == (uint *)0x0) {
LAB_00bf5dac:
if (puVar13 == (uint *)0x0) {
return 3;
}
}
execute_cfa_program(in_EAX);
if (*(byte *)(in_EDX + 0x2e) == 0xff) {
iVar16 = 0;
}
else {
bVar14 = *(byte *)(in_EDX + 0x2e) & 7;
if (bVar14 == 2) {
iVar16 = 4;
}
else {
if (bVar14 < 3) {
if (bVar14 != 0) goto _L223;
}
else if (bVar14 != 3) {
iVar16 = 0x10;
if (bVar14 != 4) goto _L223;
goto LAB_00bf5b73;
}
iVar16 = 8;
}
}
LAB_00bf5b73:
puVar13 = (uint *)(iVar9 + 8 + iVar16);
puVar19 = puVar13;
if (*(char *)((int)in_EDX + 0xba) != '\0') {
do {
puVar19 = (uint *)((int)puVar13 + 1);
uVar17 = *puVar13;
puVar13 = puVar19;
} while ((char)(byte)uVar17 < '\0');
}
bVar14 = *(byte *)((int)in_EDX + 0xb9);
if (bVar14 == 0xff) goto code_r0x00bf5cfa;
bVar8 = bVar14 & 0x70;
local_4c._0_1_ = bVar14 & 0x70;
if (bVar8 == 0x20) {
local_44 = *(uint **)(in_EAX + 0x54);
}
else if (bVar8 < 0x21) {
if ((bVar8 != 0) && (bVar8 != 0x10)) goto _L223;
LAB_00bf5e9e:
local_44 = (uint *)0x0;
}
else if ((byte)local_4c == 0x40) {
local_44 = *(uint **)(in_EAX + 0x5c);
}
else {
if ((byte)local_4c == 0x50) goto LAB_00bf5e9e;
if ((byte)local_4c != 0x30) goto _L223;
local_44 = *(uint **)(in_EAX + 0x58);
}
if (bVar14 == 0x50) {
pbVar11 = *(byte **)((uint)((int)puVar19 + 3U) & 0xfffffffc);
}
else {
switch(bVar14 & 0xf) {
case 0:
case 3:
case 0xb:
local_20 = *puVar19;
break;
case 1:
bVar8 = 0;
local_20 = 0;
puVar13 = puVar19;
do {
uVar17 = *puVar13;
bVar7 = bVar8 & 0x1f;
bVar8 = bVar8 + 7;
local_20 = local_20 | ((byte)uVar17 & 0x7f) << bVar7;
puVar13 = (uint *)((int)puVar13 + 1);
} while ((char)(byte)uVar17 < '\0');
break;
case 2:
local_20 = (uint)(ushort)*puVar19;
break;
case 4:
case 0xc:
local_20 = *puVar19;
break;
default:
_L223:
/* WARNING: Subroutine does not return */
abort();
case 9:
read_sleb128();
break;
case 10:
local_20 = (uint)(short)(ushort)*puVar19;
}
pbVar11 = (byte *)0x0;
if (local_20 != 0) {
if ((byte)local_4c == 0x10) {
local_44 = puVar19;
}
pbVar11 = (byte *)((int)local_44 + local_20);
if ((char)bVar14 < '\0') {
pbVar11 = *(byte **)pbVar11;
}
}
}
*(byte **)(in_EAX + 0x50) = pbVar11;
code_r0x00bf5cfa:
execute_cfa_program(in_EAX);
return 0;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
⚠ This function has no mangled symbol — it may be internal/static. The
Linux gamedata field uses @-prefix symbol resolution which
requires an exported mangled name. You'll need a Linux byte signature
for this one (extract via extract_signature.java).
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.