我最近读到,在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/

10-09 03:45