Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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;
}