Das NX Bit - AMDs Anti-Viren Feature im Detail

Nero24

Administrator
Teammitglied
Mitglied seit
01.07.2000
Beiträge
24.066
Renomée
10.446
  • BOINC Pentathlon 2019
  • BOINC Pentathlon 2020
  • BOINC Pentathlon 2018
  • BOINC Pentathlon 2021
<center><a href="http://www.planet3dnow.de/artikel/diverses/nx/"><img src="http://www.planet3dnow.de/artikel/diverses/nx/img/header.png" height="458" width="512" alt="Das NX Bit - AMDs Anti-Viren Feature im Detail" border="0"></a></center>
Momenten kreisen die Marketingabteilungen von AMD, Intel und Microsoft wie die Aasgeier um das NX-Bit (Transmeta kommt demnächst sicher auch dazu). Alle sagen das NX-Bit mache den Computer sicherer und würde vor Viren schützen, also höchste Zeit sich das mal etwas genauer anzusehen. Unser Forums-Guru mit Nickname "i_hasser" hat sich daher auf das Thema gestürzt.

Genauer werden wir uns auf das Wie und das Wieso stürzen - also wieso brauchen wir das NX-Bit und wie genau funktioniert es, und dabei wollen wir nicht nur ein bisschen an der Oberfläche kratzen. Wichtig sind in dem Zusammenhang auch Sicherheitslücken allgemein, also machen wir da keinen Bogen drumherum sondern fangen gleich damit an:<ul><li><a href="http://www.planet3dnow.de/artikel/diverses/nx/"><b>Das NX Bit - AMDs Anti-Viren Feature im Detail</b></a></li></ul>Viel Vergnügen beim Lesen...
 
@intel_hasser

Glückwunsch ;D

Welch eine Überraschung ... 8)

Wurde mal Zeit.

MFG Bokill
 
Ziemlich komplizierte Materie, aber recht gut erklärt, auch die Grafiken sind schön. Der Artikel ist sicher nicht nach dem Geschmack jedes P3D-Lesers, aber man muß ihn ja nicht lesen. Das ist genau wie mit den technischen Betrachtungen zu Grafikchips auf 3dcenter.de. Hebt auf jeden Fall das Niveau der Seite.

Übrigens, wie wäre es mit einer englischen Übersetzung (nur so eine Idee)?
 
Hi intel_hasser!

Super Artikel. =)
Weiter so!
 
Intel kann man eigentlich nicht vorwerfen in der Hinsicht bei IA32 geschlampt zu haben

Als (noch) Besitzer eines Atari ST mit Motorola 68000 CPU kann man die IA32-Möglichkeit am Stack zu manipulieren als Steinzeit-Technologie bezeichenen.

Beim 68000 - vorgestellt 1979 - hatte das Betriebssystem einen getrenntenn Stackpointer, den ein Virus nicht sehen konnte und auch nicht zielsicher den Stackinhalt verändern konnte.

Hier liegt ein schwerwiegender Designfehler bei IA32 vor.


Allerdings wäre der 'doppelte' Stackpinter (A7, A7') heute kein prefekter Schutz gegen alle Angriffe.

Das NX-Bit geht hier technisch genügend weit, um IA32 an dieser Stelle zu schützen. Außerdem ist das NX-Feature ein bewährtes Werkzeug aus der 64 Bit Welt, Zeit es in den Desktop zu integrieren.

Zum Artikel selbst - sehr gut !
 
Klasse Artikel, aber teils sehr schwer. *buck*
 
Danke :). Hab mir auch Mühe gegeben das verständlich zu machen ;).

Original geschrieben von rkinet
Als (noch) Besitzer eines Atari ST mit Motorola 68000 CPU kann man die IA32-Möglichkeit am Stack zu manipulieren als Steinzeit-Technologie bezeichenen.

Beim 68000 - vorgestellt 1979 - hatte das Betriebssystem einen getrenntenn Stackpointer, den ein Virus nicht sehen konnte und auch nicht zielsicher den Stackinhalt verändern konnte.

Hier liegt ein schwerwiegender Designfehler bei IA32 vor.


