충돌 (즉, 인터프리터가 작동을 멈추고 강제로 닫힘) Python [닫힘]


16

파이썬이 가장 창의적인 코드로 치명적인 충돌을 일으킬 수있는 사람을보고 싶습니다. 즉, 프로그램이 실행되면 Windows와 같이 "IDLE이 작동을 멈췄습니다"와 같은 메시지가 나타나거나 Linux가 프로그램 충돌시 Linux가 수행하는 모든 작업을 수행합니다.

규칙 :

  1. 이것은 Python 2.7 이상에서 만들어야합니다 (따라서 이후 버전의 Python에서 수정 된 오래된 버그는 악용되지 않습니다).

  2. "충돌"의 정의는 "의도하지 않은 방식으로 IDLE 또는 Python 종료"입니다. 이것은 "IDLE 또는 Python을 정지시키고 역 추적을한다"는 의미는 아닙니다. 이것은 종료, sys.quit, 중단 등이 올바른 답변이 아님을 의미합니다. 예를 들어, 이것은 허용되지 않습니다 :

    import sys
    try:
         print c # Crashes Here, as c is not defined.
     except NameError, SyntaxError:
         print "Oh No!"
         sys.exit()
    
  3. Python이 응답하지 않는 것은 허용되지 않습니다.

  4. 충돌에 대한 코드를 설명해야합니다. 버그 리포트에 대한 링크는 괜찮습니다.

10 일 후 가장 많이 답한 답변이 이깁니다! 시작 !!

편집 : 파이썬 이 트레이스 백으로 프로그램 실행을 중단시키지 않도록 하는 것이 목적이라는 것을 분명히 할 수 있습니다. 목표는 파이썬이 완전히 충돌하거나 작동을 멈추게하는 것입니다. 이것은이 작업이 성공적으로 수행되면 Windows가 이것을 줄 것임을 의미합니다 (여기서는 Word가 충돌하지 않으며 다른 프로그램에서 발생 해야하는 일의 예일뿐입니다).

오류 대화

아니면 이거:

오류 대화 2


1
태그 코드 도전 에는 객관적인 승리 기준이 필요합니다. 나는 대부분의 창의성 이 충분히 객관적이지 않다고 생각합니다 .
Howard

좋아-대부분의 다른 도전과 같이 가능한 한 짧게 변경하겠습니다. 창조적 인 것은 실제로 모호합니다 ...
George

@GeorgeH 당신이 찾고있는 것이 창의력이라면, 인기 경연 대회 는 완벽하게 작동합니다. 개인적으로 이것이 인기 콘테스트로 최고라고 생각합니다. 앞으로는 게시 전에 이러한 꼬임이 해결 될 수있는 샌드 박스를 통해 질문을 실행할 수 있습니다.
저스틴

2
@ High Rep의 사람들 prnt은 질문에 의도적입니다.
조지

6
이 질문은 악성 코드를 요구하기 때문에이 질문을 주 제외로 닫으려고합니다.
AdmBorkBork

답변:


19

코드 골프 경연 대회 였어야했다;)-창의력은 코드가 말한 진술이라고 생각한다. "나는 여기서 무슨 일이 일어나고 있는지 모르겠다 ..."

Windows에서 실행중인 IDLE에 다음 문자를 복사하여 붙여 넣으 십시오.

𐒢

충돌은 Windows가 문자를 UTF-16으로 인코딩하고 IDLE이 UTF-8 문자로 변환하지 못한 것과 관련이 있습니다 ...

편집 : 파이썬 버그 # 13153


이것이 실제로 유효한 대답인지 확실하지 않습니다. 문제는 "프로그램이 실행될 때"라고 말합니다. 그러나 여기서 프로그램은 실제로 실행되지 않습니다. 을 붙여 넣기 만하면 𐒢실행하기 전에 IDLE이 충돌 합니다.
Sebastian Negraszus

네, @Sebastian에 동의해야합니다. 파이썬 프로그램에서는 텍스트 파일로 시작하여 파이썬 인터프리터를 실행하지만 텍스트 파일을 만드는 방법은 중요하지 않습니다.
David Z


Mac에서도 작동합니다!
TheDoctor

19

ctypes 남용:

import ctypes;ctypes.string_at(1)

이것은 1을 주소로 캐스트하고 역 참조합니다. 모든 정상 시스템 (예 : 0x00000001이 매핑 된 주소가 아닌 시스템)에서 즉시 segfault됩니다.


내 컴퓨터에서 이것은 인터프리터와 충돌하지 않는 것 같습니다. WindowsError 오류가있는 역 추적이 표시됩니다.
Dhara

