uw_update_context_1
0x00bf67c0 · 887 bytes · unknown
Decompiled
undefined (0 params)
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
void uw_update_context_1(void)
{
char cVar1;
byte bVar2;
undefined4 uVar3;
undefined4 *in_EAX;
char *pcVar4;
undefined4 *puVar5;
int iVar6;
int in_EDX;
undefined4 *puVar7;
int local_c8;
undefined4 *local_c4;
undefined4 *local_c0;
int local_b8;
undefined4 local_a0;
undefined4 local_9c [4];
undefined4 *local_8c;
uint local_3c;
char acStack_30 [4];
char local_2c;
puVar7 = in_EAX;
puVar5 = local_9c;
for (iVar6 = 0x20; iVar6 != 0; iVar6 = iVar6 + -1) {
*puVar5 = *puVar7;
puVar7 = puVar7 + 1;
puVar5 = puVar5 + 1;
}
if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {
if (DAT_0105b844 != '\x04') goto LAB_00bf68f0;
if ((local_3c & 0x40000000) != 0) {
local_2c = '\0';
}
local_8c = &local_a0;
local_a0 = in_EAX[0x12];
}
if ((*(byte *)((int)in_EAX + 99) & 0x40) != 0) {
*(undefined1 *)(in_EAX + 0x1c) = 0;
}
in_EAX[4] = 0;
if (*(int *)(in_EDX + 0xa0) == 1) {
iVar6 = *(int *)(in_EDX + 0x98);
if (0x11 < iVar6) goto LAB_00bf68f0;
puVar7 = (undefined4 *)local_9c[iVar6];
if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar6] == '\0')) {
if ((&dwarf_reg_size_table)[iVar6] != '\x04') goto LAB_00bf68f0;
puVar7 = (undefined4 *)*puVar7;
}
local_b8 = (int)puVar7 + *(int *)(in_EDX + 0x94);
}
else {
if (*(int *)(in_EDX + 0xa0) != 2) {
LAB_00bf68f0:
/* WARNING: Subroutine does not return */
abort();
}
pcVar4 = *(char **)(in_EDX + 0x9c);
do {
cVar1 = *pcVar4;
pcVar4 = pcVar4 + 1;
} while (cVar1 < '\0');
local_b8 = execute_stack_op(local_9c,0);
}
local_c8 = 0;
local_c0 = in_EAX + 0x1b;
in_EAX[0x12] = local_b8;
puVar7 = (undefined4 *)(in_EDX + 4);
local_c4 = in_EAX;
LAB_00bf68b8:
switch(*puVar7) {
case 1:
puVar5 = (undefined4 *)(local_b8 + puVar7[-1]);
bVar2 = *(byte *)((int)in_EAX + 99);
goto joined_r0x00bf69b0;
case 2:
iVar6 = puVar7[-1];
if (acStack_30[iVar6] != '\0') {
if (0x11 < iVar6) goto LAB_00bf68f0;
puVar5 = (undefined4 *)local_9c[iVar6];
if ((local_3c & 0x40000000) == 0) {
if ((&dwarf_reg_size_table)[iVar6] == '\x04') {
puVar5 = (undefined4 *)*puVar5;
goto LAB_00bf6a00;
}
goto LAB_00bf68f0;
}
goto LAB_00bf6a00;
}
uVar3 = local_9c[iVar6];
if ((*(byte *)((int)in_EAX + 99) & 0x40) != 0) {
*(undefined1 *)local_c0 = 0;
}
*local_c4 = uVar3;
break;
case 3:
pcVar4 = (char *)puVar7[-1];
do {
cVar1 = *pcVar4;
pcVar4 = pcVar4 + 1;
} while (cVar1 < '\0');
puVar5 = (undefined4 *)execute_stack_op(local_9c,local_b8);
bVar2 = *(byte *)((int)in_EAX + 99);
joined_r0x00bf69b0:
if ((bVar2 & 0x40) != 0) {
*(undefined1 *)local_c0 = 0;
}
LAB_00bf6914:
*local_c4 = puVar5;
break;
case 4:
puVar5 = (undefined4 *)(local_b8 + puVar7[-1]);
bVar2 = (&dwarf_reg_size_table)[local_c8];
goto joined_r0x00bf690b;
case 5:
pcVar4 = (char *)puVar7[-1];
do {
cVar1 = *pcVar4;
pcVar4 = pcVar4 + 1;
} while (cVar1 < '\0');
puVar5 = (undefined4 *)execute_stack_op(local_9c,local_b8);
LAB_00bf6a00:
bVar2 = (&dwarf_reg_size_table)[local_c8];
joined_r0x00bf690b:
if (bVar2 < 5) {
*(undefined1 *)local_c0 = 1;
goto LAB_00bf6914;
}
goto LAB_00bf68f0;
}
local_c8 = local_c8 + 1;
puVar7 = puVar7 + 2;
local_c0 = (undefined4 *)((int)local_c0 + 1);
local_c4 = local_c4 + 1;
if (local_c8 == 0x12) {
if (*(char *)(in_EDX + 0xbb) == '\0') {
in_EAX[0x18] = in_EAX[0x18] & 0x7fffffff;
pcVar4 = (char *)in_EAX[0x13];
cVar1 = *pcVar4;
}
else {
in_EAX[0x18] = in_EAX[0x18] | 0x80000000;
pcVar4 = (char *)in_EAX[0x13];
cVar1 = *pcVar4;
}
if (((cVar1 == -0x48) && (*(int *)(pcVar4 + 1) == 0xad)) &&
((*(short *)(pcVar4 + 5) == 0x50f || (*(short *)(pcVar4 + 5) == -0x7f33)))) {
in_EAX[0x18] = in_EAX[0x18] | 0x80000000;
}
return;
}
goto LAB_00bf68b8;
}
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.