Allerdings wäre der 'doppelte' Stackpinter (A7, A7') heute kein prefekter Schutz gegen alle Angriffe.

Das NX-Bit geht hier technisch genügend weit, um IA32 an dieser Stelle zu schützen. Außerdem ist das NX-Feature ein bewährtes Werkzeug aus der 64 Bit Welt, Zeit es in den Desktop zu integrieren.

Zum Artikel selbst - sehr gut !


Heute hat das Betriebssystem natürlich auch einen getrennten Stack, der Bug bringt auch nicht den Stack vom OS sondern den vom eigenen Programm durcheinander.

Was du meinst ist wohl ein Return Stack. In der CPU ist der inzwischen getrennt vom 'eigentlichen' Stack (also wenn wir ein Unterprogramm aufrufen speichert die CPU die Rückkehradresse nicht auf dem normalen Stack sondern in einem speziellen Bereich), nach außen hin (also für den Programmierer und den Virus) liegt die Rückkehradresse aber noch auf dem normalen Stack und wenn das Programm den eigenen Stack durcheinanderbringt muss die CPU der Kompatiblität wegen den Return Stack entsprechend verändern.
 
Zuletzt bearbeitet:
Original geschrieben von intel_hasser
Heute hat das Betriebssystem natürlich auch einen getrennten Stack, der Bug bringt auch nicht den Stack vom OS sondern den vom eigenen Programm durcheinander.

Was du meinst ist wohl ein Return Stack. ...


nein, der 68000 hat zwei unabhängige Stackpointer.
Wird eine Betriebssystemroutine aufgerufen wird A7' statt A7 (der Stackpointer) verwendet.
Ein normales Anwendungsprogramm hat keinen Zugriff auf A7' kann so nicht identifizieren, wo der Stackbereich des OS bzw. die gerade aktuelle Adresse liegt.

Bei IA32 wird per Software ein anderer Stackbereich definiert, Motorola arbeitete schon vor 25 Jahren in Hardware.
Aber Intel wollte IA32 ja nie groß einführen, war nur eine Notlösung weil eigentlich vorgesehene 'Itanium32' in den frühen 80er Jahren wegen Designmängeln eingestellt wurde.

Ähnlichkeiten mit späteren Ereignissen wären rein zufällig.
 
Original geschrieben von rkinet
nein, der 68000 hat zwei unabhängige Stackpointer.
Wird eine Betriebssystemroutine aufgerufen wird A7' statt A7 (der Stackpointer) verwendet.
Ein normales Anwendungsprogramm hat keinen Zugriff auf A7' kann so nicht identifizieren, wo der Stackbereich des OS bzw. die gerade aktuelle Adresse liegt.

Bei IA32 wird per Software ein anderer Stackbereich definiert, Motorola arbeitete schon vor 25 Jahren in Hardware.
Aber Intel wollte IA32 ja nie groß einführen, war nur eine Notlösung weil eigentlich vorgesehene 'Itanium32' in den frühen 80er Jahren wegen Designmängeln eingestellt wurde.

Ähnlichkeiten mit späteren Ereignissen wären rein zufällig.

Nein, du hast das auch bei IA32 in Hardware realisiert.

Für jeden Task (entspricht jedem Programm) gibt es noch ein TSS, ein Task Segment (wofür das 2. S steht hab ich gerade vergessen).

Da steht für den Task drinnen welchen Wert die Register haben, unter anderem auch SS:SP (also der Stack, SS->Stack Segment, SP -> Stack Pointer also das Offset im Stack Segment (entspricht normalerweise dem Datensegment)).
Jedes Programm hat natürlich seinen eigenen Stack, und das wird per Harware realisiert.
Bei einem Task-Wechsel wird ja der Zustand (Registerwerte, Pagetable, etc.) für den entsprechenden Task wiederhergestellt, und dabei wird automatisch auch ein anderer Stack genutzt (die Werte werden beim Verlassen des Tasks alle im TSS gespeichert).

Das Problem von x86 (was du auch beim 68k haben dürftest) ist, dass lokale Variablen in Programmen über den Stack adressiert werden. Also wenn ein Programm 128 Bytes an lokalen Variablen braucht wird 128 vom SP abgezogen (der Stack wächst rückwärts, im Endeffekt wird der Stack also 128 Bytes größer) und dann wird per SP+[x] adressiert.

Dumm wird die Geschichte wenn man zB. ein lokales Array erzeugt. Also sagen wir

Code:
int a[10];

Das ist ein Array mit 10 Elementen.

Die werden jetzt auch per SP+[x] adressiert. Das Array braucht 40 Byte (ein int ist 4 Byte groß, also brauchen 10 Ints 40 Byte).

Wenn der Progger nun sagen wir in der Art und Weise auf ein Array zugreift

Code:
int x;
int a[10];

// irgendwas für x berechnen

a[x]=3;

wird die Adresse für a[x] der Form SP+0+x*4 berechnet (1 int -> 4 Byte, nach dem Array kommen keine lokalen Variablen mehr, daher +0 - x könnte per SP+40 adressiert werden). Wenn sich x im Bereich von 0 bis 9 bewegt ist alles ok - dumm wirds nur, wenn x größer wird. Bei a[10] könnte das zB. in einem Zugriff auf x selbst resultieren (wenn das nach a auf dem Stack liegt).

Bei a[11] könnte das in einem Zugriff auf die Rückkehradresse resultieren und da haben wir das Problem - die wird dann auf 3 gesetzt.

Nach der Funktion kehrt das Programm dann zur Adresse 3 zurück, was ziemlichen Müll ergeben sollte. Wenn der Hacker das gezielt manipulieren kann...

Das Problem kannst du nicht durch mehrere Stacks lösen, weil davon ja der Programmstack beeinflusst wird. An den Betriebssystemstack kommst du nur durch einen Fehler im Betriebssystem selbst ran.


Einzige Lösungsmöglichkeit davon wäre ein Return Stack. Also Rücksprungadressen etc. werden auf einem separaten Stack gespeichert. Das hat aber weder x86, noch (afaik) der 68k.
 
Zuletzt bearbeitet:
Interessanter Artikel, allerdings mit ein paar kleinen Fehlern:

weiss --> kommt von wissen, schreibt man mit zwei s ;)
(wurde überall nur mit einem s geschrieben)

