A Few Suggestions
The hardest step in a journey is often the first. Here are a few suggestions to help you on your way.
- Start with a small project (< 1KB). If you haven't disassembled code before, this is the time to play with different conventions, like whether to use MixedCase or underscore_separated or SCREAMING_CAPS for labels.
- Use the program thoroughly. Understand all of what it does.
- Begin each project by separating code from data. Identify external
entry points, format tables of addresses, and find JSRs that are
followed by inline data. Write an extension script to handle the
inlines so you won't keep tripping over them. If parts of the program
are relocated to a different address, set the appropriate address
overrides. Progress will be easier once you get code, data, and junk
identified and arranged in memory.
- Code start tags are rarely needed, and code end tags are almost never needed. You shouldn't have to spend a lot of time manually tagging things. If a piece of code isn't being found, it's usually best to figure out why the code that calls it isn't being found, instead of trying to tag it and forge ahead. It might be dead code that's never called, or it might be called from a table that you can format to add code entry tags for multiple addresses with a single operation.
- Start with easily identifiable pieces. If a chunk of code is reading from the keyboard, you can make reasonable guesses about the purpose of the code that interacts with it. The start of the program is often the hardest place to begin, because it usually just initializes a bunch of stuff you haven't identified.
- Expect to figure out little pieces. Use what you learn from these to figure out other little pieces. It's a jigsaw puzzle, not a book.
- Don't get discouraged if there's a ton of code that you can't make sense of. It won't at first. Keep chipping away.
- Read On Disassembly for additional thoughts.