diff --git a/Research/Borland C++ decompilation.md b/Research/Borland C++ decompilation.md new file mode 100644 index 00000000..a35fbf0a --- /dev/null +++ b/Research/Borland C++ decompilation.md @@ -0,0 +1,17 @@ +## Limits of decompilability + +### `MOV BX, SP`-style functions, no stack frame + +These almost certainly weren't compiled from C. By disabling stack frames +using `#pragma option -k-`, it *might* be possible to still get the exact same +code out of Turbo C++ – even though it will most certainly look horrible, and +barely more readable than assembly (or even less so), with tons of inline ASM +and register pseudovariables. However, it's futile to even try if the function +contains one of the following: + +* A reference to the `DI` register. In that case, Turbo C++ always inserts a + `PUSH DI` at the beginning (before the `MOV BX, SP`), and a `POP DI` before + returning. + + **Certainty:** Confirmed through reverse-engineering `TCC.EXE`, no way + around it.