Seite 5, erster Absatz: ausgelößt, müsste eigentlich ausgelöst heissen.

Danke :)
 
Original geschrieben von warper
Interessanter Artikel, allerdings mit ein paar kleinen Fehlern:

weiss --> kommt von wissen, schreibt man mit zwei s ;)
(wurde überall nur mit einem s geschrieben)

Seite 5, erster Absatz: ausgelößt, müsste eigentlich ausgelöst heissen.

Danke :)

Nach neuer Rechtschreibung 'weiß' (langer Vokal, kurzes aber scharfes s) und 'ausgelößt' weil das ö lang bzw. nicht kurz gesprochen wird.

Also das 2. (ausgelößt) ist richtig ;).
 
Ja Sorry, in der Schweiz gibt es halt dieses Doppel-s nicht, wir schreiben die entsprechenden Worte halt immer mit ss

Aber ausgelöst kommt doch von auslösen. Da kann ich mir beim besten Willen nicht vorstellen, dass man das so schreibt.
Lösen schreibt man ja schliesslich auch nicht mit Doppel-s ;)
 
Original geschrieben von warper
Ja Sorry, in der Schweiz gibt es halt dieses Doppel-s nicht, wir schreiben die entsprechenden Worte halt immer mit ss

Aber ausgelöst kommt doch von auslösen. Da kann ich mir beim besten Willen nicht vorstellen, dass man das so schreibt.
Lösen schreibt man ja schliesslich auch nicht mit Doppel-s ;)

Doch, die ß/ss Regelung ist eindeutig ;).

Bei ausgelöt steht ein s-Laut vor einem t, also wird das s ja scharf gesprochen. Scharfes s bedeutet ss oder ß. Da der Vokal vor dem s-Laut aber lang gesprochen wird (also das ö) kommt ein ß dahin.
 
Ich muss es nun auch nicht können, aber imho ist die ss/ß Regelung eindeutig. Die neue Rechtschreibung ist an vielen Stellen besser als die alte... zurück zum Thema.
 
Finde ich auch, außer z.B.:

Eine alleinstehende Frau... (Alte RS)
Nach der neuen RS:
Eine allein stehende Frau...

