NOP
-
NOP bedeut ja bekanntlich No Operation
Wazu braucht man diesen Befehl im wirklich. Er erleichtert den leute die exploits schreiben sehr viel. Aber welchen Sinn hat er sonstIch bitte um eure Meinung
-
Hi.
nop (= xchg ax, ax) kann man nebst aehnlich sinnlosen Codes hernehmen, um Code auszurichten (zB. wenn man etwas 4Byte-aligned braucht - wozu auch immer), Luecken zu fuellen (setzt TASM zB. AFAIK bei 1pass hinter short-Jumps, die nicht explizit als solche gekennzeichnet wurden), usw...
Weitere Beispiele fallen mir jetzt nicht ein, wirklich sinnvoll laesst sich dieser OpCode IMHO nunmal auch nicht sehr oft einsetzen.Dieser Befehl erleichtert den boesen Exploidschreiberlingen also im Grunde gar nichts - es gaebe theoretisch genug alternativen.
-
NUr die andern befehl würden mehr alls 1 byte brauchen so ist es für die exploit schreiberling leichter den ret oder jmp in die richtige speicher stelle zu machen
oder irre ich mich ?!
mfg
-
Dass es nur ein Byte gross ist nichts tut und eigentlich auf allen x86-CPU funktionieren sollte, ist in der Tat ein Vorteil, wenn man ein moeglichst flexibles Exploid haben will.
Praktisch wuerde ein wait aber auch nichts tun.
Und falls ah zB. nicht so wichtig ist, koennte man auch cbw oder lahf nehmen.
Wenn die Flags nicht so wichtig sind, geht auch cld, o.Ae., usw.
-
Mancheiner verwendet es auch, um zur Laufzeit Code rauszupatchen. So z.B. Microsoft bei den Funktionen InterlockedIncrement & co. Läuft Windows auf einem SMP-System, wird in diesen Funktionen ein lock prefix verwendet. Läuft es hingegen auf UP, wird das lock durch ein nop ersetzt (weil's viel schneller ist als lock).
-
Außerdem:
Warten auf externe Hardware
Ausrichten von code für asymmetrische Prozessor-Pipes (yep, mit NOP kanns schneller gehen)Und wenn du's wegnimmst, würdes du exploits nicht wesentlich erschweren.
-
Zum ausrichten von Befehlen an bestimmte Grenzen gibts die NOPs sogar in vielen Bunten Varianten (ich glaube im AMD Optimization Manual war das). NOP kann man naemlich auch problemlos z.B. als
lea eax, [eax + 0]
bilden etc.
Auch nicht zu vergessen: als xchg (e)ax, (e)ax liegt er nicht umsonst da, so wird das Prozessordesign naemlich gleich vereinfacht, da NOP dann kein Spezialfall ist sondern wirklich (e)ax mit sich sleber vertauschen kann.
-
Gerade xchg ist aber eine sehr schlechte Wahl, denn hier ist es sehr wohl ein Spezialfall. Normalerweise macht xchg nämlich ein bus lock (also das, was der lock präfix bei anderen Befehlen macht). Bei nop aber nicht.
-
Ringding schrieb:
Gerade xchg ist aber eine sehr schlechte Wahl, denn hier ist es sehr wohl ein Spezialfall. Normalerweise macht xchg nämlich ein bus lock (also das, was der lock präfix bei anderen Befehlen macht). Bei nop aber nicht.
den lock gibts aber nur bei speicheroperanden - für register wäre er ja auch völlig sinnlos.
-
Ah, du hast natürlich recht :D.
My bad...
-
Edit and Continue
Bye, TGGC (Dem beste BdT)