国外炫网站,温州哪里做网站比较好,wordpress基本设置,高端个性化网站开发文章目录 fc/sfc mesen下载和使用推荐
fc/sfc
https://www.mesen.ca/docs/
mesen2安装#xff0c;vscode安装zg
任天堂yyds
w d 左右移动 u结束游戏 i崩溃或者卡死了 L暂停 D658地方有个flag 发现DEEE会使用他。且只有这个地方#xff0c;maybe会输出flag#xff0c;应… 文章目录 fc/sfc mesen下载和使用推荐
fc/sfc
https://www.mesen.ca/docs/
mesen2安装vscode安装zg
任天堂yyds
w d 左右移动 u结束游戏 i崩溃或者卡死了 L暂停 D658地方有个flag 发现DEEE会使用他。且只有这个地方maybe会输出flag应该属于DEDF这个函数因为和上面通过RTL隔开了
00CD5E [004D5E] A9 00 00 LDA #$0000
……
00CD73 [004D73] 22 AC C0 00 JSL $00C0AC00C0AC [0040AC] 3B TSC …… 00C8E0 [0048E0] 22 69 E0 00 JSL $00E069 00E069 [006069] 08 PHP……00E073 [006073] CB WAI 中断00E074 [006074] AF 30 00 00 LDA $000030……00E07C [00607C] 6B RTL……00C8EA [0048EA] 6B RTL
00CD77 [004D77] 80 E5 BRA $00CD5E
发现R的时候没有 JSL $00E069 直接到并且也没有 RTL返回到BRA $00CD5E
但当开始00C0AC时候 此时返回地址是正常的 发现返回地址比保存到栈里的返回地址多1可能是这个汇编的特色吧
所以问题就出在这段00C0AC [0040AC] 3B TSC - 00C8EA [0048EA] 6B RTL这段代码里不但改掉了返回地址并且没有进入00E069 里
然后设了个条件断点观察栈的返回地址改变时候自动下断点 发现进入 --------sub start-------- 018301 [008301] A3 04 LDA $04,S后改变的 调试后又发现是018316 [008316] 20 28 00 JSR $0028导致的会跳转到0028去执行
000028 [000028] 54 00 7F MVN $7F,$00
00002B [00002B] 60 RTS---------------- 大致逻辑如下
// 假设有一个 stack[] 数组表示堆栈memory[] 数组表示内存void subroutine() {A stack[4]; // LDA $04,Smemory[0] A; // STA $00Y A; // TAYA stack[8]; // LDA $08,SX A; // TAXA stack[10]; // LDA $0A,Sint temp X; // 保存 X 的值X Y; // XBA: 交换 A 和 XY temp;A | stack[6]; // ORA $06,Smemory[41] A; // STA $29A stack[12]; // LDA $0C,Sif (A 0) {goto skip_decrement;}A--; // DEC
skip_decrement:// PHB 及 PLB 没有直接映射subroutine_0028(); // JSR $0028A stack[6]; // LDA $06,Smemory[2] A; // STA $02return; // RTL
}
010028 [000028] 54 00 7F MVN $7F,$00此时A2 X0 Y1ff9 DB7E第一次复制
源地址$7F:0000 的值被复制到 目标地址 $00:1FF9。
X 和 Y 递增
X 0 1 1
Y 1FF9 1 1FFA以十六进制计算加 1 是 1FF9 → 1FFA。
A 减 1A 2 - 1 1。
第二次复制
源地址$7F:0001 的值被复制到 目标地址 $00:1FFA。
X 和 Y 递增
X 1 1 2
Y 1FFA 1 1FFB.
A 减 1A 1 - 1 0.
第三次复制A 变为 0但 MVN 会继续执行直到 A 为 $FFFF
源地址$7F:0002 的值被复制到 目标地址 $00:1FFB。
X 和 Y 递增
X 2 1 3
Y 1FFB 1 1FFC.
A 减 1A 0 - 1 -1以十六进制表示为 $FFFF。所以目标就是怎么改0x7f0000
期间自己乱尝试的时候发现前面的按键会导致后面的R的结果不一样。猜测可能是由影响的自己准备下个断点监视0x7f0000内容。尝试后发现上下按钮对返回地址有影响类似上按钮1下按钮-1但加的比特位置有区别貌似和左右移动有关。并且球球不能掉下去不然会清零
这个地方逆得不是很明白有时间再看看 所以最终目标将其变成DEDF即可还要保证球球不掉落下
因为会自动加1所以是DEDE