View Single Post
Old 24 March 2020, 20:51   #10
jotd
This cat is no more
 
jotd's Avatar
 
Join Date: Dec 2004
Location: FRANCE
Age: 52
Posts: 8,162
I had a C++ version at some point. But I rewrote it from scratch into python. Besides, the script can make wrong assumptions. But it generally works very well 99% of the time. I've been using this approach for 15+ years and it always worked well.

It can detect library strings when opening libraries, change the labels to "xxxbase" and then change the offsets when A6 is loaded with this base. The base is reset when encountering RTS, so there's little chance that there's a mistake. At worst, the offsets remain (and the tool comments "unknown"). You can then figure out the unknown calls manually by setting the proper library base, and repeat the operation until there aren't any "unknown" left.

I recently added some "formal execution" that follows library base into registers, until it is set to A6.

I'll try to publish the github repository later. I don't want to create a repository only for this tool.

Note: CFOU! used it to reverse-engineer EOB / EOB2 to create AGA versions. I also use it a lot to clarify what the hell a DOS game is doing when creating a whdload slave.

BTW one thing I hate is when IRA fails to disassemble an executable. First it doesn't support overlayed (d68k does but the output sucks) at least for the non-overlayed parts. Then sometimes, on some executables, it just creates a bigger and bigger file. When you stop it, you get correct output at first, then a neverending lot of junk (dc.b). I usually edit it out. Anyway I'm generally not using IRA to be able to reassemble the code (although it works well). I use it to understand what the code does, and to apply patches at given offsets (that's why -a option is a must have for me)

I don't want to hijack this thread. I'll try the configuration tricks. I always used IRA in single pass.

Last edited by jotd; 24 March 2020 at 21:00.
jotd is offline  
 
Page generated in 0.05008 seconds with 11 queries