:]

Das große babylonische Sprachgewirr deutscher Nation darf kommen.
 
Original geschrieben von intel_hasser
Einzige Lösungsmöglichkeit davon wäre ein Return Stack. Also Rücksprungadressen etc. werden auf einem separaten Stack gespeichert. Das hat aber weder x86, noch (afaik) der 68k.

Der 68k hat sowas tatsächlich nicht.
Nur, es gibt eben zwei unabhängige Stackpointer statt einem bei IA32 (vgl. http://www-md.e-technik.uni-rostock.de/lehre/tinf/80x86.pdf)

Bei IA32 nutzen die Viren aus, daß der Stack von Betriebssystemroutinen an gewissen Positionen oder wohl nach gewissen Codesequenzen zu finden ist.
Per Buffer Overflow wird der abnormal ausgeweitet und die Pseudo-Rücksprungadresse zum Virus wird von der CPU ausgeführt.

Bei 68k ist der OS-Stack getrennt vom User-Stack, wird aber von vielen OS-Routinen an unterschiedlicher Stelle genutzt.
Ein Virus muss erst einmal den Stack finden (es gibt im Hauptspeicher keine Kopie des A7') und wird dann mit wirrem Inhalt konfrontiert. Das einzige was geht, ist ein Totalabsturz beim 68K herbei zu führen, aber die Kontrolle über das OS erhält man so nicht.

Natürlich ist der 68k nicht mehr mehr für ein modernes OS so zu verwenden, aber die zwei Stackpointer sind ein wesentlich bessere Schutz, als es IA32 bieten kann.
 
Original geschrieben von rkinet
Der 68k hat sowas tatsächlich nicht.
Nur, es gibt eben zwei unabhängige Stackpointer statt einem bei IA32 (vgl. http://www-md.e-technik.uni-rostock.de/lehre/tinf/80x86.pdf)

Bei IA32 nutzen die Viren aus, daß der Stack von Betriebssystemroutinen an gewissen Positionen oder wohl nach gewissen Codesequenzen zu finden ist.

Nein, IA32 Programme können definitiv nicht auf den Betriebssystemstack zugreifen!

Ich habs doch im Artikel so schön erklärt :-/

Angenommen so sieht unser Stack aus:

Code:
####################
# RETURN Address 1 #
####################
# Lokale Daten 1   #
#                  #
####################
# RETURN Address 2 #
####################
# Lokale Daten 2   #
#                  #
####################

Dann laufen gerade 2 Funktionen, und die eine hat die andere aufgerufen.

Endet die aktuelle Funktion wird die von unten gesehen nächste Return Adresse benutzt und dorthin gesprungen (RETURN Address 2).

Dumm ist nur, wenn Programmcode statt in den Lokalen Daten 2 die RETURN Addresse überschreibt.
Ein Buffer Overflow ist das desswegen, weil es nur eine Methode gibt wie man das erreichen kann - man greift entweder über das gültige obere Indiz eines Arrays hinaus darauf zu (Overflow) oder man benutzt ein negatives Indiz (Underflow).

Nochmal im Detail:

Code:
#######################
# RETURN Address 2    #
# Array a - Index 9   #
# Array a - Index 8   #
# Array a - Index 7   #
# Array a - Index 6   #
# Array a - Index 5   #
# Array a - Index 4   #
# Array a - Index 3   #
# Array a - Index 2   #
# Array a - Index 1   #
# Array a - Index 0   #
#######################

Angenommen wir greifen auf das Indiz 10 zu (welches Real garnicht existiert) überschreiben wir damit die Return Address mit irgend einem Wert.
Beim Verlassen der Funktion wird dann die veränderte Return Address benutzt und wir landen im Nirvana.

Andersherum gibt es bei dem Index oft einen Überlauf, wenn wir zB. auf den 4 Milliardensten Index zugreifen macht das bei 4 Byte pro Element 16 GB... das passt nicht in 32 Bit, wesswegen wir immer im Bereich von 0 bis 4GB landen.





Per Buffer Overflow wird der abnormal ausgeweitet und die Pseudo-Rücksprungadresse zum Virus wird von der CPU ausgeführt.

Bei 68k ist der OS-Stack getrennt vom User-Stack, wird aber von vielen OS-Routinen an unterschiedlicher Stelle genutzt.
Ein Virus muss erst einmal den Stack finden (es gibt im Hauptspeicher keine Kopie des A7') und wird dann mit wirrem Inhalt konfrontiert. Das einzige was geht, ist ein Totalabsturz beim 68K herbei zu führen, aber die Kontrolle über das OS erhält man so nicht.

Natürlich ist der 68k nicht mehr mehr für ein modernes OS so zu verwenden, aber die zwei Stackpointer sind ein wesentlich bessere Schutz, als es IA32 bieten kann.

Nochmal: Bei x86 ist der OS Stack auch vom Programm Stack getrennt!

Sonst könnte ein Programm doch beliebig das OS beeinflussen, das geht aber auch mit Viren nicht. Wenn ein Virus per Buffer Overflow die Kontrolle über ein Programm übernimmt hat der auch nur die Rechte von diesem Programm, nicht mehr und nicht weniger.

Ich weis nicht wie ich dir das jetzt erklären soll ohne 1. alle anderen zu langweilen und 2. Multitasking beim x86er auseinanderzunehmen ;). Das OS hat seinen eigenen Stack nur für sich. So ist es nunmal.

Am einfachsten ließe sich die Rücksprungadresse so verändern:

Code:
CALL ABC


ABC:
POP AX
PUSH 123

RET

Das RET würde vom Stack die 123 lesen und dahin springen. So müsste es aber der Programmierer gewollt haben, dass die Routine ins Nirvana springt.
 
So sieht ein TSS (hab nachgeguckt - Task State Segment) aus:

Code:
      31              23              15              7             0
     &#9556;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;Ï&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9580;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;Ï&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9574;&#9552;&#9559;
     &#9553;          I/O MAP BASE         &#9553; 0 0 0 0 0 0 0   0 0 0 0 0 0 &#9553;T&#9553;64
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;ð&#9472;Â
     &#9553;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&#9553;              LDT              &#9553;60
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&#9553;              GS               &#9553;5C
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&#9553;              FS               &#9553;58
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&#9553;              DS               &#9553;54
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&#9553;              SS               &#9553;50
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&#9553;              CS               &#9553;4C
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&#9553;              ES               &#9553;48
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;                              EDI                              &#9553;44
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;                              ESI                              &#9553;40
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;                              EBP                              &#9553;3C
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;                              ESP                              &#9553;38
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;                              EBX                              &#9553;34
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;                              EDX                              &#9553;30
     &#9568;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;Ï&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;Ï&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;Ï&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9571;
     &#9553;                              ECX                              &#9553;2C
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;                              EAX                              &#9553;28
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;                            EFLAGS                             &#9553;24
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;                    INSTRUCTION POINTER (EIP)                  &#9553;20
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;                          CR3  (PDPR)                          &#9553;1C
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&#9553;              SS2              &#9553;18
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;                             ESP2                              &#9553;14
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&#9553;              SS1              &#9553;10
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;                             ESP1                              &#9553;0C
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&#9553;              SS0              &#9553;8
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;                             ESP0                              &#9553;4
     Ã&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Î&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;Â
     &#9553;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&#9553;   BACK LINK TO PREVIOUS TSS   &#9553;0
     &#9562;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;Ï&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9580;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;Ï&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9565;

Das wird alles geladen wenn die CPU einen bestimmten Task ausführt und gespeichert wenn die CPU den Task verlässt (Multitasking ist großteils schon in der CPU implementiert).

Unter anderem benutzt eben auch jedes Programm ein anderen Stack, der per SS:SP adressiert wird (bzw. eben ESP).

PDBR ist die Adresse für die Page Table für den Task, entsprechend wird jeder Task auch mit einer eigenen Page Table ausgeführt (sonst würden sich die Programme ja untereinander sehen).

Das Betriebssystem müsste schon explizit wollen, dass ein Programm den OS Stack sieht. Und das will es sicher nicht weil das ein Sicherheitsrisiko hoch 20 wäre - eine gezielte Änderung und das komplette OS schmiert ab (wenn der Kernel einen Fehler verursacht ist Sense).

Ich hab dir jetzt 3mal gesagt, dass Programme nicht auf den OS Stack zugreifen können...
 
Zuletzt bearbeitet:
Original geschrieben von Bokill
@intel_hasser

In den Meldungen von 3dnowgalaxy vom Sonntag 10. Oktober ist`s verlinkt ;)
http://www.3dnowgalaxy.de/nc.htm

MFG Bokill
Guckst Du auf http://www.hardocp.com/ ;)
AMD's NX Bit in Detail
Planet 3DNow! takes a closer look at AMD's No eXecute bit, and what it means for the end user. If you've been wondering what all this talk about NX and EDB is about then grab a translator and head on over to find out.

The marketing departments of AMD, Intel and Microsoft circle to moments like the carrion vultures around the nx bit (Transmeta is added shortly probably also).

Keine Sorge, wir haben schon unsere "Spamlisten" ;) mit anderen Hardwareseiten, die wir immer mit unseren neuen Artikel eindecken (genau wie die uns ;D)
 
eigentlich schulde ich intel_lover jetzt ja ein eis :]

aber kriegt er erst, wenn der artikel auch auf englisch vorliegt *lol*
 
Wieso? *Grundvergessenhab*

Im Zuge der Internationalisierung (unter OpenSource Proggern läuft ja sowieso fast alles auf Englisch ab ;D) werd ich den Artikel auch ins Englische übersetzen.

(Sofern die Redaktion damit einverstanden ist ;) - PN genügt)
 
@intel_hasser, Danke für die ausführliche Information.

Aber zum Nachdenken:
Beim AtariST / GEM wurde der Stack für Rücksprungadressen und Parameter verwendet. Größere Felder wurden aber nicht per Stack übergeben, sondern nur die Adresse eines Speicherbereiches an das OS übergeben, die mit zu bearbeitenden daten gefüllt waren.

Der Aufruf des OS erfolgte erfolgte ähnlich zu IA32 durch einen Interrupt.
Der Interrupt schaltete dann auch das Adresregister um, sodaß das OS alleine zur Verfügun hatte.
Der 'alte' Stack' wurde nur ausgewertet und verändert, hatte aber für die Rücksprungadressen des OS keinerlei Auswirkung.
Ein Anwendungsprogramm konnte nur sich selbst 'abschießen' oder eben wahllos den Speicher mit Daten zumüllen.

Nur, irgendwelche Manipulationen waren nicht möglich, wobei das OS ja noch dazu im ROM fest verankert war.
Aber auch ein Apple Mac mit OS im RAM hatte ein recht gut abgeschirmtes OS.


Die Technologie, Daten auf den Stack zu legen, ist wohl IA32 typisch. Beim 68k standen ja 32 Bit Register (7 frei verfügbar) zur Adressierung beliebiger Speicherbereiche zur Verfügung und der Stack war nur für Rücksprungadressen und Parameter in Verwendung. Aber eine Manipulation des OS-Stacks war nicht möglich, da ein Anwenderprogramm nicht die gerade vom OS benutzte Rücksprungadresse in Erfahrung bringen konnte.

Detailwissen zum 68020/30/40 habe ich nicht mehr, aber hier dürften dann moderne Schutzmechanismen umgesetzt worden sein.

Das NX-Bit arbeitet viel besser wie das Schutzsystem des 68k, aber im Vergleich zum puren IA32 war das 68k Design schon fortschrittlicher ausgelegt.

Es ist nur erstaunlich, daß soviele Jahre ohne CPUs ohne wirkungsvollen Hardwareschutz verkauft wurden.
Erinnert an die 50/60er Jahre, als Autos ohne Sicherheitsgurt und Sicherheitszelle verkauft wurden.
Das ist aber jetzt in weiten Bereichen mit NX-Bit vorbei.

--------------------

NX-Bit / Celeron J in Japan im Laden
http://www.theinquirer.net/?article=18998

Intel stellt in den nächsten Monaten auch zügig weitere Produkte 'AMD-kompatibel' incl. Pentium-M um.

Aber Weihnachten 2004 dürfte schon deutlich im Zeichen vom NX-Bit / SP2 stehen
 
Zuletzt bearbeitet:
Zurück
Oben Unten