コード例 #1
0
ファイル: accessors.c プロジェクト: namidairo/libvmi
/* convert a symbol into an address */
status_t vmi_translate_sym2v (vmi_instance_t vmi, const access_context_t *ctx, const char *symbol, addr_t *vaddr)
{
    status_t status;
    addr_t rva = 0;
    addr_t address = 0;
    addr_t dtb = 0;

    switch(ctx->translate_mechanism) {
        case VMI_TM_PROCESS_PID:
            if ( VMI_FAILURE == vmi_pid_to_dtb(vmi, ctx->pid, &dtb) )
                return VMI_FAILURE;
            break;
        case VMI_TM_PROCESS_DTB:
            dtb = ctx->dtb;
            break;
        default:
            dbprint(VMI_DEBUG_MISC, "sym2v only supported in a virtual context!\n");
            return VMI_FAILURE;
    };

    status = sym_cache_get(vmi, ctx->addr, dtb, symbol, &address);
    if( VMI_FAILURE == status) {
        if (vmi->os_interface && vmi->os_interface->os_usym2rva) {
            status  = vmi->os_interface->os_usym2rva(vmi, ctx, symbol, &rva);
            if ( VMI_SUCCESS == status ) {
                address = canonical_addr(ctx->addr + rva);
                sym_cache_set(vmi, ctx->addr, dtb, symbol, address);
            }
        }
    }

    *vaddr = address;
    return status;
}
コード例 #2
0
ファイル: accessors.c プロジェクト: WaitXie/libvmi
/* convert a symbol into an address */
addr_t vmi_translate_sym2v (vmi_instance_t vmi, addr_t base_vaddr, vmi_pid_t pid, char *symbol)
{
    status_t status = VMI_FAILURE;
    addr_t rva = 0;
    addr_t address = 0;

    if (VMI_FAILURE == sym_cache_get(vmi, base_vaddr, pid, symbol, &address)) {

        if (vmi->os_interface && vmi->os_interface->os_usym2rva) {
            status  = vmi->os_interface->os_usym2rva(vmi, base_vaddr, pid, symbol, &rva);
            if (status == VMI_SUCCESS) {
                address = base_vaddr + rva;
                sym_cache_set(vmi, base_vaddr, pid, symbol, address);
            }
        }
    }

    return address;
}
コード例 #3
0
ファイル: accessors.c プロジェクト: WaitXie/libvmi
/* convert a kernel symbol into an address */
addr_t vmi_translate_ksym2v (vmi_instance_t vmi, const char *symbol)
{
    status_t status = VMI_FAILURE;
    addr_t base_vaddr = 0;
    addr_t address = 0;

    if (VMI_FAILURE == sym_cache_get(vmi, base_vaddr, 0, symbol, &address)) {

        if (vmi->os_interface && vmi->os_interface->os_ksym2v) {
            status = vmi->os_interface->os_ksym2v(vmi, symbol, &base_vaddr,
                    &address);
            if (status == VMI_SUCCESS) {
                sym_cache_set(vmi, base_vaddr, 0, symbol, address);
            }
        }
    }

    return address;
}
コード例 #4
0
ファイル: accessors.c プロジェクト: namidairo/libvmi
/* convert a kernel symbol into an address */
status_t vmi_translate_ksym2v (vmi_instance_t vmi, const char *symbol, addr_t *vaddr)
{
    status_t status = VMI_FAILURE;
    addr_t address = 0;

    status = sym_cache_get(vmi, 0, 0, symbol, &address);

    if ( VMI_FAILURE == status ) {
        if (vmi->os_interface && vmi->os_interface->os_ksym2v) {
            addr_t _base_vaddr;
            status = vmi->os_interface->os_ksym2v(vmi, symbol, &_base_vaddr, &address);
            if ( VMI_SUCCESS == status ) {
                address = canonical_addr(address);
                sym_cache_set(vmi, 0, 0, symbol, address);
            }
        }
    }

    *vaddr = address;
    return status;
}