首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QEMU进行机器级指令跟踪监控?

使用QEMU进行机器级指令跟踪监控?
EN

Stack Overflow用户
提问于 2020-11-27 19:24:17
回答 1查看 144关注 0票数 0

我已经开发了一个用于跟踪特定机器级指令(cmp,...)的英特尔拼接工具。一个给定的程序。

现在我发现我应该将这个任务切换到QEMU,但实际上我之前没有开发基于QEMU的工具的经验,事实上我也没有找到太多关于这方面的文档。

那么,如何使用QEMU跟踪特定的机器指令呢?

我真的应该将其开发为QEMU的TCG插件吗?还是有其他方法可以做到这一点?

谢谢!

附言:我发现这段代码是作为QEMU TCG插件进行指令级跟踪的:

代码语言:javascript
复制
    TCGTemp *args[1];
    TCGv_i64 tcgv_str;
    size_t size = MAX_PRINT_SIZE*sizeof(char);
    size_t left;
    char *str = g_malloc(size);
    char *ptr;
    size_t count;
    int i;

    ptr = str;
    left = size;
    count = snprintf(ptr, left,
                         "0x%"PRIx64":\t %s\t %s\t //",
                         insn->address,
                         insn->mnemonic,
                         insn->op_str);
        for (i = 0; i < insn->size && count < left; i++) {
            left -= count;
            ptr += count;
            count = snprintf(ptr, left, " %02x", insn->bytes[i]);
        }
        if (count < left) {
            left -= count;
            ptr += count;
            snprintf(ptr, left, "\n");
        }
        snprintf(str + size - 5, 5, "...\n");
    
        tcgv_str = tcg_const_i64((uint64_t)(intptr_t)str);
    
        args[0] = tcgv_i64_temp(tcgv_str);
    
        tcg_gen_callN(write_str, TCG_CALL_DUMMY_ARG, 1, args);
    
        tcg_temp_free_i64(tcgv_str);

是否有可能将TCG插件的整个代码合并到QEMU的基础中,以便在运行来宾系统时可以将其用作QEMU的补丁?

EN

回答 1

Stack Overflow用户

发布于 2020-11-27 23:50:38

是的,如果你需要基于QEMU来做这件事,TCG插件是你最好的选择。唯一的另一种方法最终会试图修改QEMU自己的源代码,这将是痛苦的,而且从长远来看,这不是一个可维护的解决方案。

值得检查的是,使用QEMU是否是一个硬需求-- QEMU的主要关注点是快速运行来宾代码,而且从历史上看,它并不真正支持来宾代码的“插装”-- TCG插件是最近才添加的。根据您所做的工作,您可能还希望评估DynamoRIO或valgrind。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65036553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档