2023-09-18

vak: (Путиномедвед)
Чувак умудрился пропихнуть научную публикацию, где древним методом зашифровал антипутинскую фразу.
Материал состоит из 22-х абзацев (отсылка к 2022 году, началу агрессии России против Украины), акростих — из двух инициалов в конце статьи и четырех лексем, которые вместе образуют два предложения: «Сдохни Путлер. Нет войне. И. Л.»
Статью можно (было) скачать здесь: concept.mgimo.ru/jour/article/download/766/543

Запасная копия: 766-1387-1-SM.pdf
vak: (Default)
Чтобы определить, как же работает машинная команда "mov r1, pc" на процессоре с архитектурой ARMv6-M, я сваял простую програмку.
unsigned pc, base;
asm volatile(
" adr %1, base \n"
"base: mov %0, pc \n"
: "=r" (pc), "=r" (base)
);
printf("base = %08x\n", base);
printf("pc = %08x\n", pc);
Результат:
base = 10000330
pc = 10000334
То есть имеем смещение +4 байта. Что несколько неожиданно, так как размер самой команды MOV всего два байта. То есть PC пролетает вперёд на лишнюю команду.

Вот как выглядит дизассемблированный машинный код:
1000032e:       a100            add     r1, pc, #0
10000330 <base>:
10000330: 467d mov r5, pc
Видим, что ассемблерная команда ADR превратилась в ADD того же регистра PC с константой. Но в случае команды ADD значение PC не пролетает вперёд, а честно указывает на следующую команду.

Верно я подозревал, что не всё так просто с этой командой MOV. Не зря эту возможность убрали в архитектуре aarch64.
OSZAR »