Re: [fpc-devel] Quick question on VMT / writeable or protected memory
On Wed, 14 Apr 2021, Jonas Maebe via fpc-devel wrote: On 14/04/2021 17:49, Alfred via fpc-devel wrote: The mORMot[1] sources could give you some info. During runtime, it patches the exe-memory to redirect function calls. Hard part was to get around the W^X memory protection on some BSD's. Look at: procedure PatchCode(Old,New: pointer; Size: integer; Backup: pointer; inside SynCommons.pas function TInterfaceFactory.GetMethodsVirtualTable: pointer; inside mORMot.pas Please don't use that kind of hacks. It also breaks in case WPO is used and some calls get devirtualised at compile time. This is mORMot. It consists solely of hacks :) Michael. ___ fpc-devel maillist - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
Re: [fpc-devel] Quick question on VMT / writeable or protected memory
On 14/04/2021 17:49, Alfred via fpc-devel wrote: > The mORMot[1] sources could give you some info. > During runtime, it patches the exe-memory to redirect function calls. > Hard part was to get around the W^X memory protection on some BSD's. > > Look at: > > procedure PatchCode(Old,New: pointer; Size: integer; Backup: pointer; > inside SynCommons.pas > > function TInterfaceFactory.GetMethodsVirtualTable: pointer; > inside mORMot.pas Please don't use that kind of hacks. It also breaks in case WPO is used and some calls get devirtualised at compile time. Jonas ___ fpc-devel maillist - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
Re: [fpc-devel] Quick question on VMT / writeable or protected memory
The mORMot[1] sources could give you some info. During runtime, it patches the exe-memory to redirect function calls. Hard part was to get around the W^X memory protection on some BSD's. Look at: procedure PatchCode(Old,New: pointer; Size: integer; Backup: pointer; inside SynCommons.pas function TInterfaceFactory.GetMethodsVirtualTable: pointer; inside mORMot.pas ___ fpc-devel maillist - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
Re: [fpc-devel] Quick question on VMT / writeable or protected memory
On 14/04/2021 01:22, Martin Frb via fpc-devel wrote: > Opening a can of worms here. But leaving all pitfalls aside. > > If one wanted to write to the VMT of a class, would that be possible? > Would the VMT be stored in write-able memory, once the exe is loaded? It depends on the platforms. Most platforms support read-only relocatable memory, so they can make it permanently read-only after the (dynamic) linker has relocated everything. I don't know which ones do/don't. Jonas ___ fpc-devel maillist - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
