Re: [fpc-devel] Quick question on VMT / writeable or protected memory

2021-04-14 Thread Michael Van Canneyt via fpc-devel



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

2021-04-14 Thread Jonas Maebe via fpc-devel
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

2021-04-14 Thread Alfred via fpc-devel

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

2021-04-13 Thread Jonas Maebe via fpc-devel
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