Wie der ARM v7-Prozessor-Cache unter Linux 2.6.35 im Benutzermodus deaktiviert und ungültig gemacht wird

8

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:

  1. Ich habe die Funktion GCC __ clear_cache () verwendet, aber es ergab kein erforderliches Ergebnis. Befehlscodes im Cache änderten sich nicht.

  2. 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?

    
Alex Kolesnyk 18.05.2011, 14:51
quelle

1 Antwort

7

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.

    
Rune 05.06.2011 20:25
quelle

Tags und Links