Ich habe versucht, ARM v7-Prozessor-Cache für Anweisungszeile zu löschen und ungültig zu machen, da Befehlscodes sich bei der Ausführung ändern können.
Um den Effekt zu erreichen, habe ich 2 Varianten ausprobiert. Hier sind sie:
Ich habe die Funktion GCC __ clear_cache () verwendet, aber es ergab kein erforderliches Ergebnis. Befehlscodes im Cache änderten sich nicht.
Ich habe nach einem Quellcode für GCC gesucht und die Datei uclinux-eabi.h gefunden, in der ich den nächsten Code zum Löschen des Caches gefunden habe:
%Vor%Diese Variante hat das Ergebnis auch nicht ergeben.
Vielleicht weiß jemand, was ich falsch mache?
Ich hatte selbst ein ähnliches Problem. __clear_cache () funktioniert nur, wenn der betreffende Speicherbereich mit mmap () mit PROT_EXEC gesetzt wurde. Linux wird den Anweisungscache nicht leeren, wenn Sie ihm einen Speicherbereich zur Verfügung stellen, der aus normalem malloc () Ed-Speicher stammt, selbst wenn der Prozessor gerne Code aus malloc () ed memory ausführt.
Siehe zum Beispiel Ссылка wie man das macht.