Vraag Wijs uitvoerbare ram toe in c op linux


Ik wil een eenvoudige just-in-time compiler maken met c op Linux.

Hoe kan ik geheugen zodanig toewijzen dat ik er ruwe x86-code naar kan schrijven en het als elke andere functie uitvoeren?


11
2018-06-26 22:47


oorsprong


antwoorden:


Zie mprotect (). Nadat u een (n-) pagina-groot geheugengebied (toegewezen met mmap ()) met code hebt ingevuld, wijzigt u de machtigingen om schrijven te weigeren en uitvoering toe te staan.


15
2018-06-26 22:51



Naast het gebruik van mprotect om eerst de machtiging Schrijven en vervolgens uitvoeren toe te staan, op sommige OS / hardware-bewerkingen die u mogelijk nodig hebt spoel de I-cache. Op dit moment (medio 2010) hebben alle recente x86-processors aparte level 1 caches voor instructies en gegevens en moet iemand ervoor zorgen dat als je nieuwe instructies in het geheugen schrijft (die de D-cache zullen bijwerken), je t probeer vervolgens verouderde bits uit de I-cache uit te voeren. Hoe de I-cache uit de gebruikersruimte moet worden gespoeld, is afhankelijk van zowel uw hardware als het besturingssysteem. Mijn advies zou zijn om lees de documentatie van Intel over "zelfmodificerende code" voor hun IA-32-multiprocessors. Dit zou genoeg moeten zijn om je te helpen.


6
2018-06-27 00:23