Posts: 564 from 2003/2/24
From: finland, the l...
I spent couple of days trying to figure out the CheckItOut issue. I ended up reverse engineering the application, as well as doing runtime instrumentation of the application both in MorphOS and UAE.
Here are some of the findings:
1. The broken behaviour was not introduced in MorphOS 3.16. The app bugs out even with earlier MorphOS versions, but how badly it misbehaves depends on luck. Here "luck" means contents of memory, which can change in arbitrary manner between MorphOS releases, or even vary run-to-run. This also explains the randomness of the crashing. You can see the "hits" in the MorphOS ramdebug (or serial) log. At times the application can survive the illegal memory accesses, but sometimes the hit is serious enough that the application cannot continue and it will hang or crash.
2. The application has bugs. It for example calls taglist functions with unterminated taglists. Whether that alone crashes depends on luck (or stack memory contents at the time of the function call).
Yet, I cannot rule out the possibility that there is a bug in MorphOS, too. If there is, it predates MorphOS 3.16 however.
The application misbehaviour is a complex interaction of various components inside the application, and could be related to timing or misfired/missing events. As a result a global variable will contain pointer to unexpected structure type. The code assumes the variable to point to a different type and ends up accessing memory at 0x73746572 - the contents of this memory area determines how exactly the app will misbehaves.
At this stage I don't feel inclined to spend more time on this. This is a single application misbehaving and figuring the core reason for the misbehaviour could take weeks. It could still end up being due to well hidden bug in the application itself. It is just not worth the effort.
While MorphOS attempts to be as compatible as possible, some applications just won't work. CheckItOut is one of them.
[ Edited by Piru 20.07.2022 - 14:31 ]