Можно ли изменить или получить доступ к счетчику программ? - PullRequest
3 голосов
/ 26 декабря 2011

Читая о счетчике программ, я узнал, что счетчик программ отличается тем, что напрямую изменить его значение невозможно.

Есть ли какой-либо косвенный способ доступа / изменения содержимого счетчика программ?

Ответы [ 2 ]

9 голосов
/ 26 декабря 2011

Вы должны понимать, что если вы модифицируете ПК, следующая выполненная инструкция будет той же, что и на новом адресе ПК. Это просто безусловный переход, и у всех процессоров есть такая инструкция.

Обычно нет инструкции LD PC,addr, но именно это и делает JMP addr, поэтому неверно, что вы не можете напрямую изменить ее значение. Однако вы не можете изменить его значение без изменения пути выполнения кода - выполнение продолжается с указанного адреса.

В большинстве случаев это можно сделать и косвенно, например, установив указатель стека на местоположение, содержащее новый адрес, и вызвав инструкцию возврата RET.

Различные процессоры и архитектуры могут вести себя по-разному разными способами, и предложенная выше мнемоника инструкций является «общей» и не предназначена для ссылки на какой-либо конкретный набор команд.

4 голосов
/ 26 декабря 2011

Инструкция безусловного перехода напрямую изменяет значение ПК.

...