コード例 #1
0
ファイル: test_shm_snapshot.c プロジェクト: chonghw/libvmi
END_TEST

#if ENABLE_KVM == 1
/* test vmi_get_dgvma */
// we use vmi_read_va() to verify vmi_get_dgvma()
START_TEST (test_vmi_get_dgvma)
{
    vmi_instance_t vmi = NULL;
    vmi_init(&vmi, VMI_AUTO | VMI_INIT_COMPLETE, get_testvm());
    vmi_shm_snapshot_create(vmi);

    addr_t va = 0x0;
    size_t count = 4096;
    unsigned long max_size = 0xffff;
    void *buf_readva = malloc(count);
    void *buf_dgvma = NULL;
    for (; va + count <= max_size; va += count) {
        size_t read_va = vmi_read_va(vmi, va, 0, buf_readva, count);
        size_t read_dgvma = vmi_get_dgvma(vmi, va, 0, &buf_dgvma, count);
        fail_unless(read_va == read_dgvma, "vmi_get_dgvma(0x%"PRIx64
            ") read size %d dosn't conform to %d of vmi_read_va()",
            va, read_dgvma, read_va);

        int cmp = memcmp(buf_readva, buf_dgvma, read_va);
        fail_unless(0 == cmp, "vmi_get_dgvma(0x%"PRIx64
            ") contents dosn't conform to vmi_read_va()", va);
    }
    free(buf_readva);

    vmi_shm_snapshot_destroy(vmi);
    vmi_destroy(vmi);
}
コード例 #2
0
ファイル: test_shm_snapshot.c プロジェクト: chonghw/libvmi
END_TEST

/* test vmi_get_dgpma */
// we use vmi_read_pa() to verify vmi_get_dgpma()
START_TEST (test_vmi_get_dgpma)
{
    vmi_instance_t vmi = NULL;
    vmi_init(&vmi, VMI_AUTO | VMI_INIT_COMPLETE, get_testvm());
    vmi_shm_snapshot_create(vmi);

    addr_t pa = 0x1000; // just because vmi_read_page() deny to fetch frame 0.
    size_t count = 4096;
    unsigned long max_size = vmi_get_max_physical_address(vmi);
    void *buf_readpa = malloc(count);
    void *buf_dgpma = NULL;
    for (; pa + count <= max_size; pa += count) {
        size_t read_pa = vmi_read_pa(vmi, pa, buf_readpa, count);
        size_t read_dgpma = vmi_get_dgpma(vmi, pa, &buf_dgpma, count);

        if (read_pa == 0 && read_dgpma == 0) {
            continue;
        }

        fail_unless(read_pa == read_dgpma, "vmi_get_dgpma(0x%"PRIx64
            ") read size %d dosn't conform to %d of vmi_read_pa()",
            pa, read_dgpma, read_pa);

        int cmp = memcmp(buf_readpa, buf_dgpma, read_pa);
        fail_unless(0 == cmp, "vmi_get_dgpma(0x%"PRIx64
            ") contents dosn't conform to vmi_read_pa()", pa);
    }
    free(buf_readpa);

    vmi_shm_snapshot_destroy(vmi);
    vmi_destroy(vmi);
}
コード例 #3
0
int main (int argc, char **argv)
{
    /* this is the VM or file that we are looking at */
    if (argc != 2) {
        printf("Usage: %s <vmname>\n", argv[0]);
        return 1;
    }

#if ENABLE_SHM_SNAPSHOT == 1
    vmi_instance_t vmi;
    addr_t list_head = 0, current_list_entry = 0, next_list_entry = 0;
    addr_t current_process = 0;
    char *procname = NULL;
    vmi_pid_t pid = 0;
    unsigned long tasks_offset, pid_offset, name_offset;

    char *name = argv[1];

    /* initialize the libvmi library */
    if (vmi_init(&vmi, VMI_AUTO | VMI_INIT_COMPLETE, name) == VMI_FAILURE) {
        printf("Failed to init LibVMI library.\n");
        return 1;
    }

    /* init the offset values */
    if (VMI_OS_LINUX == vmi_get_ostype(vmi)) {
        tasks_offset = vmi_get_offset(vmi, "linux_tasks");
        name_offset = vmi_get_offset(vmi, "linux_name");
        pid_offset = vmi_get_offset(vmi, "linux_pid");

        /* NOTE: 
         *  name_offset is no longer hard-coded. Rather, it is now set 
         *  via libvmi.conf.
         */
    }
    else if (VMI_OS_WINDOWS == vmi_get_ostype(vmi)) {
        tasks_offset = vmi_get_offset(vmi, "win_tasks");
        if (0 == tasks_offset) {
            printf("Failed to find win_tasks\n");
            goto error_exit;
        }
        name_offset = vmi_get_offset(vmi, "win_pname");
        if (0 == name_offset) {
            printf("Failed to find win_pname\n");
            goto error_exit;
        }
        pid_offset = vmi_get_offset(vmi, "win_pid");
        if (0 == pid_offset) {
            printf("Failed to find win_pid\n");
            goto error_exit;
        }
    }

    /* create a shm-snapshot */
    if (vmi_shm_snapshot_create(vmi) != VMI_SUCCESS) {
        printf("Failed to shm-snapshot VM\n");
        goto error_exit;
    }

    /* demonstrate name and id accessors */
    list_processes(vmi, current_process, list_head, tasks_offset,
        current_list_entry, next_list_entry, pid_offset, pid,
        procname, name_offset);

    error_exit: if (procname)
        free(procname);

    /* destroy the shm-snapshot, and return live mode */
    vmi_shm_snapshot_destroy(vmi);

    /* cleanup any memory associated with the LibVMI instance */
    vmi_destroy(vmi);

    return 0;
#else
    printf("Error : this example should only run after ./configure --enable-shm-snapshot.\n");
    return 1; // error
#endif

}