| ▲ | cyberax a day ago | ||||||||||||||||||||||||||||||||||
This approach was used in the ATL/WTL (Active Template Library, Windows Template Library) in the early 2000-s. It was a bad idea, because you need to generate executable code, interfering with NX-bit memory protection. Windows actually had a workaround in its NX-bit implementation that recognized the byte patterns of these trampolines from the fault handler: https://web.archive.org/web/20090123222148/http://support.mi... | |||||||||||||||||||||||||||||||||||
| ▲ | barrkel 14 hours ago | parent | next [-] | ||||||||||||||||||||||||||||||||||
It was also used by Delphi in 90s. | |||||||||||||||||||||||||||||||||||
| ▲ | kmeisthax 18 hours ago | parent | prev [-] | ||||||||||||||||||||||||||||||||||
I'm genuinely surprised Microsoft's attitude towards "wndprocs don't have a context pointer" was "let's JIT compile a trampoline to hold the context pointer" and not to add support for a five-parameter wndproc into USER.dll, or have a wrapper that grabs GWLP_USERDATA and copies it to the register this lives in. | |||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||