微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Perf Intel pt 过滤器在 32 位模式程序中不起作用

如何解决Perf Intel pt 过滤器在 32 位模式程序中不起作用

我尝试使用perf event intel_pt来记录一个可执行文件的踪迹,如下:

perf record -e intel_pt/cyc,noretcomp/u ./maldemo

但是,这种方式生成的trace文件包含了程序加载时执行的所有instrument,这意味着会出现很多不相关的代码(例如,在libc.sold.so中) :

perf script --itrace=i0ns -F+insn
 maldemo 18723 [006] 1071320.925950751:          f7f93875 [unkNown] (/lib32/ld-2.27.so) insn:
 maldemo 18723 [006] 1071320.925950751:          f7f93877 [unkNown] (/lib32/ld-2.27.so) insn:
 maldemo 18723 [006] 1071320.925950751:          f7f9387a [unkNown] (/lib32/ld-2.27.so) insn:
 maldemo 18723 [006] 1071320.925950751:          f7f9387c [unkNown] (/lib32/ld-2.27.so) insn:
 maldemo 18723 [006] 1071320.925950751:          f7f9387f [unkNown] (/lib32/ld-2.27.so) insn:
 ...

所以我尝试使用 --filter 来指定区域,如下所示:

perf record -e intel_pt/cyc,noretcomp/u --filter 'filter 0x8048300 / 0x2d2 @ ./maldemo' ./maldemo
(the address above is shown in readelf as .text section)

or

perf record -e intel_pt/cyc,noretcomp/u  --filter 'filter main @ ./maldemo' ./maldemo

不幸的是,如果我在 -m32 -fno-stack-protector -z execstack 中使用 gcc 选项来生成 32 位模式的可执行文件perf script --itrace=i0nsperf script --insn-trace 将不会显示任何内容。但是没有那个 gcc 选项它可以正常工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。