L L4D2node

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 into addons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)

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.



        
        

⚠ 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.

Return-type handling cheatsheet (DHookReturn)