잘못된 opcode
Illegal opcode![]() |
기계코드 |
---|
일반개념 |
지침들 |
불법 작동 코드,[1] 의도하지 않은 opcode[2] 또는 문서화되지 않은 명령이라고도 불리는 불법 opcode는 CPU 설계자나 제조자가 공개한 공식 문서에 언급되지 않은 CPU에 대한 지시사항으로, 그럼에도 불구하고 효과가 있다.불법 opcode는 MOS Technology 6502, Intel 8086, Zilog Z80과 같이 1970년대에 고안된 구형 CPU에서 흔히 볼 수 있었다.이러한 구형 프로세서에서는 CPU 내 트랜지스터 배선의 부작용으로 많은 것이 존재하며, 대개 결합할 의도가 없었던 CPU의 기능을 결합한다.구형 및 현대형 프로세서의 경우, 제조업체가 프로세서에 의도적으로 포함시킨 지침도 있지만, 어떤 공식 사양에도 문서화되지 않았다.
개요
대부분의 우발적인 불법 지시들은 쓸모없거나 심지어 매우 바람직하지 않은 효과를 가지고 있지만, 어떤 것들은 특정한 상황에서 유용한 기능을 가질 수 있다.그러한 지시들은 때때로 특정 시간에 중요한 부분을 빠르게 하기 위해 1970년대와 1980년대의 컴퓨터 게임에서 이용되었다.또 다른 일반적인 용도는 복사 방지 구현과 균열 사이의 계속되는 싸움에서였다.여기서 그들은 무명을 통한 일종의 보안이었고, 그들의 비밀은 보통 그리 오래 지속되지 않았다.
불법 명령의 사용과 관련된 위험은 제조업체가 자신의 존재와 기능을 보증하지 않는다는 사실을 감안할 때, 그것들은 CPU 내부 변경이나 CPU의 새로운 개정과 함께 사라지거나 다르게 행동하여 이를 사용하는 프로그램이 새로운 개정판과 양립할 수 없게 만들 수 있다는 것이다.예를 들어, 새로운 Apple IIc에서는 많은 구형 Apple II 게임이 제대로 작동하지 않았는데, 이는 후자가 불법 opcode를 없앤 새로운 CPU 개정판인 65C02를 사용했기 때문이다.
80186, 80286, 68000과 같은 보다 최근의 CPU와 그 후손들은 널리 알려지거나 사용되는 불법 opcode를 가지고 있지 않다.이상적으로는 CPU가 명령 스트림에서 알 수 없는 opcode를 발견했을 때, 예를 들어 특정 예외 또는 결함 조건을 트리거하는 것과 같이 잘 정의된 방식으로 동작할 것이다.운영 체제의 예외 또는 결함 처리기는 프로그램이 이전에 자체 예외/고장 처리기를 설정하지 않은 한, 보통 고장을 일으킨 응용 프로그램을 종료하며, 이 경우 해당 처리기가 제어를 받게 된다.불법적인 지시를 처리하는 또 다른 덜 흔한 방법은 시간과 공간을 차지하는 것 외에는 아무것도 하지 않도록 규정하는 것이다. 이 방법은 TMS9900과 65C02 프로세서에 의해 사용되며, 그 중에서도 TMS9900과 65C02 프로세서에 의해 사용된다.또는 소프트웨어(예: LOADALL)에서 알 수 없는 지침을 에뮬레이션하거나 "새로운" 사이비 지침을 구현할 수 있다.예를 들어 일부 BIOS, 메모리 관리자 및 운영 체제는 이를 활용하여 V86 작업이 기본 시스템(예: "B"에서 BOP)과 통신할 수 있도록 한다.Windows NTVDM에서 활용하는 "IOS Operation").[3]
이러한 지침에 대한 인텔의 보증에도 불구하고 솜털과 같은 기술을 사용한 연구는 2018년 늦게 x86 프로세서에서 방대한 수의 문서화되지 않은 지시사항을 밝혀냈다.[4]이러한 지침 중 일부는 프로세서 제조업체 간에 공유되며, 이는 인텔과 AMD가 어떤 공식 사양에도 나타나지 않았음에도 불구하고 지침과 그 목적을 모두 알고 있음을 나타낸다.다른 지침은 제조업체 또는 특정 제품군에 특정되어 있다.대부분의 x86 미등록 지침의 목적은 알려져 있지 않다.
오늘날 이러한 지침의 세부사항은 주로 구식 시스템의 정확한 에뮬레이션에 관심이 있다.
참고 항목
- 백도어(컴퓨팅)
- Don't care term
- 부활절 달걀(매체)
- 가젯(기계 명령 순서)
- 중지 및 화재 발생(컴퓨터)
- 마이크로코드
- 펜티엄 F00F 버그
- 트랩(컴퓨팅)
- 문서화되지 않은 기능
- 문서화되지 않은 x86 지침
참조
- ^ "4.2.4. Illegal Operation Codes". PDP-10 Reference Handbook: Communicating with the Monitor - Time-Sharing Monitors (PDF). Vol. 3. Digital Equipment Corporation (DEC). 1969. p. 4-5. Archived (PDF) from the original on 2011-11-15. Retrieved 2014-07-10. (일반 페이지)
- ^ Åkesson, Linus (2013-03-31). "GCR decoding on the fly". Archived from the original on 2017-03-21. Retrieved 2017-03-21.
- ^ 슐먼 앤드류, 브라운, 랄프 D.;Maxey, 데이비드. 미헬스, 레이먼드 J., 카일, 짐(1994년)[1993년 11월].Undocumented 도스:예약된 MS-DOS를 사용하는 기능과 데이터 구조-MS-DOS6, 노벨 도스와 Windows3.1(2판)을 포함하도록 확장에 대한 프로그래머의 가이드입니다.메사추세츠는 책 읽기:애디슨 웨슬리.아이 에스비엔 0-201-63287-X.(xviii+856+vi 페이지, 3.5인치 플로피)Errata:[1][2].
- ^ Domas, Christopher. "Breaking the x86 Instruction Set". Archived from the original on 2021-12-19. Retrieved 2018-01-03.
추가 읽기
- Vardy, Adam (1996-09-27) [1995-08-22]. "Extra Instructions Of The 65XX Series CPU". Archived from the original on 2021-08-28. Retrieved 2021-11-18. (NB. 6502의 불법 opcode)
- Steil, Michael (2008-07-29). "How MOS 6502 Illegal Opcodes really work". pagetable.com - Some Assembly Required. Archived from the original on 2021-11-19. Retrieved 2021-11-18.
- Young, Sean (2005-09-18) [1997]. "Z80 Documentation: The Undocumented Z80 Documented". 0.91. Archived from the original on 2021-10-09. Retrieved 2021-11-18. [3][4] (NB).Z80의 잘못된 opcode).
- Brown, Ralf D., ed. (2002-12-29) [2000-07-17, 1985]. "The x86 Interrupt List" (61 ed.). Archived from the original on 2017-08-22. Retrieved 2011-10-14. [5][6][7][8][9][10][11] (NB. Ralf Brown의 인터럽트 목록에는 문서화되지 않은 프로세서 opcode 및 프로세서 버그: OPCODS에 대한 일부 정보도 포함되어 있다.LST by Alex V.포템킨과 86벅스.LST by Harald Feldmann)