@ Dhara : 아, 그것은 ctypes의 구조적 예외 처리기가 충돌을 잡는 것입니다. ctypes다른 방법으로 Windows에서 Python과 충돌 할 수 있다고 확신 하지만 문자 수가 많지 않을 수도 있습니다.
nneonneo

12

60

import sys
sys.setrecursionlimit(1<<30)
f=lambda f:f(f)
f(f)

내 생각이 아니야 파이썬 위키에서 복사 여기 .

이로 인해 무한 재귀가 발생하고 재귀 한계를 변경했기 때문에 인터프리터가 중지하지 않습니다.


감사합니다-이것은 훌륭한 답변이지만 잘못된 질문입니다! 질문에서 목표가 명확하지 않았습니다. 그래도 답변 주셔서 감사합니다.
George

2
@George H 지금 Windows 시스템을 사용하지 않고 있지만, 파이썬 인터프리터가 코어를 충분히 덤프하는 세그먼트 오류가 아닌가? i.imgur.com/5gSGBpr.png
user12205

10

signal 남용 (Windows 이외의 경우 만) :

import os;os.kill(0,4)

대부분의 시스템에서 (SIGILL = 4 인 경우) "잘못된 명령"오류로 Python이 종료됩니다.

또는 킬러 알람 시계를 사용하여 프로그램을 죽일 수 있습니다 .

import signal;signal.alarm(1)

1 초 후, 파이썬은 암호 메시지 "알람 시계"로 죽습니다.


작동하는 다른 단일 문자 신호 코드에는 1, 3, 5, 6, 8 및 9가 포함됩니다.
user12205

10

파이썬 3.3에서 :

exec(type((lambda:0).__code__)(0,1,0,0,0,b'',(),(),(),'','',1,b''))

Python 2.7에서 코드 객체는 약간 다릅니다.

exec type((lambda:0).func_code)(0,1,0,0,'Q',(),(),(),'','',0,'')

예, 오래된 쓰레기를 바이트 코드 인터프리터에 전달하여 실행할 수 있습니다 ( Python issue # 17187 ).


더 짧음 (Python 2.x) :exec type((lambda:0).func_code)(0,1,0,0,'Q',(),(),(),'','',0,'')
nneonneo

감사! 그리고 파이썬 3에서는을 사용할 수 있습니다 .__code__.

6

재귀 반복자는 C 스택이 아닌 파이썬 스택 사용 ( 문제 # 14010문제 # 14507 ) :

i=''
for _ in range(9**6):i=filter(int,i)
del i

이것은 Mac에서 Python 2.7.11과 충돌하지 않지만 Python 3.5.1과 충돌합니다.
nneonneo

4

인터프리터를 충돌시키는 쉬운 방법 중 하나는 인터프리터의 할당을 해제하는 것입니다.

import ctypes, sys
(ctypes.c_char*4).from_address(id(None))[:] = '\0'*4

보너스로 파이썬 2를 segfault하는 영리한 방법이 있습니다.

import ctypes, struct, sys
inner = ()
outer = (inner,)
c_outer = (ctypes.c_char * sys.getsizeof(outer)).from_address(id(outer))
inner_index = c_outer[:].find(struct.pack('P', id(inner)))
c_outer[inner_index:inner_index+struct.calcsize('P')] = struct.pack('P', id(outer))
print outer

이것이 정확히하는 것은 독자에게 연습으로 남습니다.


2
첫 번째 : refcount None을 0으로 설정하여 강제로 할당 해제합니다. 두 번째 방법은 자체 참조 튜플을 구성하고 인쇄하는 것입니다.
nneonneo

3

누군가가을 FlagsType설정하여 새 객체가 생성되는 것을 막을 수 있다고 생각 FlagsType.tp_new = NULL했지만 메소드를 제거하는 것을 잊었습니다 ( 이슈 # 13204 ).

import sys
t=type(sys.flags)
t.__new__(t)

( sys.version_info같은 버그가 있습니다.)


3

의 사용 allocactypes모듈 ( 문제 # 13096 ) :

from ctypes import *
POINTER('a'*9**8)

0

내 파이썬과 충돌하는 한 가지 방법 MemoryError:

x=[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

2
이것은 나를 위해 작동하지 않습니다-그냥 파이썬으로 중단 MemoryError시킵니다. OS에 의해 종료되어야합니다.
George

2
허. 오류는 놀랍도록 얕은 깊이에서 발생합니다.
user2357112는 Monica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.