Ich frage mich, was sind "semantische NOPs" in der Montage?Assembly: Was sind semantische NOPs?
Antwort
Code, der kein tatsächlicher NOP ist, aber das Verhalten des Programms nicht beeinflusst.
In C, die folgenden Sequenz als semantischer NOP gedacht werden könnte:
{
// Since none of these have side affects, they are effectively no-ops
int x = 5;
int y = x * x;
int z = y/x;
}
Eine semantische NOP ist eine Sammlung von Anweisungen in Maschinensprache, die an allen oder fast keine Wirkung (die meisten Befehle Änderung keine Auswirkung Condition Codes), deren einziger Zweck die Verschleierung dessen ist, was das Programm tatsächlich macht.
Code, der ausführt, aber nichts Sinnvolles tut. Diese werden auch als "opake Prädikate" bezeichnet und werden am häufigsten von obfuscators verwendet.
Sie sind Anweisungen, die keine Wirkung haben, wie ein NOP, aber nehmen Sie mehr Bytes. Nützlich, um den Code an einer Cache-Zeilengrenze auszurichten. Eine Anweisung wie lea edi, [edi + 0], ist ein Beispiel, es würde 7 NOPs benötigen, um die gleiche Anzahl von Bytes zu füllen, aber nur 1 statt 7.
Ein echter "semantischer nop" ist ein Befehl, der hat keinen anderen Effekt als etwas Zeit zu beanspruchen und den Programmzähler vorzuschieben. Viele Maschinen, bei denen Register-zu-Register-Bewegungen keine Flags beeinflussen, haben beispielsweise zahlreiche Befehle, die ein Register zu sich selbst bewegen. Auf den 8088, zum Beispiel, würde eine der folgenden semantischer NOPs sein:
mov al,al mov bl,bl mov cl,cl ... mov ax,ax mob bx,bx mov cx,cx ... xchg ax,ax xchg bx,bx xchg cx,cx ...
Beachten Sie, dass alle der oben genannte Ausnahme von „xchg Axt, Axt“ sind zwei-Byte-Befehle. Intel hat daher erklärt, dass "xchg ax, ax" verwendet werden soll, wenn ein Ein-Byte-NOP benötigt wird. In der Tat, wenn man "mov ax, ax" zusammenbaut und es zerlegt, zerlegt es als "NOP".
Beachten Sie, dass in einigen Fällen eine Anweisung oder Anweisungsfolge mögliche Nebenwirkungen haben kann, aber dennoch wünschenswerter als die üblichen "NOP". Wenn auf dem 6502 zum Beispiel eine 7-Zyklus-Verzögerung benötigt wird und der Stapelzeiger gültig ist, aber der Wert des obersten Stapels irrelevant ist, wird ein PHP, gefolgt von einem PLP, sieben Zyklen mit nur zwei Byte Code beenden. Wenn der oberste Wert des Stapels kein Ersatzbyte des RAM ist, würde die Sequenz jedoch fehlschlagen.
- 1. GCC NOPs werden kompiliert
- 2. Was ist das semantische Web?
- 3. NOPs auf Multicore ARM A9
- 4. Was ist 'semantische Hervorhebung' Option in MonoDevelop
- 5. Was sind diese Sachen im Verzeichnis C: \ WINDOWS \ ASSEMBLY \?
- 6. In-Sprache semantische Varianz
- 7. Namespace semantische Unterschiede
- 8. Semantische UI Combobox
- 9. RDF Namespaces (Semantische Daten)
- 10. dbpedia graphDB semantische DB
- 11. C++ Einwickeln Typen für semantische
- 12. Semantische Analyse mit Solr
- 13. semantische bewegen und struct
- 14. Emacs, Cedet und semantische
- 15. Semantische Analyse mit NLTK
- 16. bash regex semantische Versionsnummer
- 17. Jede latente semantische Indizierung?
- 18. Was ist die beste semantische Möglichkeit, einen Suchbereich zu umbrechen?
- 19. Xcode 7 Was ist die Ansicht "semantische" Storyboard-Einstellung?
- 20. Was ist die DynamicProxyGenAssembly2-Assembly?
- 21. Bootstrap und HTML5 Semantische Tags
- 22. Semantische Versionierung von REST apis?
- 23. Was sind DailyTrigger und ScheduledTasks?
- 24. Semantische Benutzeroberfläche Fußzeile am Ende
- 25. Wann sollten wir den starken Namen von Assembly nicht erstellen? Was sind die Nachteile von "strong named assembly"?
- 26. Semantische Zweifel über eine Problemstellung?
- 27. Text Mining, Faktenextraktion, semantische Analyse mit .Net
- 28. Semantische Frage zu NSURLRequest und HTTP-Cookies
- 29. Was macht diese x86 Inline-Assembly?
- 30. Was ist der "Schattenraum" in x64 Assembly?