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