如何解决Perf Intel pt 过滤器在 32 位模式程序中不起作用
我尝试使用perf event intel_pt来记录一个可执行文件的踪迹,如下:
perf record -e intel_pt/cyc,noretcomp/u ./maldemo
但是,这种方式生成的trace文件包含了程序加载时执行的所有instrument,这意味着会出现很多不相关的代码(例如,在libc.so
和ld.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=i0ns
或 perf script --insn-trace
将不会显示任何内容。但是没有那个 gcc 选项它可以正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。