execute_cfa_program
0x00bf4f20 · 2298 bytes · unknown
Decompiled
undefined (0 params)
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
void execute_cfa_program(int param_1,undefined4 *param_2)
{
byte bVar1;
byte bVar2;
byte *in_EAX;
byte *pbVar3;
undefined4 *puVar4;
byte bVar5;
byte bVar6;
byte *in_EDX;
uint uVar7;
byte *pbVar8;
undefined1 *puVar9;
undefined4 *puVar10;
uint uVar11;
int iVar12;
undefined4 *puVar13;
byte bVar14;
undefined1 auStack_4c [7];
byte local_45;
byte *local_44;
undefined4 *local_40;
uint *local_3c;
uint local_38;
byte *local_34;
byte *local_30;
uint local_20 [4];
bVar14 = 0;
puVar9 = auStack_4c;
param_2[0x24] = 0;
if ((in_EAX < in_EDX) &&
(uVar11 = param_2[0x29],
uVar11 < (uint)(*(int *)(param_1 + 0x4c) - (*(int *)(param_1 + 0x60) >> 0x1f)))) {
local_3c = local_20;
local_40 = (undefined4 *)0x0;
local_34 = in_EDX;
do {
uVar7 = (uint)*in_EAX;
local_30 = in_EAX + 1;
bVar5 = *in_EAX & 0xc0;
pbVar3 = local_30;
if (bVar5 == 0x40) {
param_2[0x29] = (uVar7 & 0x3f) * param_2[0x2c] + uVar11;
goto LAB_00bf4fc7;
}
if (bVar5 == 0x80) {
uVar11 = 0;
uVar7 = uVar7 & 0x3f;
bVar5 = 0;
do {
pbVar3 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar3;
} while ((char)bVar6 < '\0');
iVar12 = uVar11 * param_2[0x2b];
local_38 = uVar7;
joined_r0x00bf5029:
if (uVar7 < 0x12) {
(param_2 + uVar7 * 2)[1] = 1;
param_2[uVar7 * 2] = iVar12;
}
goto LAB_00bf4fc7;
}
if (bVar5 == 0xc0) {
if (0x11 < (uVar7 & 0x3f)) goto _L122;
param_2[(uVar7 & 0x3f) * 2 + 1] = 0;
goto LAB_00bf4fc7;
}
switch(uVar7) {
case 0:
case 0x2d:
_L122:
break;
case 1:
bVar5 = *(byte *)(param_2 + 0x2e);
if (bVar5 == 0xff) goto _L19;
bVar6 = bVar5 & 0x70;
local_38 = CONCAT31(local_38._1_3_,bVar5) & 0xffffff70;
if (bVar6 == 0x20) {
local_44 = *(byte **)(param_1 + 0x54);
}
else if (bVar6 < 0x21) {
if ((bVar6 != 0) && (bVar6 != 0x10)) goto _L19;
LAB_00bf577f:
local_44 = (byte *)0x0;
}
else if ((char)local_38 == '@') {
local_44 = *(byte **)(param_1 + 0x5c);
}
else {
if ((char)local_38 == 'P') goto LAB_00bf577f;
if ((char)local_38 != '0') goto _L19;
local_44 = *(byte **)(param_1 + 0x58);
}
if (bVar5 == 0x50) {
pbVar3 = (byte *)((undefined4 *)((uint)(in_EAX + 4) & 0xfffffffc) + 1);
pbVar8 = *(byte **)((uint)(in_EAX + 4) & 0xfffffffc);
}
else {
switch(bVar5 & 0xf) {
case 0:
case 3:
case 0xb:
pbVar3 = in_EAX + 5;
uVar11 = *(uint *)(in_EAX + 1);
break;
case 1:
uVar11 = 0;
bVar6 = 0;
pbVar8 = local_30;
do {
pbVar3 = pbVar8 + 1;
bVar1 = *pbVar8;
bVar2 = bVar6 & 0x1f;
bVar6 = bVar6 + 7;
uVar11 = uVar11 | (bVar1 & 0x7f) << bVar2;
pbVar8 = pbVar3;
local_45 = bVar5;
} while ((char)bVar1 < '\0');
break;
case 2:
uVar11 = (uint)*(ushort *)(in_EAX + 1);
pbVar3 = in_EAX + 3;
break;
case 4:
case 0xc:
pbVar3 = in_EAX + 9;
uVar11 = *(uint *)(in_EAX + 1);
break;
default:
_L19:
/* WARNING: Subroutine does not return */
*(undefined4 *)(puVar9 + -4) = 0xbf5075;
abort();
case 9:
*(undefined4 *)(puVar9 + -4) = 0xbf579f;
pbVar3 = (byte *)read_sleb128();
uVar11 = local_20[0];
break;
case 10:
pbVar3 = in_EAX + 3;
uVar11 = (int)*(short *)(in_EAX + 1);
}
pbVar8 = (byte *)0x0;
if (uVar11 != 0) {
pbVar8 = local_44;
if ((char)local_38 == '\x10') {
pbVar8 = local_30;
}
pbVar8 = pbVar8 + uVar11;
if ((char)bVar5 < '\0') {
pbVar8 = *(byte **)pbVar8;
}
}
}
param_2[0x29] = pbVar8;
break;
case 2:
pbVar3 = in_EAX + 2;
param_2[0x29] = (uint)in_EAX[1] * param_2[0x2c] + uVar11;
break;
case 3:
pbVar3 = in_EAX + 3;
param_2[0x29] = (uint)*(ushort *)(in_EAX + 1) * param_2[0x2c] + uVar11;
break;
case 4:
pbVar3 = in_EAX + 5;
param_2[0x29] = *(int *)(in_EAX + 1) * param_2[0x2c] + uVar11;
break;
case 5:
uVar7 = 0;
bVar5 = 0;
do {
pbVar8 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar7 = uVar7 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar8;
} while ((char)bVar6 < '\0');
uVar11 = 0;
bVar5 = 0;
do {
pbVar3 = pbVar8 + 1;
bVar6 = *pbVar8;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
pbVar8 = pbVar3;
} while ((char)bVar6 < '\0');
iVar12 = uVar11 * param_2[0x2b];
goto joined_r0x00bf5029;
case 6:
uVar11 = 0;
bVar5 = 0;
do {
pbVar3 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar3;
} while ((char)bVar6 < '\0');
goto LAB_00bf51d1;
case 7:
uVar11 = 0;
bVar5 = 0;
do {
pbVar3 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar3;
} while ((char)bVar6 < '\0');
if (uVar11 < 0x12) {
param_2[uVar11 * 2 + 1] = 6;
}
break;
case 8:
uVar11 = 0;
bVar5 = 0;
do {
pbVar3 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar3;
} while ((char)bVar6 < '\0');
LAB_00bf51d1:
if (uVar11 < 0x12) {
param_2[uVar11 * 2 + 1] = 0;
}
break;
case 9:
uVar11 = 0;
bVar5 = 0;
do {
pbVar8 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar8;
} while ((char)bVar6 < '\0');
bVar5 = 0;
uVar7 = 0;
do {
pbVar3 = pbVar8 + 1;
bVar6 = *pbVar8;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar7 = uVar7 | (bVar6 & 0x7f) << bVar1;
pbVar8 = pbVar3;
} while ((char)bVar6 < '\0');
if (uVar11 < 0x12) {
(param_2 + uVar11 * 2)[1] = 2;
param_2[uVar11 * 2] = uVar7;
}
break;
case 10:
if (local_40 == (undefined4 *)0x0) {
puVar4 = (undefined4 *)((uint)(puVar9 + -0xb1) & 0xfffffff0);
puVar9 = puVar9 + -0xc0;
}
else {
puVar4 = local_40;
local_40 = (undefined4 *)local_40[0x24];
}
puVar10 = param_2;
puVar13 = puVar4;
for (iVar12 = 0x29; iVar12 != 0; iVar12 = iVar12 + -1) {
*puVar13 = *puVar10;
puVar10 = puVar10 + (uint)bVar14 * -2 + 1;
puVar13 = puVar13 + (uint)bVar14 * -2 + 1;
}
param_2[0x24] = puVar4;
break;
case 0xb:
puVar4 = (undefined4 *)param_2[0x24];
puVar10 = puVar4;
puVar13 = param_2;
for (iVar12 = 0x29; iVar12 != 0; iVar12 = iVar12 + -1) {
*puVar13 = *puVar10;
puVar10 = puVar10 + (uint)bVar14 * -2 + 1;
puVar13 = puVar13 + (uint)bVar14 * -2 + 1;
}
puVar4[0x24] = local_40;
local_40 = puVar4;
break;
case 0xc:
uVar11 = 0;
bVar5 = 0;
do {
pbVar8 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar8;
} while ((char)bVar6 < '\0');
bVar5 = 0;
param_2[0x26] = uVar11;
uVar11 = 0;
do {
pbVar3 = pbVar8 + 1;
bVar6 = *pbVar8;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
pbVar8 = pbVar3;
} while ((char)bVar6 < '\0');
param_2[0x25] = uVar11;
param_2[0x28] = 1;
break;
case 0xd:
uVar11 = 0;
bVar5 = 0;
do {
pbVar3 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar3;
} while ((char)bVar6 < '\0');
param_2[0x26] = uVar11;
param_2[0x28] = 1;
break;
case 0xe:
uVar11 = 0;
bVar5 = 0;
do {
pbVar3 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar3;
} while ((char)bVar6 < '\0');
param_2[0x25] = uVar11;
break;
case 0xf:
bVar5 = 0;
param_2[0x28] = 2;
param_2[0x27] = local_30;
uVar11 = 0;
do {
pbVar3 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar3;
} while ((char)bVar6 < '\0');
pbVar3 = pbVar3 + uVar11;
break;
case 0x10:
bVar5 = 0;
uVar11 = 0;
do {
pbVar3 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar3;
} while ((char)bVar6 < '\0');
if (uVar11 < 0x12) {
(param_2 + uVar11 * 2)[1] = 3;
param_2[uVar11 * 2] = pbVar3;
}
uVar11 = 0;
bVar5 = 0;
do {
pbVar8 = pbVar3 + 1;
bVar6 = *pbVar3;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
pbVar3 = pbVar8;
} while ((char)bVar6 < '\0');
pbVar3 = pbVar8 + uVar11;
break;
case 0x11:
bVar5 = 0;
uVar11 = 0;
do {
bVar6 = *pbVar3;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
pbVar3 = pbVar3 + 1;
} while ((char)bVar6 < '\0');
*(undefined4 *)(puVar9 + -4) = 0xbf54c3;
pbVar3 = (byte *)read_sleb128();
iVar12 = param_2[0x2b];
if (uVar11 < 0x12) {
(param_2 + uVar11 * 2)[1] = 1;
param_2[uVar11 * 2] = iVar12 * local_20[0];
}
break;
case 0x12:
bVar5 = 0;
uVar11 = 0;
do {
bVar6 = *pbVar3;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
pbVar3 = pbVar3 + 1;
} while ((char)bVar6 < '\0');
param_2[0x26] = uVar11;
*(undefined4 *)(puVar9 + -4) = 0xbf5524;
pbVar3 = (byte *)read_sleb128();
param_2[0x28] = 1;
param_2[0x25] = local_20[0] * param_2[0x2b];
break;
case 0x13:
*(undefined4 *)(puVar9 + -4) = 0xbf5551;
pbVar3 = (byte *)read_sleb128();
param_2[0x25] = local_20[0] * param_2[0x2b];
break;
case 0x14:
uVar11 = 0;
bVar5 = 0;
do {
pbVar8 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar8;
} while ((char)bVar6 < '\0');
uVar7 = 0;
bVar5 = 0;
do {
pbVar3 = pbVar8 + 1;
bVar6 = *pbVar8;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar7 = uVar7 | (bVar6 & 0x7f) << bVar1;
pbVar8 = pbVar3;
} while ((char)bVar6 < '\0');
iVar12 = param_2[0x2b];
if (uVar11 < 0x12) {
(param_2 + uVar11 * 2)[1] = 4;
param_2[uVar11 * 2] = uVar7 * iVar12;
}
break;
case 0x15:
bVar5 = 0;
uVar11 = 0;
do {
bVar6 = *pbVar3;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
pbVar3 = pbVar3 + 1;
} while ((char)bVar6 < '\0');
*(undefined4 *)(puVar9 + -4) = 0xbf560b;
pbVar3 = (byte *)read_sleb128();
iVar12 = param_2[0x2b];
if (uVar11 < 0x12) {
(param_2 + uVar11 * 2)[1] = 4;
param_2[uVar11 * 2] = iVar12 * local_20[0];
}
break;
case 0x16:
bVar5 = 0;
uVar11 = 0;
do {
pbVar3 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar3;
} while ((char)bVar6 < '\0');
if (uVar11 < 0x12) {
(param_2 + uVar11 * 2)[1] = 5;
param_2[uVar11 * 2] = pbVar3;
}
uVar11 = 0;
bVar5 = 0;
do {
pbVar8 = pbVar3 + 1;
bVar6 = *pbVar3;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
pbVar3 = pbVar8;
} while ((char)bVar6 < '\0');
pbVar3 = pbVar8 + uVar11;
break;
default:
goto _L19;
case 0x2e:
uVar11 = 0;
bVar5 = 0;
do {
pbVar3 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar3;
} while ((char)bVar6 < '\0');
*(uint *)(param_1 + 0x68) = uVar11;
break;
case 0x2f:
uVar11 = 0;
bVar5 = 0;
do {
pbVar8 = local_30 + 1;
bVar6 = *local_30;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar11 = uVar11 | (bVar6 & 0x7f) << bVar1;
local_30 = pbVar8;
} while ((char)bVar6 < '\0');
uVar7 = 0;
bVar5 = 0;
do {
pbVar3 = pbVar8 + 1;
bVar6 = *pbVar8;
bVar1 = bVar5 & 0x1f;
bVar5 = bVar5 + 7;
uVar7 = uVar7 | (bVar6 & 0x7f) << bVar1;
pbVar8 = pbVar3;
} while ((char)bVar6 < '\0');
iVar12 = param_2[0x2b];
if (uVar11 < 0x12) {
(param_2 + uVar11 * 2)[1] = 1;
param_2[uVar11 * 2] = -(uVar7 * iVar12);
}
}
LAB_00bf4fc7:
} while ((pbVar3 < local_34) &&
(uVar11 = param_2[0x29], in_EAX = pbVar3,
uVar11 < (uint)(*(int *)(param_1 + 0x4c) - (*(int *)(param_1 + 0x60) >> 0x1f))));
}
return;
}
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.