AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |
Back to Blog
Citra ultra sun ultra moon crash11/4/2023 Looking at the code, there is one call instruction with a return matching the crashing position, but that call instruction can't be reached in any possible execution of the code. I wanted to investigate why this situation was even happening in the first place: why is execution reaching a potential return point without a call? It's possible the shader code was devious and re-using bits of regular code as a subroutine but I found that unlikely. The solution is to push a dummy value (such as 0xFFFFFFFF) on the stack at the start of the execution of the JIT. In this case, a value left on the stack by the caller of the JIT happens to match the IP, causing the code to execute a return from subroutine even though there had been no corresponding call in the shader. This check peeks the value on the stack and compares it to the current IP, and if it matches, does a return. Current situation: already found what's causing the crash and how to work around it:Įxecution reaches a potential subroutine return point, where the JIT inserts a check for a return.
0 Comments
Read More
Leave a Reply. |