1PWN6502一道 VM 题,其中主要关注 LDA 和 STA 这两个访存指令,其中立即数寻址的偏移是 8 位无符号数,无法造成溢出,但是可以读写内存mem_ptr。__int64 __fastcall get_mem(unsigned __int16 a1){ if ( DEBUG ) fprintf(stderr, "(get_mem) reading at: 0x%X\n", a1); if ( a1 0xFFu ) return *(unsigned __int8 *)(mem_ptr + a1); if ( a1 0x1FFu ) return *(unsigned __int8 *)(mem_ptr + a1 - 256 + 256); if ( a1 > 0xFFF9u ) return *(unsigned __int8 *)(mem_ptr + a1 - 65018 + 512); if ( DEBUG ) fprintf(stderr, "(get_mem) parsed: 0x%X\n", (unsigned int)a1 - 512); return *(unsigned __int8 *)(mem_ptr + (__int16)(a1 - 512) + 518);}__int64 __fastcall write_mem(unsigned __int16 a1, char a2){ if ( a1 > 0xFFu ) { if ( a1 > 0x1FFu ) { if ( a1 0xFFF9u ) *(_BYTE *)(mem_ptr + (__int16)(a1 - 512) + 518) = a2; else *(_BYTE *)(mem_ptr + a1 - 65018 + 512) = a2; } else {
………………………………