Sleuthing the Binary
Dec. 4th, 2008 03:56 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
I continued my adventures to figure out MIDIStroke tonight.
I extracted several things from the MIDIStroke program, including it's main executable section in assembler language and various other esoterica that I think will help me figure out how it works. This gives me an instruction-by-instruction map of the interesting part of the program. It's not all of it, because it makes calls to OS X to do some of it's dirty work, but I know the part that I care about is in the part I've got. The next step was to hook up a MIDI device, then start checking out the behavior of the program when I hit or released a key. Originally I was setting individual breakpoints, like stop signs in the program, to see where it was going when I hit a key. However, I've realized that what would work a lot faster would be to simply record the execution of the program for each input combination I want, then compare the executions to see what changes when I do different things. Using this and deductive reasoning, I should eventually be able to figure out something like this:
1) Which part of the program processes the incoming MIDI messages (already got this one nailed)
2) ...then which part of *that* differentiates between 3 different types of messages
3) ...then what part of the program compares what's in the little box to what I'm hitting on the MIDI keyboard
Once I know these things, I should be able to answer the master question, which is "what do I need to put into the little box to get MIDIStroke to work with my Rocktron MIDI MATE pedal?"
I need to learn more about GNU Debugger's ability to record the path it takes through a program so I don't have to do it by hand. But since it's 4 AM, I'll probably do it *tomorrow.
I extracted several things from the MIDIStroke program, including it's main executable section in assembler language and various other esoterica that I think will help me figure out how it works. This gives me an instruction-by-instruction map of the interesting part of the program. It's not all of it, because it makes calls to OS X to do some of it's dirty work, but I know the part that I care about is in the part I've got. The next step was to hook up a MIDI device, then start checking out the behavior of the program when I hit or released a key. Originally I was setting individual breakpoints, like stop signs in the program, to see where it was going when I hit a key. However, I've realized that what would work a lot faster would be to simply record the execution of the program for each input combination I want, then compare the executions to see what changes when I do different things. Using this and deductive reasoning, I should eventually be able to figure out something like this:
1) Which part of the program processes the incoming MIDI messages (already got this one nailed)
2) ...then which part of *that* differentiates between 3 different types of messages
3) ...then what part of the program compares what's in the little box to what I'm hitting on the MIDI keyboard
Once I know these things, I should be able to answer the master question, which is "what do I need to put into the little box to get MIDIStroke to work with my Rocktron MIDI MATE pedal?"
I need to learn more about GNU Debugger's ability to record the path it takes through a program so I don't have to do it by hand. But since it's 4 AM, I'll probably do it *tomorrow.