오버플로

덤프버전 :

파일:다른 뜻 아이콘.svg
은(는) 여기로 연결됩니다.
동음이의어에 대한 내용은 오버플로(동음이의어) 문서
오버플로(동음이의어)번 문단을
오버플로(동음이의어)# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
참고하십시오.




1. 개요
2. 원인
3. 분류
3.1. 10진수 오버플로
3.2. 8비트 오버플로
3.3. 16비트 오버플로
3.4. 32비트 오버플로
3.5. 64비트 오버플로
3.6. 기타
4. 관련 문서



1. 개요[편집]



파일:external/imgs.xkcd.com/cant_sleep.png

xkcd 571화 'Can't Sleep'[1]

파일:기계식 체중계 오버플로.jpg


기계식(아날로그) 체중계가 측정 범위를 넘어버린 모습.[2]
네이버 날씨에서 모종의 오류로 오버플로가 발생한 상황.[3] -우주종말-

Overflow

컴퓨터의 정수 연산의 계산 결과가 허용 범위를 초과할 때 발생하는 오류.[4]


2. 원인[편집]


파일:나무위키상세내용.png   자세한 내용은 컴퓨터에서의 수 표현 문서를 참고하십시오.

컴퓨터의 메모리가 8비트의 데이터를 저장할 수 있다고 하고, 편의상 부호는 없는 양수인 경우만 고려해 보자. 가장 작은 값은 0000 0000 (=0) 이며, 1씩 증가시키면 0000 0001 (=1)을 거쳐 최댓값인 1111 1111 (=255)에 도달하게 된다. 여기에서 1을 다시 한번 더하게 되면 최댓값의 범위를 넘어서게 되고, 최솟값인 0000 0000 (=0) 으로 되돌아가게 된다. 이를 오버플로라고 부른다.

이는 2의 보수를 사용하는 부호형 정수 방식(signed integer)에서도 동일하며, 8비트 정수형은 -128 ~ 127 사이의 값을 저장할 수 있다. 그런데, 0111 1111 (=127) 에서 1을 더하게 되면 1000 0000 인데, 이는 -128 이 된다. 이 역시 최댓값의 범위를 넘어서서 가장 작은 값으로 바뀌는 것이다.

32비트 부호형 정수형이라면 -2147483648 ~ 2147483647 이며, 이 경우에도 2147483647 + 1 은 허용범위를 초과하므로 최솟값인 -2147483648 가 된다. 반대로, 정수의 최솟값에서 1을 뺄 경우에는 최댓값이 되어 버린다. 즉 -2147483648 - 1 = 2147483647 이 된다. 일부 사람들이 이 경우를 언더플로라고 부르지만 잘못된 표현이며, 이 경우 또한 오버플로라고 부르는게 맞다. 양이건 음이건 범위를 벗어나면 모두 오버플로이다. 산술 언더플로(Arithmetic underflow)는 부동소수점 연산에서 지수부가 타입의 한계를 넘어 작아지면 0에 가까워지다가 결국 0이 되어버리는 현상을 의미한다. 하지만, 정수 자료형에서 최댓값에서 최솟값으로 넘어가는 오버플로와 구분하기 위해 언더플로라는 용어를 혼용해서 사용하고 있는데, 명확하게 하기 위해서는 '정수 언더플로'(Integer underflow)라는 용어를 사용해 산술 언더플로와 다르다는 것을 명시하는 것이 좋다.

오버플로의 가장 많은 예로 스택 오버플로(Stack Overflow)가 있다. 함수는 변수 등을 저장하기 위해 스택이라는 메모리 공간을 만드는데, 이 함수가 재귀적으로 계속 실행되면 스택이 점점 생겨난다. 이러면 어느 순간 메모리가 모자라는 순간이 되는데 이때 생기는 오류다. 프로그래밍 언어를 만들 때, 이 스택 오버플로가 잘 일어나지 않도록 하는 것도 일이다. 응용형으로 버퍼 오버플로(Buffer overflow)가 있다. 할당된 범위의 메모리를 벗어난 주소로 접근하게 되는 것으로, 하트블리드 사태도 이런 버퍼 오버플로로 벌어진 것이다.

