经过一段程序后如何计算返回指令(基于计算机硬件的方面)

时间:2019-07-05 07:47:29

标签: performancecounter perf

我最近一直在研究rop。当使用perf计数硬件信息时,我要测量由给定代码执行的返回指令的数量。但是perf接口仅提供分支指令。

1 个答案:

答案 0 :(得分:2)

如果您只有使用最新Intel CPU的x86:

我的Skylake上的

perf list显示br_inst_retired.near_return有一个硬件计数器。那将只计算ret条指令,不计算其他分支。但是请参见勘误表SKL091中的分支指令计数器。

perf stat -e instructions,br_inst_retired.near_return,... ./a.out可能就是您想要的。或将perf stat附加到已经在运行的程序上,或者也许-I 1000打印间隔内的累计计数。

但是请注意,如果您正在寻找ROP gadgets,则可以在内部找到C3操作码 ,该操作码通常会作为其他指令进行解码。因此,仅将自己限制为在目标程序正常执行期间实际运行的ret指令比需要的限制更多。

例如如果您跳转到立即数,则4字节立即数可能会有用地解码为+ ret