perf记录如何获取目标进程的指令的虚拟内存地址以及用于存储它的数据结构

时间:2017-12-16 14:52:40

标签: c linux perf

我正在阅读perf的源代码,并尝试了解perf record如何获取触发perf计数的目标进程的指令的虚拟内存地址(例如{{的虚拟地址} 1}},这是由call test的注释监视的汇编代码。什么数据结构用于存储使perf事件发生并触发计数器的指令的虚拟地址?

1 个答案:

答案 0 :(得分:1)

为了获取样本的指令指针,您必须在PERF_SAMPLE_IP中包含perf_attr.sample_type perf_event_open调用。这将在ip事件的结构中包含PERF_RECORD_SAMPLE字段,您可以从mmap环形缓冲区中读取该字段。有关详细信息,请参阅联机帮助页。

PERF_RECORD_SAMPLE
    This record indicates a sample.

       struct {
            struct perf_event_header header;
            u64    sample_id;   /* if PERF_SAMPLE_IDENTIFIER */
            u64    ip;          /* if PERF_SAMPLE_IP */
            u32    pid, tid;    /* if PERF_SAMPLE_TID */
            u64    time;        /* if PERF_SAMPLE_TIME */
            ...