2015-06-23 6 views
0

Недавно я прочитал, что контрольные точки программного обеспечения для Linux на ARM реализованы с использованием команды UND в режиме ARM и инструкции BKPT в режиме Thumb. Почему существуют две отдельные инструкции, используемые для подмены программных прерываний?Точки останова на ARM

+1

Рука и большой палец - это два разных набора инструкций. –

+0

@dwelch Я понимаю, что это два разных набора инструкций. Однако почему существует необходимость в двух отдельных инструкциях по точке останова? ARM не определяет, что такое инструкция точки останова, Linux делает (в отличие от того, как у вас это есть для x86/x64). –

+0

У ARM нет инструкции 'bkpt' [начало armv5] (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0068b/CIHBIGGI.html)? Изменить: неважно, если это Linux, вероятно, необходимо поддерживать все версии ARM. – tangrs

ответ

0

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

Если попытаться использовать всегда рука bkpt и переписать первую инструкцию в функции: pthread_mutex_init все будет хорошо, но если переписать первую команду в pthread_mutexattr_setpshared, вторая инструкция будет также переписана.

Если вы всегда пытаетесь использовать большой байт bkpt и переписываете первую инструкцию в инструкции pthread_mutex_init, это будет недействительным.

Смежные вопросы