Beispiel #1
0
bool drakvuf_get_current_thread_previous_mode( drakvuf_t drakvuf,
                                               uint64_t vcpu_id, const x86_registers_t *regs,
                                               privilege_mode_t *previous_mode )
{
    addr_t kthread = drakvuf_get_current_thread( drakvuf, vcpu_id, regs );

    return drakvuf_get_thread_previous_mode( drakvuf, kthread, previous_mode );
}
Beispiel #2
0
addr_t drakvuf_get_current_process(drakvuf_t drakvuf, uint64_t vcpu_id, x86_registers_t *regs) {
    addr_t thread, process;

    thread=drakvuf_get_current_thread(drakvuf,vcpu_id,regs);

    if (thread == 0 || VMI_SUCCESS != vmi_read_addr_va(drakvuf->vmi, thread + offsets[KTHREAD_PROCESS], 0, &process)){
        return 0;
    }

    return process;
}
Beispiel #3
0
bool drakvuf_get_current_thread_id( drakvuf_t drakvuf, uint64_t vcpu_id, const x86_registers_t *regs,
                                    uint32_t *thread_id )
{
    addr_t p_tid ;
    addr_t ethread = drakvuf_get_current_thread( drakvuf, vcpu_id, regs );

    if ( ethread )
    {
        if ( vmi_read_addr_va( drakvuf->vmi, ethread + drakvuf->offsets[ ETHREAD_CID ] + drakvuf->offsets[ CLIENT_ID_UNIQUETHREAD ],
                               0,
                               &p_tid ) == VMI_SUCCESS )
        {
            *thread_id = p_tid;

            return true;
        }
    }

    return false ;
}