Я отлаживал код С++ (WinCE 6 на платформе ARM), и я нахожу какое-то поведение странным:
4277220C mov r3, #0x93, 30
42772210 str r3, [sp]
42772214 ldr r3, [pc, #0x69C]
42772218 ldr r2, [pc, #0x694]
4277221C mov r1, #0
42772220 ldr r0, [pc, #0x688]
Строка 42772214 ldr r3, [pc, #0x69C]
используется для получения некоторой константы из секции .DATA, по крайней мере, так кажется.
Странно, что в соответствии с кодом r2 необходимо заполнить память с адреса pc = 0x42772214 + 0x69C = 0x427728B0, но в соответствии с содержимым памяти, которое оно загружает с 0x427728B8 (8bytes +), это происходит и для других ldr-обычаев.
Это ошибка отладчика или мое понимание ldr/pc? Другая проблема, которую я не получаю - почему доступ к разделу .data относится к исполняемому коду? Я нахожу это немного странным.
И еще одна проблема: я не могу найти синтаксис первой команды mov (любой мог указать мне спецификацию optype для Thumb (1C2))
Извините за описание laic, но я просто ознакомлюсь с сборками.