컴퓨터 또는 프로그래밍 언어의 동작에 따라, 오버플로 발생 시 오류 메시지를 출력하는 경우도 있고[5], 그러지 않는 경우도 있다. 이 중 오류 메시지를 출력하지 않는 경우가 더 위험하다. 잘못된 정보로 명령을 계속 수행하므로 잘못된 값을 출력하거나 오류 메시지를 출력하는 곳과 오버플로가 일어난 곳이 다른 일이 일어날 수가 있다. 일부 프로그래밍 언어의 경우는 오버플로가 일어나지 않도록 언어 자체적으로 보완책을 가지는 경우도 존재한다.

3. 분류[편집]



3.1. 10진수 오버플로[편집]


10진수 기반 시스템에서 발생하는 오버플로다.


최대 9999까지 표현 가능한 기기에서 9999에 1을 더할 때 발생하는 10진수 오버플로. 이 현상은 일상에서도 흔히 볼 수 있다.

파일:무료입니다.gif
무슨 차길래 기름이 1000달러나 들어가는...[6]

초창기의 컴퓨터는 BCD(Binary Coded Decimal) 나 EBCDIC(Extended Binary Coded Decimal Interchange Code)이라 불리는 10진수 기반의 수체계를 사용했다. 또한, 이 당시에 사용하던 코볼(COBOL) 같은 컴퓨터 언어도 이런 수체계 기반을 사용하도록 만들어져 있었다. 그래서, 99나 999를 넘어가면 100이나 1000이 되는 것이 아니라 0이 되어버리는 버그가 존재했다.

이로 인해서 가장 문제가 되었던 것이 바로 Y2K 문제이다. 년도를 저장할 때 저장공간 압축을 위해 4자리가 아니라 2자리의 십진수 정수형을 사용하다 보니 (19)99년 다음에 올 (20)00년을 (19)00년으로 인식하지 않을까 하는 문제가 대두된 것.[7] 결국 대처를 잘 했는지 2000년에 큰 문제는 없었다.



3.2. 8비트 오버플로[편집]


8비트 정수의 저장 범위는 최상위 비트를 음수 부호로 사용하는(signed) 경우 -128 ~ 127이고, 음수 부호를 사용하지 않는(unsigned) 경우 0 ~ 255이다. 255나 127을 넘어 갈 경우 오버플로가 발생한다.

  • 스타크래프트: 본래 유닛의 공격력과 방어력은 3까지만 업그레이드가 가능하지만 맵 에디터를 이용하면 255까지 업그레이드가 가능한 유즈맵을 만들 수 있다. 이 유즈맵에서 저그 지상군 방어력을 255까지 업그레이드 완료한 상태에서 울트라리스크 방어력 추가 업그레이드를 하면 오버플로가 일어나 방어력이 1로 떨어진다.
  • 슈퍼 마리오브라더스: 3-1의 마지막 계단에 있는 엉금엉금을 계속 밟아 남은 마리오의 수를 계속 늘릴 수 있는 기술이 있다. 하지만 이 게임에서의 최대 남은 마리오의 수는 127이다. 그런데 최대 남은 마리오의 수를 달성한 후 더 이상 올라가지 않게 막도록 프로그래밍되어 있지 않아 이를 초과하면 오버플로로 남은 마리오의 수가 0으로 인식되어버리기 때문에 이 상태에서 실수하면 그대로 게임 오버가 된다. 그리고 한 가지 더 있는데, 그 유명한 마이너스 월드. 1-2의 맨 마지막에 있는 지상으로 올라가는 토관 위에서 오른쪽에서 두 번째 블록을 부수고, 왼쪽을 바라보고 웅크린 상태에서 점프하여 맨 오른쪽 블록에 닫아 마리오가 벽 안에서 오른쪽으로 서서히 움직이도록 만들자. 그 후 곧장 나오는 파이프로 들어가면 마이너스 월드에 들어가게 된다.[8]
  • 파이어 엠블렘 창염의 궤적: 무기연성에서 원래 필살수치가 있는 무기의 필살치를 마이너스로 만들면 간디 버그 마냥 필살률이 255가 되는 버그가 존재한다.
  • 팩맨: 원래는 스테이지가 255까지 있도록 프로그래밍되었으나, 오버플로로 스테이지 256이 생겨났다. 스테이지 256에 도달하면 이상한 문자들과 기호, 스프라이트들이 화면의 반을 메우고, 다음 레벨로 진행할 수 없다.
  • 풋볼 매니저: 선수의 한 시즌 득점이 255골을 넘어가면 기록이 0으로 초기화된다.
  • 풍래의 시렌: 소지품/기탄 0인 상태에서 독초나 썩은 주먹밥 대미지로 자멸하면 스코어가 괴상하게 변하거나, 무기의 - 수치가 본래 무기의 수정치를 초과했을 경우 공격력이 255까지 변화하거나, 풀강한 장비에서 장비 자체의 수정치는 오버플로를 인식하지만 합성능력의 가격은 인식 못하여 팔았다 샀다 하는 것만으로 본전치기가 가능한 등 수치가 꼬이는 버그가 꽤 많이 존재한다.
  • 모탈 컴뱃 2에서 250연승시 미니 게임으로 이 들어간 이유는 정황상 연승표기가 255를 넘어갈 때 오버플로우가 발생하는 것을 방지하기 위한 목적도 있는 것으로 추정된다.
  • 시드 마이어의 문명간디 - 비폭력주의자의 상징인 간디는 이 게임에서 툭하면 플레이어에게 협박과 선전포고를 날리고 핵을 쏘는 Be폭력주의자로 변한 것에는 오버플로 때문일 것이라는 추측이 강했으나, 훗날 오버플로가 아니라 고의로 그랬음이 밝혀졌다. 1편에서 간디가 가진 여러 가지 성향은 호전적인 면을 증가시키는 효과도 있는데, 이것이 간디에게 일괄 적용된 것을 재미있다고 생각해 컨셉화시켰다.


