boolean DEH_SetStringMapping(deh_context_t *context, deh_mapping_t *mapping, void *structptr, char *name, char *value) { deh_mapping_entry_t *entry; void *location; entry = GetMappingEntryByName(context, mapping, name); if (entry == NULL) { return false; } // Sanity check: if (!entry->is_string) { DEH_Error(context, "Tried to set '%s' as string (BUG)", name); return false; } location = GetStructField(structptr, mapping, entry); // Copy value into field: M_StringCopy(location, value, entry->size); return true; }
Type GetStructValTempl(PSYM_FIELD pStruct, const char *name, Type defVal) { Type val = defVal; PSYM_FIELD pField = GetStructField(pStruct, name); if (pField != NULL) val = *((Type *)(pField->fieldData)); return val; }
boolean DEH_SetMapping(deh_context_t *context, deh_mapping_t *mapping, void *structptr, char *name, int value) { deh_mapping_entry_t *entry; void *location; entry = GetMappingEntryByName(context, mapping, name); if (entry == NULL) { return false; } // Sanity check: if (entry->is_string) { DEH_Error(context, "Tried to set '%s' as integer (BUG)", name); return false; } location = GetStructField(structptr, mapping, entry); // printf("Setting %p::%s to %i (%i bytes)\n", // structptr, name, value, entry->size); // Set field content based on its type: switch (entry->size) { case 1: * ((uint8_t *) location) = value; break; case 2: * ((uint16_t *) location) = value; break; case 4: * ((uint32_t *) location) = value; break; default: DEH_Error(context, "Unknown field type for '%s' (BUG)", name); return false; } return true; }
WDBG_PTR GetStructPointer(PCMD_CTX ctx, PSYM_FIELD pStruct, const char *name) { WDBG_PTR val = 0; PSYM_FIELD pField = GetStructField(pStruct, name); if (pField != NULL) { if (ctx->pointerLen == 8) { ULONG64 ptr = *((ULONG64 *)(pField->fieldData)); val = ptr; } else { ULONG32 ptr = *((ULONG32 *)(pField->fieldData)); val = SIGN_EXTEND32(ptr); } } return val; }