Я читаю книгу «Компьютерная организация и встроенные системы» Хамахера, и у меня возникает вопрос: «Как компьютер различает, является ли двоичный шаблон инструкцией или просто числом?»
Может ли кто-нибудь помочь мне понять эту концепцию?
Я читаю книгу «Компьютерная организация и встроенные системы» Хамахера, и у меня возникает вопрос: «Как компьютер различает, является ли двоичный шаблон инструкцией или просто числом?»
Может ли кто-нибудь помочь мне понять эту концепцию?
Процессор фон Неймана (практически любой процессор) не может различать код и данные в памяти. Все, на что указывает указатель инструкций ЦП, будет загружено в декодер инструкций как инструкция. Если это недопустимая инструкция, она вызовет исключение в ЦП.
Это позволяет программе создавать новый исполняемый код в памяти или даже изменять свой собственный код. С другой стороны, это делает возможным множество атак путем внедрения кода.
ret
внизу функции в архитектуре, такой как x86, где общий шаблон заполнения, такой как 00 00
, является допустимой инструкцией (add [rax], al
).
- person Peter Cordes; 22.02.2018
То, как компьютер различает инструкции и числа, просто зависит от того, что и где считывает данные. Например, простое арифметико-логическое устройство (АЛУ) будет включать вход для выполняемой операции и два входа для операндов. Данные, поступающие в порты операндов, считываются как числа, тогда как данные, поступающие на ввод оператора, считываются как инструкции.
Все зависит от того, какой блок компьютерной архитектуры считывает данные и на каком входе этот блок их считывает.
00000100
инструкцией или числом? Инструкции являются числами. В архитектуре фон Неймана, если вы поместите число там, где ожидается инструкция, оно будет рассматриваться как инструкция, если вы поместите его там, где ожидаются данные, оно будет рассматриваться как данные. - person TessellatingHeckler   schedule 22.02.2018