Wendigo
Мудрец
(13956)
2 месяца назад
1) Да. При считывании данных с помощью printf байты будут загружены в обычный регистр, например eax.
2) Все инструкции по изменению регистра команд (например, jmp) выполняются через декодирование инструкций процессором.
3) В некоторых встроенных системах или микроконтроллерах может быть возможность прямого доступа к регистру команд с помощью спец. инструкций.
123 123Профи (649)
2 месяца назад
2) Я могу туда типа eax что-то записать? Например 0x00, типа mov IR (Instruction register), 0x00. Или только через jmp это делать можно? А адресовать физически невозможно, так как компонент внутренний.
3) Я про процессоры intel 64 и IA-32
0xB8 0x09 0x00 0x00 0x00; mov eax, 9
0xC3; ret
Вопрос 1:
Если я буду кастить указатель на этот участок памяти к функции, либо напрямую вызывать его через call/invoke, то при адресации этой памяти байты через шину пойдут в регистр команд?
А если я буду считывать их, например, через printf, то байты через шину пойдут в обычные регистры типа eax?
Вопрос 2:
Можно ли работать напрямую с регистром команд? Я знаю, что указатель можно поменять, jmp и так далее, чтобы с потоком выполнения работать. Но адресовать напрямую регистр команд я так понимаю физически невозможно?
Вопрос 3:
Насколько я понимаю, можно с шиной напрямую работать и адресовать ее, когда работаешь на уровне ядра. Можно ли через шину манипулировать регистром команд?