这很棘手,我还没有亲自完成,但是我认为您可以通过以下方式做到:
x86_64 cpu(特别是我已经检查过Intel Corei7,但我猜还有其他cpu)具有性能计数器MISALIGN_MEM_REF,用于计数器未对齐的内存引用。
因此,首先,您可以在Linux下运行程序并使用“ perf”工具来获取您的代码已完成的未对齐访问次数的计数。
一个更加棘手和有趣的技巧是编写一个内核模块,该模块对性能计数器进行编程,以在溢出时生成中断,并使它在第一个未对齐的加载/存储中溢出。在内核模块中响应此中断,但向进程发送信号。
实际上,这会将x86_64变成@R_301_2431@未对齐访问的内核。