我最近读到,在ARM模式下使用UND
指令在Thumb模式下使用BKPT
指令实现了Linux on ARM的软件断点。为什么有两条单独的指令用于引发软件中断?
最佳答案
Thumb兼容代码:
0000e150 <pthread_mutexattr_setpshared>:
e150: b573 push {r0, r1, r4, r5, r6, lr}
e152: 4605 mov r5, r0
e154: 460c mov r4, r1
e156: 4616 mov r6, r2
e158: f7fd fa70 bl b63c <pthread_mutexattr-0xba>
e15c: 4629 mov r1, r5
纯手臂:
0000d564 <pthread_mutex_init>:
d564: e2503000 subs r3, r0, #0
d568: 03a00016 moveq r0, #22
d56c: 012fff1e bxeq lr
手臂bkpt 0xe7f001f0
拇指bkpt 0xde01
如果尝试始终使用arm bkpt并重写函数中的第一条指令:
pthread_mutex_init都可以,但是如果重写pthread_mutexattr_setpshared中的第一条指令,第二条指令也将被重写。
如果始终尝试使用拇指bkpt并在pthread_mutex_init中重写第一条指令,则该指令将无效。
关于linux - ARM的断点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31003670/