是否可以使用 GNU 工具(gcc、binutils 等)将所有出现的汇编指令修改为无操作?具体来说,带有 -pg 选项的 gcc 会生成以下程序集 (ARM):
0x0: e1a0c00d mov ip, sp
0x4: e92dd800 stmdb sp!, {fp, ip, lr, pc}
0x8: e24cb004 sub fp, ip, #4 ; 0x4
0xc: ebfffffe bl 0 <mcount>
我想记录最后一条指令的地址,然后将其更改为 nop,如下面的代码所示
0x0: e1a0c00d mov ip, sp
0x4: e92dd800 stmdb sp!, {fp, ip, lr, pc}
0x8: e24cb004 sub fp, ip, #4 ; 0x4
0xc: e1a00000 nop (mov r0,r0)
Linux 内核可以在运行时执行与此类似的操作,但我正在寻找构建时解决方案。