3 ms·
>"GTA 3 and Vice City were originally written in C++," aap explains. "The compiled executables that are shipped are in machine code. So the general task is to g
by Hamuko 3y ago
>"GTA 3 and Vice City were originally written in C++," aap explains. "The compiled executables that are shipped are in machine code. So the general task is to go from machine code back to C++.
>"Machine code can be (more or less) mapped 1:1 to a human readable form called assembly language, but it's still very tedious to read.
>"To go back to C++ is by no means a simple 1:1 mapping, but over the last 10 or so years decompilers have appeared that help with this process.
>"So what we typically do is work with the output of the decompiler and massage it back into readable C++. This is sometimes quite easy and sometimes hard, but in any case it's a lot of code and you're bound to make mistakes."
>Thankfully, the code for GTA 3 on PS2 and Android includes debug symbols. Debug symbols contain all the extra information needed to debug a game during the development process, but are often stripped out for release executables to avoid bloat. For whatever reason, Rockstar left these symbols in, giving the reverse-engineering team a huge leg-up.
>"We were very lucky we had symbols for the games," aap says. "PS2 [GTA] 3 and all the Android releases have names for the global stuff (functions and global variables). This was a huge help and I don't think we'd be anywhere near reversed GTA without them."
https://www.eurogamer.net/how-a-small-group-of-gta-fanatics-reverse-engineered-gta-3-and-vice-city-without-so-far-getting-shut-down-by-take-two https://www.eurogamer.net/how-a-small-group-of-gta-fanatics-...
- euazOn 3y agoIm curious, since it seems to be mostly about walking back the one-way-street of C++ to assembly, what’s stopping us from training a ML model to help with decompilation by figuring out patterns in the compilation process? (there has to be a reason, otherwise someone would have done it already)
- esrauch 3y agoThe answer is that people have done it, ML guided decompilation is an active area.
- Eisenstein 3y agoI just tried with Claude Opus. 1. Write hello.cpp 2. Compile 3. Disassemble to asm with objdump -d 4. Give asm to Claude and ask it to write the C++ code that would result in that asm 5. Got back hello world in c++ So, it seems you might not need a specially trained model. Original: #include <iostream> int main() { std::cout << "Hello, World!" << std::endl; return 0; } Reproduced: #include <iostream> int main() { std::cout << "Hello, World!" << std::endl; return 0; } asm: https://pastebin.com/SswUSh0u https://pastebin.com/SswUSh0u * https://imgur.com/U1wbb0d https://imgur.com/U1wbb0d