Apparently this is the "story time" thread, so here's mine, of how I hacked the Linux kernel without ever having written more than maybe 50 lines of C code.
This was in early 2001, I was an exchange student in Japan, and I'd bought a really cool gadget in Akihabara that almost nobody had heard about: a hardware MP3 player. For storage, it used MMCs (precursor of SD cards), affordable ones held 32MB. To get music onto those cards, I also bought a USB card reader.
And there I ran into problems: the PC in my dormitory room was a used Pentium Pro desktop I'd gotten very cheaply without an OS, and I'd installed Linux on it. But at that time, USB support on Linux was still rather spotty, and while the card reader was in principle supported as a mass storage device, the USB driver would reproducibly freeze up after a short time accessing it.
As mentioned above, my C skills were basically non-existing,
but compiling your own kernel was at that time still a pretty common thing for Linux users to do, so I had some experience with that. And I was motivated. I enabled kernel debug output, and discovered that just before freezing up, the driver would report that it had received an event with a certain ID. I found the code that handled events, and I found the code that handled the problematic event. I looked at it and realized that I was many months of learning away from being able to fix it.
So instead, I deleted it. I simply made the driver ignore that type of event.
It worked. I could use the card reader to put MP3 files on the MMCs and listen to them on the player.
I felt a strange mixture of achievement and embarassment.
This story I believe, largely because there's no money or fame involved, and because it's the software equivalent of "hit it with a hammer until it works again."
Ha, reminds me of overclocking the Tegra 2 in some Toshiba tablet. People were saying it's impossible, with various modified files linked by people saying it should work but it doesn't, must be something hardware related.
Being a naive dumbass, that did not stop me, I looked through the source files and thought "why not just edit the voltage/frequency tables in all of the files?"
And it worked. Could've easily bricked the device, but it didn't. I believe I had the same feeling as you. Yay for ignorance, I guess :D
That's like a scene in some old TV series about a startup I only vaguely remember. It's important demo day, but a bug is threatening to ruin everything. Everybody is trying to find the bug. Somebody yells out "I found it!" and everybody rushes over. For a long moment, they all stare quietly at a big red flashing line of code on the screen. Then somebody blurts out "delete it!" and the person at the keyboard deletes the bug with a single keystroke. Everybody cheers. The startup is saved!
This reminds me of something, too. My siblings and me often play a (now) old RTS - Battle for Middle Earth II - against AI. When these matches go on a while, sometimes it crashes when defeating an AI.
Well I looked at where it crashes, and simply nopped out the code where it crashes (it was a null pointer access I think) ... and we haven't noticed any weird effects of that so far ... one of these days I'll get around to making it an if (ptr) fix and see that happens then, but it is not this day!
No, I don't think I ever shared it outside of personal acquaintances.
Diffing the game.dat we use vs an "untouched" cracked one there are a few more differences than I expected (I at one point fixed the random version number and the 3:30 auto defeat if the game thinks you copied the game illegaly).
If you send me a mail to the email in my profile, I'll send you the binary!
This was in early 2001, I was an exchange student in Japan, and I'd bought a really cool gadget in Akihabara that almost nobody had heard about: a hardware MP3 player. For storage, it used MMCs (precursor of SD cards), affordable ones held 32MB. To get music onto those cards, I also bought a USB card reader.
And there I ran into problems: the PC in my dormitory room was a used Pentium Pro desktop I'd gotten very cheaply without an OS, and I'd installed Linux on it. But at that time, USB support on Linux was still rather spotty, and while the card reader was in principle supported as a mass storage device, the USB driver would reproducibly freeze up after a short time accessing it.
As mentioned above, my C skills were basically non-existing, but compiling your own kernel was at that time still a pretty common thing for Linux users to do, so I had some experience with that. And I was motivated. I enabled kernel debug output, and discovered that just before freezing up, the driver would report that it had received an event with a certain ID. I found the code that handled events, and I found the code that handled the problematic event. I looked at it and realized that I was many months of learning away from being able to fix it.
So instead, I deleted it. I simply made the driver ignore that type of event.
It worked. I could use the card reader to put MP3 files on the MMCs and listen to them on the player.
I felt a strange mixture of achievement and embarassment.