_Unwind_Find_FDE
0x0029f930 · 463 bytes · unknown
Decompiled
undefined (0 params)
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
int _Unwind_Find_FDE(uint param_1,uint *param_2)
{
int iVar1;
uint *puVar2;
uint *puVar3;
uint *puVar4;
uint local_34;
uint local_30;
uint local_2c;
uint local_28;
int local_24;
undefined4 local_20;
undefined4 uStack_14;
uStack_14 = 0x29f939;
pthread_mutex_lock((pthread_mutex_t *)object_mutex);
for (puVar4 = seen_objects; puVar4 != (uint *)0x0; puVar4 = (uint *)puVar4[5]) {
if (*puVar4 <= param_1) {
iVar1 = search_object();
if (iVar1 != 0) goto LAB_0029f995;
break;
}
}
do {
puVar4 = unseen_objects;
if (unseen_objects == (uint *)0x0) {
iVar1 = 0;
break;
}
unseen_objects = (uint *)unseen_objects[5];
iVar1 = search_object();
puVar2 = seen_objects;
if ((seen_objects == (uint *)0x0) || (*seen_objects < *puVar4)) {
puVar3 = (uint *)&seen_objects;
}
else {
do {
puVar3 = puVar2 + 5;
puVar2 = (uint *)puVar2[5];
if (puVar2 == (uint *)0x0) {
puVar4[5] = 0;
*puVar3 = (uint)puVar4;
goto joined_r0x0029fa6d;
}
} while (*puVar4 <= *puVar2);
}
puVar4[5] = (uint)puVar2;
*puVar3 = (uint)puVar4;
joined_r0x0029fa6d:
} while (iVar1 == 0);
LAB_0029f995:
pthread_mutex_unlock((pthread_mutex_t *)object_mutex);
if (iVar1 == 0) {
local_34 = param_1;
local_30 = 0;
local_2c = 0;
local_28 = 0;
local_24 = 0;
local_20 = 1;
iVar1 = dl_iterate_phdr(_Unwind_IteratePhdrCallback,&local_34);
if (iVar1 < 0) {
local_24 = 0;
}
else if (local_24 != 0) {
*param_2 = local_30;
param_2[1] = local_2c;
param_2[2] = local_28;
}
}
else {
*param_2 = puVar4[1];
param_2[1] = puVar4[2];
if ((puVar4[4] & 4) != 0) {
get_cie_encoding();
}
base_from_object_isra_3(puVar4 + 2);
read_encoded_value_with_base(iVar1 + 8,&local_34);
param_2[2] = local_34;
local_24 = iVar1;
}
return local_24;
}
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.