BUG的本质原因
在这里我们综合借助no&gba的debug功能,以及pret的反编译工程进行探索。
首先既然是已知读取到“返回至\n上一级菜单。”时会出现问题,那么便可以对该地址进行断点,一旦有程序读取这条文本所在的地址时便暂停程序。从上面截图可以看到地址是0x08416080,那么我们需要设置该地址被读取时即停止的断点代码格式为:“[08416080]?”
按下ctrl+b键唤出断点窗口,输入这串代码。

设置好断点后,在培育屋内进行对话,当触发断点条件时,程序会停止在对应指令上。在这里可以看到是停在了0x081E5F9E的函数位置上。

在pokefirered反编译生成的map文件中,我们可以查找到这个地址的函数是strcpy。

但是很可惜这个函数是封装在库里的函数,并没有c语言样式的函数代码。那么我们接着回到no&gba里观察这个函数。