3.3. 16비트 오버플로[편집]


16비트 정수의 저장 범위는 -32768 ~ 32767(signed) 또는 0 ~ 65535(unsigned)이다. 65535나 32767을 넘어갈 경우 오버플로가 발생한다.

  • 리그 오브 레전드: 비에고가 암흑의 인장을 구매한 상태에서 적 챔피언을 지배 후 죽으면 인장의 스택이 -65534가 되는 버그가 있었다. 현재는 패치됨.
  • 리니지(게임)도 예외는 아니어서, 플레이어의 성향은 -32768(Chaotic) ~ 32767(Lawful)이다. 이 수치는 [short] 자료형의 최소~최대값이다. 이 16비트 숫자를 넘기면 오버플로우가 발생한다. 참고로 무기 인챈트의 한계가 +127이다.
  • 마인크래프트 - give 명령어를 사용해 마법부여를 최대 32767까지만 올릴 수 있는 이유도 오버플로 때문이다. 32768 이상을 입력하게 되면 그대로 -32768이 되어 1보다 못하다.[예시] 현재는 해당 변수의 정수형을 교체해서 2147483647까지 마법부여가 가능하다. 하지만 1.17.1부터 최대레벨이 255로 바뀌었다.#
  • 브롤스타즈: 공격력이 32768이 넘으면 1이 돼서 1렙 틱에게도 의미없는 데미지가 된다.(예시: 테이크다운에서 파이퍼가 80~90개 이상 파워 큐브를 수집#) 그리고 체력이 65536을 넘어가면 게임이 튕긴다.
  • 성검전설 3블랙 라비: 블랙라비의 HP가 65500인데, 회복을 시켜주면 65535를 넘어서 오버플로가 발생한다.
  • 슈퍼로봇대전 시리즈: 윙키 시절 슈퍼로봇대전은 16비트 오버플로 때문에 적 체력이 65000을 넘지 못했고, Z 시리즈 전까지는 최대로 낼 수 있는 대미지가 65535였다.
  • 스타크래프트 시리즈: 스타크래프트의 방어력은 8비트로 저장하기 때문에 최대 255까지만 업그레이드가 가능하고 공격력은 65535까지 가능하다. 그래서 방어력이 255를 넘으면 1로 되돌아가고 공격력이 65535를 넘으면 표기 대미지가 65535 이상이라도 실제 공격력은 0부터 시작한다. 다만, 실제 데미지는 0.5가 들어간다. 엔진상으로 데미지연산은 이진법에서 끝자리가 1로 끝나는 홀수만을 사용하기 때문으로 추정된다. 오버플로를 이용해서 클리어하는 유즈맵(흑운장) 요즘은 EUD나 에디터의 발달 덕분에 유즈맵에서 오버플로를 경험할 일은 별로 없는 편. 스타크래프트 2에서도 게임 시간이 32,768초[9]를 넘기면 모든 세력이 패배하고 플레이어도 게임에서 강제로 퇴장당하게 된다.
  • 파이널 판타지 7: 바레트 월리스빈센트 발렌타인의 최강 무기는 각각 장착 마테리아의 AP와 직접 처치한 적의 수에 비례해 제한 없이 위력이 강해지는데, 바레트의 미싱 스코어에 대량의 AP를 보유한 마테리아를 8개 꽉 채우거나 빈센트로 65535마리 이상을 처치하면 공격력이 무한에 가까워져 최강 보스 마저도 일격에 이길 수 있다. 자세한 것은 각 항목 참조.
  • 폴아웃: 뉴 베가스: 전 재산이 32767캡 초과인 상태에서 모든 캡을 탑스 카지노 칩으로 바꾼 뒤 모두 버리면 탑스 카지노 칩의 갯수가 마이너스 단위로 나타나게 되는데 이때 탑스 카지노 칩을 줍고 카지노 칩을 캡 등 재화로 환전하면 무한으로 환전이 가능하다.[10] 이를 이용해 환전을 반복하여 전 재산을 몇백만 캡 단위로 불릴 수 있다.
  • 카트라이더 러쉬플러스: S17 시즌에 시뮬레이션 모드 팀 릴레이 모드에서 65535점을 넘기면 점수가 초기화되는 현상이 생겼다.
현재는 해결 되었다.

3.4. 32비트 오버플로[편집]


32비트 정수의 저장 범위는 대략 -231 ~ 231-1(signed) 또는 0 ~ 232-1(unsigned)까지이다. 이 값을 넘어 갈 경우 오버플로가 발생한다. 이 값들을 풀어 쓰면 42949672952147483647인데, 관련 버그에서 흔히 등장하는 값이다.[11]

  • 2038년 문제
  • 497일 문제
  • Y2K22 버그: 2022년의 날짜를 "YYMMDDHHMM" 형식으로 저장하면 예를 들어 '2022년 1월 1일 1시 1분'은 "2201010101" 가 된다. 그런데, 이 문자열을 그대로 정수형으로 변환해 버린 2201010101은 2147483647 를 넘어서기 때문에 오버플로가 발생한다.[12] 마이크로소프트 익스체인지에서 이 버그가 발견되어 이메일이 정상 전달되지 않는 버그가 발견되었다. 업계에서는 이를 'Y2K22 버그'라고 부르고 있다. #
  • 강남스타일: 조회수가 2,147,483,647을 넘기자 조회수가 오버플로해 음수 단위로 떨어지는 척하는 이스터 에그를 만들었다. 물론 조회수를 저장하는 변수는 해당 시점 이전에 64비트로 갈았다. 자세한 내용은 유튜브 특별 서비스 단락을 참조.
  • 메이플스토리: 옛날부터 메이플을 해온 유저들은 2,147,483,647이라는 숫자가 익숙할 것이다. 바로 옛날 풀 메소 수치로, 이 숫자는 위에서 설명된 것처럼 32비트로 나타낼 수 있는 "부호가 있는 숫자" 중 최댓값이다. 그리고 보스 몬스터의 HP도 해당 수치를 넘길 수 없어 초창기 시그너스의 경우 억 단위의 체력 회복을 40번이나 했었다. 지금은 전부 상위 비트 변수로 교체해서 해당 문제는 사라졌다. 그러나 스우 이상의 보스 몬스터들부터는 클라이언트를 뒤져봐도 체력을 21억이나 0으로 표기하면서 실제 체력 자체를 숨기고 있다. 그 이유는 이 문서를 참조.
  • 워크래프트 3: 해당 문서에는 없으나 영웅의 경우 체력값이 본래 체력+힘×1당 체력 증가 수치이므로 유즈맵 등에서 아이템으로 힘이나 체력 감소로 체력이 0 미만이 되었을 경우 체력이 0으로 간주하고 사망하게 된다. 다시 재부활하게 될 경우 체력이 정확히 0이라면 1/1으로, 0 미만이라면 1/4294967136으로 표시된다.
  • 하스스톤: 공격력, 생명력 또는 방어도가 2147483647을 넘기면 오버플로 현상으로 인해 0이 되어버린다.(#) 하지만 이러한 경우는 보통 이러한 상황을 위해 실험하는 경우이며 실제로 이런 상황이 생기는 경우는 극히 드물다.
  • 마인크래프트: 경험치 레벨이 2147483647레벨을 넘으면 다시 0레벨이 된다. 인챈트 또한 2147483647레벨까지만 붙일 수 있다. 또한 /xp 명령어로 줄 수 있는 경험치의 최대 양도 2147483647이다. 그리고 스코어보드의 최대 양수값도 2147483647까지이다. 이 이상을 넘어가면 -2147483648으로 바뀌게된다.
  • 쿠키런: 핑크초코 쿠키에서 점수 폭주가 발생했고, 21억에 도달하면 0으로 리셋되는 버그가 존재했었다. 현재는 패치로 수정되었다. 그리고 48억을 낸 또 하나의 버그 쿠키가 나오고 말았다
  • 쿠키런: 오븐브레이크: 32비트 운영체제 한정으로 떼탈출에서 21.4억을 넘기면 점수가 -21억이 되는 버그가 있었다. # 이후 패치로 32비트 운영체제에서 21.4억을 넘기면 점수가 표시되지 않게 바뀌었다. 64비트 운영체제는 21.4억을 뚫어도 정상적으로 점수 표시가 된다.
  • 그란 투리스모 시리즈: 그란 투리스모 3에서 시애틀 서킷에서 토요타 GT-One 같은 다운포스가 큰 차를 타고 맵을 뚫고 가속하면 어느새 차가 들리면서 속도가 붙더니 21억 km/h[13] 혹은 21억 mph 로 가속되며 높은 확률로 게임이 뻗어버린다.
  • 옛날에 만들어진 리니지(게임)이나 뮤 온라인, 라그하임 등의 옛날 온라인 게임의 경우에 소지가능한 화폐의 양을 32비트 정수로 해서 최대 20억 ~ 21억 정도까지만 소지되게끔 해놓은 게임이 많았다. 그래서 이런 오버플로를 막기 위해 소지 가능한 액수를 아예 20억이나 21억으로 잡아두고 추가 소지를 못하게 하면서 대체 화폐 아이템을 만들거나 혹은 시스템 자체를 갈아엎어서 21억 이상이 소지되게 변경한 경우가 주를 이룬다.
  • Egg, Inc.: 가격이 황금 계란 1000개 이상인 부스터를 사용할 때에는 진짜로 사용할 것인지 물어보는데, 해당 부스터가 1개 있는 상태에서 Yes 버튼을 두 손가락으로[14] 터치하면 부스터가 두 번 사용되고, 개수는 -1에서 부호 없는 32비트 정수형 최댓값인 4294967295로 오버플로된다.
  • 스텔라리스의 경우 (2.5버전까지 기준으로) 주로 210만 정도를 초과할 때 오버플로가 발생하는데, 고정 소수점 방식의 실수 구현 때문이다. signed 32비트의 한계인 2,147,483,647의 대략 1/1000인 것으로 봐서, 32비트에 10비트 지점을 고정한 방식으로 보인다. 자세한 것은 모드 정보의 주의 사항 참고.
  • 카트라이더: 2021년 4월 15일 등급전에서 -2147483647점이 부여되어 0점이 되는 오버플로 현상이 발견되었다.
  • 엘소드: 플레이어블 캐릭터인 이브의 전직 중 하나인 코드: 네메시스의 나소드 무기 강화 패시브 스킬은 커맨드 공격 시 일정 확률로 추가 피해를 주는데 일정 확률로 발동 시 적을 한방에 즉사시키기도 했는데 이 때 표기되는 데미지가 -2147483648다.
  • 리그 오브 레전드-비에고: 암흑의 인장 버그 버그를 이용하면 주문력이 -21억으로 표기되는 버그가 있었다.
  • 헝그리 샤크 월드: 한 게임당 찍을수 있는 최대 점수의 한계가 최대 2,147,483,647점이며, 이 점수를 넘게되면 점수 획득량이 음수로 변경된다.
  • 프린세스 커넥트! Re:Dive: 콧코로가 힐량이 21억을 넘기면서 오버플로가 발생 힐이 데미지가 되버리면서 파티가 전멸했다.
  • 메탈기어 솔리드 V 더 팬텀 페인: 모든 게이머들이 핵무기를 만들지 않으면 나오는 히든 엔딩이 존재했는데, 비매너 유저들이 해킹 프로그램을 이용해서 핵을 마구 찍어냈기 때문에역시 핵을 벌려면 핵이지, 이 엔딩을 보는 건 요원한 일이었다. 하지만, 황당하게도 게임내 핵무기의 총합이 오버플로우가 발생하면서 히든 엔딩이 나와 버렸다. #
  • 리그 오브 레전드/전략적 팀 전투 : 시즌7 패치 이후 특정 상황에서 볼리베어의 체력이 -2147483648가 되는 버그가 발생했다.
  • 테라리아: DPS 미터기의 최대 표싯값이 2147483647이다. 넘어갈 경우 음수로 표시된다.#
  • 하츠오브아이언4:전쟁도중 총또는 장비의 수량이 매우 작아지면 오버플로우가 일어나서 되려 장비수가 2147483648개로 늘어나는 버그가 있는데 실제로도 장비가 채워지고 보급이 원활해진다.
  • CATS : 해커의 스킬인 추가주스를 부메랑이 발사된후 사용하면 2147483647%가 뜨며 체력이 모두 채워진다.
  • GTA 5 : GTA 5 스토리모드에서는 $2147483647 이상으로 돈이 늘어나지 않는다.

3.5. 64비트 오버플로[편집]


파일:92fe5412eb33465ac.jpg
[15]

64비트 오버플로도 존재하나 9223372036854775807이라는 상당히 큰 수를 넘겨야 하기 때문에 어지간한 파워 인플레가 아닌 이상 발생하는 일은 거의 없다. 참고로 시간으로 오버플로가 발생하려면 2922억년을 기다려야 한다. 2922억 년 뒤의 나무위키 편집자가 문서를 수정하면 된다

3.6. 기타[편집]



여러 기기의 설정 가능한 최대 날짜를 넘겨서 오버플로를 실험해보는 영상. 각종 OS, 전자기기, 프로그래밍 언어를 테스트했다.[16]

  • 괴리성 밀리언아서: 암속성 헤브리디즈에서 유저들이 감전 데미지를 증폭해서 1800만 데미지를 넘겨 1데미지로 표기되는 오버플로 현상이 있었다. 후에 수정되어 더 이상 문제는 없다.
  • 던전 앤 드래곤 섀도 오버 미스타라: 매직 유저가 마법의 대미지를 올려주는 최강의 지팡이 스태프 오브 위저드리를 착용한 상태에서 최강 마법 메테오 스웜을 사용하면 오버플로 현상이 발생, 평타 한대만큼의 쥐꼬리만한 대미지가 들어간다.
  • 오버워치: 경쟁전 시즌 2에서 1점에서 패배하면 0점이 아닌 가장 높은 5,000점이 되었다. 실제로 이런 유저가 등장했었다.
  • 메탈슬러그 디펜스: 오버플로로 인해 무한 메달 획득이 가능한 버그가 발생했다. 해당 문서 버그 문단 참조.
  • 팝픈뮤직: BEMANI 시리즈에 속한 다른 기종에 비해 유독 오버플로 계열 버그가 많이 발생한다. MASS YOSHITAKA新曲이라든지, 팝픈뮤직 éclale의 호감도 버그라든지.
  • 모두의마블: 봉인석 버그는 오버플로를 이용한 버그이다.
  • Windows 10: 계산기로 절댓값이 e+9999를 초과하거나 e-9999보다 작아지면 오버플로라는 문자와 함께 한번 더 계산을 하면 0으로 된다.
  • Games Done Quick에서 슈퍼 마리오 월드TAS로써 즉석으로 해킹해(!) 해당 게임의 에셋으로 또다른 미니게임을 만드는 장면이 있는데(상세는 항목참조) 오버플로가 일어날 수 있는 메모리상의 헛점을 발생시킨 뒤 이를 역이용한것으로 보인다. 사실 이쪽은 임의 코드 실행에 가까운데 오버플로가 임의 코드 실행을 하게 만드는 구멍 중 하나로 작용하는 것일뿐.
  • GPS 신호 중 주(week)를 기록하는 부분은 8비트도 16비트도 아닌 10비트로 대략 1024주 = 19.7년마다 오버플로가 일어난다. 1999년과 2019년에 오버플로가 있었다. 다음은 2038년 12월에 발생할 것으로 예상된다. 공교롭게도 2038년에는 2038년 문제라는 다른 오버플로 문제가 존재한다.
  • EUD - 스타크래프트의 유즈맵에 사용 가능한 카운트 변수 중 'Unit Deaths'에 오버플로 방지 루틴이 존재하지 않아 어떠한 값이던 마음대로 설정할 수 있는 임의 코드 실행 취약점이 존재하는 것을 이용한 각종 기상천외한 짓들이 가능하다.
  • 버퍼 오버플로 - 하트블리드 사태
  • 아리안 5 로켓 - 1996년 아리안 5 로켓이 발사 후 37초만에 궤도를 벗어나 자폭하였다. 그 로켓에는 무려 5억 달러짜리 통신위성이 탑재되어 있어서 당연히 엄청난 피해가 발생했다. 나중에 조사해 본 결과, 컴퓨터로 조종되던 엔진 노즐에 잘못된 데이터가 전송된 것이 원인이었고, 그 이유는 64비트 부동소수점 데이터를 16비트 정수형 데이터로 변환하는 과정에서 생긴 오버플로였다. 원래 그 코드는 아리안 4에서 가져온 코드였는데, 당시 학자들은 아리안 4의 속도는 절대 16비트 정수형의 최댓값을 넘지 못할 것을 알았던 탓에 최적화의 이유로 16비트 정수형을 사용했던 것이고, 아리안 5는 속도가 더 빨랐으니 그걸 넘겼던 것이다.
  • Therac-25 - 초창기인 1980년대에 개발된 방사선 암 치료기기. 작동중에 정수 오버플로 문제로 방사선 수치가 잘못되어 최대 100배의 방사선을 조사하는 의료사고 수 건을 일으켰다. 관련 영상[17]
  • 도돈파치 최대왕생: GP카운터가 2147만을 넘는 순간 갑자기 GP카운터가 999999999로 증폭되는 버그가 있다. 덕분에 최대왕생의 본래 케이브에서 의도했던 방향과는 달리 스코어 패턴은 얼마나 오버플로우를 일으킬 수 있느냐가 관건이 되어버렸다.
  • 안드로이드(운영체제) - 기본 스톱워치는 99시간 59분 59초 99까지만 측정되며, 이를 넘어갈 경우 최대 시간에 도달했다는 메시지와 함께 정지한다.
  • 그 외에도 999999까지 표시되는 게임에서 999999를 넘겨도 계속 999999로 표시되는 경우가 있는데, 이 경우 해당 재화 구매만 불가능할 뿐이지 실제로 얻어지기는 한다. 물론 충분히 큰 값(2147483648 이상)에 도달할 경우 오버플로가 뜬다.

4. 관련 문서[편집]




파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-12-10 07:06:48에 나무위키 오버플로 문서에서 가져왔습니다.

[1] 32767에서 -32768로 나가는 걸로 봐서 이 예시에서 양의 수는 부호 있는 2바이트 정수 형태(short)로 저장되는 모양이다.[2] 실제 무게는 131.5kg인 것으로 추정된다. 지난 측정값인 117kg에서 14kg 이상 찐 것.아무리 오버플로라도 이건 막장인데? 도대체 무슨 일이 있었길래... 아니면 체중계의 측정 범위를 초과한게 아니라 체중계의 바늘이 고장으로 인해 1.5kg에서 걸려 멈춘 걸수도 있다. 하지만 이 경우 돌아가는 모습 없이 그냥 멈춰야 한다.[3] 참고로 절대영도는 약 영하 273.15도이다.[4] 원래 나와야 할 값 대신 필요없는 값이 나온다고 '쓰레기 값'이라고 부르기도 한다. 다만 쓰레기 값이라는 말 자체는 메모리를 초기화하지 않고 사용해서 그 전에 그 자리를 점유하던 임의의 값이 참조되는 등 여러 이유로 사용하기 곤란한 값이 나올 때 쓰이는 좀 더 광범위한 말이다.[5] 프로그래머가 코딩을 하며 catch, try 등으로 예외 처리를 했으면 오류 메세지가 뜬다. 보통은 '메모리가 XXXXXX~YYYYYY 값을 초과하였습니다. 이 메모리는 read될 수 없습니다' 와 같이 뜬다.[6] 보험 가입이 거부되는 호머를 보고 마지의 강박적인 절약으로 인해 생긴 돈을 빼돌려 구매한 캠핑카이다. 뒤의 조금 작은 00은 센트 단위다. 짤방 속 문구는 스페인어로 '휘발유 공짜!'[7] 현재는 허무맹랑할 이야기뿐이지만 당시에는 실제로 일어난 일들이다. 도서 반납을 새천년에 했더니 컴퓨터가 1900년부터 대여한 것으로 인식해 100년치의 반납금을 산정한 일, 1900년도 출생자들에게 입영통지서날아간 일... 다만 너무 나가서 금융망이 붕괴한다느니 방사능이 유출된다느니 등의 정말 말도 안되는 소리까지 나오기도 했다.[8] 여기서 월드를 나타내야 할 칸이 빈칸으로 나오는 것도 오버플로 때문인데, 사실은 월드 36이지만 프로그램에서는 36을 빈칸으로 인식하여 나타나는 것이다.[예시]
/give @p diamond_sword{Enchantments:[{id:"sharpness",lvl:32767}\]}
라고 입력하면 날카로움 32767의 다이아몬드 검을 얻지만,
/give @p diamond_sword{Enchantments:[{id:"sharpness",lvl:32768}\]}
이라고 입력하면 날카로움 -32768의 검을 얻게 된다. 때리면 몬스터가 치료되는 마법의 검.
[9] 9시간 6분 8초이다.[10] 이때 얻는 캡의 갯수는 65535에서 가지고 있는 칩 갯수를 뺀 만큼 얻는 지라 칩이 32768캡에 가까울수록 얻는 캡이 많아진다.[11] 그런데 1회 획득 가능 최대 한도가 2의 31제곱이지 실제로는 2의 1024제곱까지도 보유할 수 있는 시스템도 있다. 이 경우 20억씩 계속 모으다보면 1000조를 넘겨서 1e+15로 표시된다. 한 예시로 우주전쟁 플래시 게임을 들 수 있겠다. 1회 획득 가능 최대 한도는 2의 31제곱이지만 세금을 20억씩 얻다보면 1e+15로 표시된다.[12] 문서 위의 예시로 올라간 날씨 온도계 오류가 바로 이 오류다.[13] 이는 광속의 약 2배에 달하며, 당연히 현실에서는 상대성 이론에 의해 불가능하다.[14] 엄밀히 말하면 두 터치 간격이 30ms 이하여야 한다.[15] 다만 위 만화는 엄밀히 말해 64비트 오버플로는 아니다. 만화를 해석하자면 지니가 건넨 조건은 '소원을 늘리면 안된다' 였기 때문에 '소원을 줄이는 것'은 가능하다. 여기서 소원자가 말한 갯수 타입인 unsigned long long 은 표현 가능한 숫자 범위가 0 ~ 18446744073709551615 까지인데, 마지막 소원 1개가 남은 시점에서 '남은 소원의 갯수를 1개 줄여달라'는 소원을 썼고, 그 소원을 사용한 것 자체로 갯수가 소진되어 0이 되었는데 소원의 내용대로 추가로 -1이 발생한다. 여기서 오버플로가 발생하면 양수 18,446,744,073,709,551,615의 소원 갯수가 되는 것.[16] 기기에 따라 반응이 다른데, 무한정으로 늘어나거나, 기기에 저장된 가장 이른 날짜로 설정되거나, 아니면 설정할 수 있는 최대치 이후의 날짜로 옮겨가기도 한다.[17] 게다가 이 기기의 코드는 단 한 명의 아마추어 코더가 작성한 것으로 밝혀졌고, 이 일련의 사태 이후 FDA는 의료기기에 쓰이는 코드 다큐멘테이션을 의뮤화한다. 오늘날 이 사태는 IT 윤리 분야에서 널리 인용되는 케이스로 남아있다.