2014-02-24 1 views
1

데모 목적으로 불법 명령어 예외를 생성하는 프로그램을 만들려고합니다.불법 명령어 예외를 얻는 가장 간단한 방법

cmpxchgl %edx, %ecx 

그러나 오히려 나에게 런타임 예외를주는 것보다, 컴파일러 (FASM)이 코드를 컴파일하지 않습니다

내 문제에 대한 간단한 해결책이 될 것 같다. 그것은 "불법 교육"이라고 말합니다 (그리고 그것은 맞을 것입니다, 전에 실제로 경고하는 것이 좋았습니다).

당신이

가) 단순히 코드를 컴파일 다른 컴파일러 날 지점 수 있도록 잘못된 명령 예외를 얻기를위한 모든 솔루션은 나를 위해 괜찮

b)는 내 명령

에 대한 해결 방법을 적용

c) oneliners 바람직, 간단해야 (완전히 다른 명령을 제안)

+0

@harold : 죄송합니다. ARM 응답을 막으려 고했습니다. 나는 x86에 다시 태그를 매겼다. 64 비트도 괜찮다. 태그가 여전히 올바르지 않으면 다시 태그를 다시 지정하십시오. –

답변

7

단순 : ud2 (0F 0B)

,

모든 목적은 잘못된 Opcode 예외를 발생시키는 것입니다.

1

명령어 세트 참조에서 직접 기계 코드를 조회 할 수 있습니다. 나는 당신을 위해 그것을했습니다, cmpxchgl %edx, %ecx0x0F 0xB1 0xCA입니다. 코드에 DB 또는 .byte 또는 컴파일러가 지원하는 모든 것을 붙이기 만하면됩니다.

그런데 GAS은 단어없이 그것을 조립합니다.

+0

FASM은 너무 똑똑한 것 같습니다. '.byte'조차도 컴파일러 에러를 낸다. –

+1

fasm은'DB' 지시문을 사용하며 잘 어셈블됩니다. 그러나 harold의 해결책을보십시오. – Jester

+0

인텔 명령어 세트 참조를 완전히 이해하지 못하기 때문에 사용할 바이트를 파악하지 못했습니다. 바이트 순서가 잘 작동하고 불법적 인 지시가 없습니다. –