ポケモン赤の任意コード実行で「ポケモン言えるかな?」
ポケモンの姿+名前の表示と鳴き声の再生を「ポケモン言えるかな?」の順番で行うプログラムを任意コード実行バグで実行しました。
ポケモン赤で「ポケモン言えるかな?」を実装しました pic.twitter.com/l1b0TwzGLo
— でぃぐ(ゲーム用垢) (@fujidig_game) 2022年1月4日
なかなかしょうもないですね。
アセンブリコードは以下の通りとなります。
[org(0xd9b3)] first: ld a, 164 ld b, a ld de, table loop: ld a, [de] or a jp nz, nonzero zero: push de push bc ld c, 60 call 0x376F # DelayFrames pop bc pop de jr join nonzero: ld [0xCF78], a ld [0xD092], a ld hl, 0xc3a0 push bc push de call 0x2F1C # GetMonHeader call 0x2D6D # LoadFrontSpriteByMonIndex pop de ld a, [de] push de ld [0xd0e3], a call 0x1A99 # GetMonName ld b, 0 ld c, 6 ld hl, 0xc3a7 ld a, 0x7f call 0x3718 # FillMemory ld b, 0 ld c, 6 ld hl, 0xc3bb ld a, 0x7f call 0x3718 # FillMemory ld de, 0xcd68 ld hl, 0xc3bb call 0x0405 # PlaceString pop de ld a, [de] push de call 0x2DBE # GetCryData call 0x0E33 # PlaySound #call 0x2DB5 # PlayCry ld c, 15 call 0x376F # DelayFrames pop de pop bc join: inc de dec b jr nz, loop ret table: db 0x54, 0x42, 0x08, 0x96, 0x2f, 0xa5, 0x6b, 0xa4, 0x68 db 0x18, 0x3a, 0x11, 0x0c, 0x91, 0x99 db 0x00 db 0x6c, 0x66, 0xbd, 0x35, 0x84, 0x5a, 0x01, 0x78 db 0xaa, 0x3b, 0x74, 0x0e, 0x37, 0x48, 0x4d, 0x69, 0xba db 0x00 db 0x71, 0x93, 0x22, 0xb0, 0x28, 0xa6, 0x23, 0xad, 0x36 db 0x65, 0xb1, 0x6e, 0x9d, 0x49, 0x67, 0x95, 0x33, 0x1a db 0x00 db 0x7b, 0x8e, 0x5d, 0x55, 0x1b, 0x4e, 0x10, 0x61 db 0x9e, 0x7c, 0x46, 0x5c, 0x21, 0x39, 0x9b db 0x00 db 0x05, 0x60, 0x2e, 0x30, 0x70, 0x1d, 0x97, 0x85 db 0x00 db 0x12, 0x8f, 0x09, 0x1c, 0x17, 0x4b, 0xb2, 0x0a, 0x88 db 0x00 db 0x24, 0xbe, 0x64, 0x94, 0x0d, 0x02, 0x16, 0x31, 0x04, 0xa9 db 0x00 db 0x80, 0x62, 0x82, 0x2d, 0x0f, 0x03, 0xb9 db 0x00 db 0x6f, 0x40, 0x13, 0xbb, 0x5b, 0xa8, 0x2a, 0x8d db 0x9a, 0x6d, 0xb4, 0x41, 0x25, 0x4c, 0x19, 0x06 db 0x00 db 0x26, 0x8a, 0x2b, 0x2c, 0x7e, 0x81, 0x29, 0x98 db 0xbc, 0xab, 0xa7, 0x90, 0x59, 0x83, 0x53, 0x72, 0x0b db 0x7d, 0x76, 0x07, 0x63, 0x8b, 0x47, 0x27, 0x52, 0x3c db 0xa3, 0x1e, 0x58, 0x6a, 0x77, 0xb3, 0x14, 0x4a, 0x75 db 0x00 db 0x00 db 0x00 db 0x15 db 0x00