【发布时间】:2012-02-14 04:27:33
【问题描述】:
朋友们,我正在开发一个内部架构模拟器,用于模拟运行在不同架构参数(如内核、内存层次结构和互连)上的代码的时序效应。
我正在开发一个模块,从“PinTool”和“qemu-linux-user”等模拟器获取正在运行的程序的实际跟踪,并将此跟踪提供给模拟器。
到目前为止,我的方法是这样的: 1) 获取二进制可执行文件的 objdump 并解析此信息。 2) 现在模拟器只需要给我一个指令指针和其他信息,比如加载地址/存储地址。
这种方法只有在节目内容已知的情况下才有效。
但现在我一直在尝试跟踪在标准 linux 内核上运行的可执行文件。现在的问题是基本内核映像不包含 LKM(可加载内核模块)的代码。启动内核时也不知道守护进程。
因此,我对此解决方案的方法是: 1)使用qemu模拟机器。 2)当第一次遇到指令时,我会解析它并保存这个信息。为以后。 3) 创建一个辅助函数,在执行指令时发送 ip、加载/存储地址。
我被困在第 2 步。我如何区分 qemu 的不同进程,qemu 只是一个模拟器,对来宾操作系统一无所知??
我可以修改来宾操作系统的调度程序,但我真的无法弄清楚前进的方向。
对不起,如果问题很长。我知道我可以抽象出某些部分,但我觉得其中的某些部分解释了问题的背景。
【问题讨论】:
标签: linux cpu-architecture qemu