Корисник:Lazargeratovic/превод1
Илегални опкод
уредиНелегалан опкод, познат и као неимплементирана операција[1], нежељени опкод[2]или недокументована инструкција, представља инструкцију за процесор која није поменута у званичној документацији произвођача, али ипак има ефекат. Нелегални опкодови били су чести на старијим процесорима из 1970-их, попут MOS Technology 6502, Intel 8086 и Zilog Z80. На овим старијим процесорима многи нелегални опкодови постоје као споредни ефекат жичаних транзистора у процесору, често комбинујући функције које није било предвиђено комбиновати. На старијим и модерним процесорима, такође постоје инструкције које су произвођачи намерно укључили, али нису документоване у званичним спецификацијама.
Ефекат многих нелегалних опкодова на многим процесорима је обично постављање замке која води ка грешкама. Међутим, неки процесори који хватају већину нелегалних опкодова не чине то за све нелегалне опкодове, а неки други процесори уопште не проверавају нелегалне опкодове, већ извршавају недокументовану операцију.
Преглед
уредиДок већина случајних нелегалних инструкција има бескорисне или чак изузетно непожељне ефекте (као што је пад система), неке могу имати корисне функције у одређеним ситуацијама. Такве инструкције су понекад искоришћене у видео играма 1970-их и 1980-их да убрзају одређене временски критичне делове. Друга уобичајена употреба била је у континуираној борби између имплементација заштите од копирања и крековања.
Једна од опасности која је повезана с употребом нелегалних инструкција је та што, с обзиром на то да произвођач не гарантује њихово постојање и функционисање, оне могу нестати или се понашати другачије при свакој промени унутрашњих компоненти процесора или приликом нове ревизије процесора, чиме програми који их користе постају некомпатибилни са новијим ревизијама. На пример, неке старије игре за Apple II нису правилно радиле на новијем Apple IIc, јер је овај модел користио новију ревизију процесора – 65C02 – која је уклонила нелегалне опкодове.
Каснији процесори, као што су 80186, 80286, 68000 и њихови потомци, немају илегалне опкодове који су широко познати или коришћени. Идеално, процесор ће се понашати на добро дефинисан начин када нађе непознат опкод у токовима инструкција, као што је покретање одређене изузетне или грешке. Обрађивач изузетака или грешака оперативног система ће обично прекинути апликацију која је изазвала грешку, осим ако програм није раније поставио свој обрађивач изузетака, у том случају ће тај обрађивач добити контролу. Још један, мање уобичајен начин обраде илегалних инструкција је дефинисање да не раде ништа осим оног што троши време и простор (што је еквивалентно званичној NOP инструкцији процесора); овај метод користе процесори као што су TMS9900 и 65C02. Алтернативно, непознате инструкције могу бити емулиране у софтверу (нпр. LOADALL), или чак могу бити имплементиране "нове" псеудо-инструкције. Неки BIOS-ови, управљачи меморијом и оперативни системи искоришћавају ово, на пример, да омогуће комуникацију V86 задатка са основним системом, тј. BOP (од "BIOS Operation") који користи Windows NTVDM.[3]
Упркос Intel-овој гаранцији против таквих инструкција, истраживања која су користила технике као што је "Fuzz testing" открила су велики број недокументованих инструкција у x86 процесорима све до 2018.[4] године. Неке од ових инструкција су заједничке за произвођаче процесора, што указује на то да су Intel и AMD свесни ових инструкција и њиховог циља, иако се не појављују у званичној спецификацији. Друге инструкције су специфичне за одређене произвођаче или производне линије. Намена већине недокументованих инструкција x86 процесора је непозната.
Данас су детаљи ових упутстава углавном од интереса за тачну емулацију старијих система.
Такође погледајте
уреди- Backdoor
- Don't-care term
- Easter egg (media)
- Gadget
- Halt and Catch Fire
- Microcode
- Pentium F00F bug
- Synthetic programming
- Trap
- Undocumented feature
Референце
уреди- ↑ "1.2. Формат инструкција. PDP-10 Референтни приручник: Програмирање са PDP-10 скупом инструкција (PDF). Том 1. Дигитал Еквипмент Корпорејшн (DEC). 1969. стр. 1-7. Преузето 2022-05-13.
- ↑ Акесон, Линус (2013-03-31). „GCR декодирање у лету“. Архивирано од оригинала 2017-03-21. Преузето 2017-03-21.
- ↑ Шулман, Ендру; Браун, Ралф Д.; Макси, Дејвид; Микелс, Рејмонд Џ.; Кајл, Џим (1994) [новембар 1993]. Недомументовани DOS: Програмерски водич за резервисане MS-DOS функције и податке – проширено да укључи MS-DOS 6, Новел DOS и Виндоус 3.1 (2. изд.).
- ↑ Домас, Кристофер (2017-08-31). „Разбијање x86 скупа инструкција“. Јутјуб. Архивирано од оригинала 2021-12-19. Преузето 2018-01-03.
Читајте следеће
уреди- Варди, Адам (1996-09-27) [1995-08-22]. „Додатне инструкције за процесоре серије 65XX“. Архивирано од оригинала 2021-08-28. Преузето 2021-11-18. (Напомена: Незаконити опкоди на 6502.)
- Штајл, Михаел (2008-07-29). „Како заиста функционишу незаконити опкоди на MOS 6502“. pagetable.com - Some Assembly Required. Архивирано од оригинала 2021-11-19. Преузето 2021-11-18.
- Јанг, Шон (2005-09-18) [1997]. „Документација за Z80: Недокументовани Z80 документован“. 0.91. Архивирано од оригинала 2021-10-09. Преузето 2021-11-18.(Напомена: Незаконити опкоди на Z80.)
- Браун, Ралф Д., ур. (2002-12-29) [2000-07-17, 1985]. „Листа прекида за x86“ (61. изд.). Архивирано од оригинала 2017-08-22. Преузето 2011-10-14. [3][4][5][6][7][8][9] (Напомена: Листа прекида Ралфа Брауна такође садржи информације о недокументованим опкодима процесора и грешкама процесора: OPCODES.LST од Алекса В. Потемкина и 86BUGS.LST од Харалда Фелдмана.)
Спољашње везе
уредиСајт Кристијана Лудлофа sandpile.org такође садржи информације о недокументованим кодовима операција