NASM ist Reine Montage, sondern MASM ist high level Assembly?
Ich bin zu lernen, Montage, motivation, können reverse Engineering. Ich bin auf der Suche nach dem assembler ich beginnen soll, also kann ich die dann finden, tutorials und beginnen Sie zu schreiben einige Montage.
Kam ich zu wissen, dass MASM hat eine Menge von eingebauten Konstrukte, also werde ich mit Ihnen meist statt der Codierung, das werde ich tun, wenn ich wählen NASM.
Meine Frage ist.. ist das wahr? Wenn es ist, was assembler Sie empfehlen für das lernen der Montage von einem reverse-engineer ' s perspective und einige gute tutorials für Sie.
Auch, wenn Sie noch andere Vorschläge in Bezug auf die Umkehrung? Den alternativen Ansatz, oder was?
P. S: ich habe gelesen, viele Artikel und Fragen hier, aber ich bin immer noch verwirrt.
- Beim Rückwärtsfahren du hauptsächlich Lesen assembly. Damit Sie nicht profitieren von high-level-Konstrukte.
- Etwas off-topic, aber da du daran interessiert bist, reverse engineering, bitte Begehen, um das Reverse-Engineering-Website Vorschlag hier: area51.stackexchange.com/proposals/26607/reverse-engineering
- negative Wähler? Irgendeinen Grund?
- Falsche tools. Sie wollen einen disassembler, nicht assembler. Die guten Kosten Geld, je mehr Sie verbringen die geringste Zeit, die Sie verschwenden. Reverse engineering Maschinen-code ist eine ziemlich schwere Zeit waster. Eine Handvoll kilobytes es geht um die praktische Obergrenze.
- OllyDbg ist ein freeware-debugger/disassembler. Für das lernen der Montage, mit welchem tool Ihr tutorial empfiehlt.
- Ich bin damit einverstanden, ich brauche einen disassembler.. aber das Verständnis der Ausgang der disassembler nicht von mir verlangen, Assembler zu lernen?
- Vielen Dank dafür...aber die Frage ist, NASM, oder MASM?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Empfehlung rein aus "reverse engineering" - Perspektive ist zu verstehen, wie ein compiler übersetzt die high-level-Konzepte in Assembler-Anweisungen in den ersten Platz. Das Verständnis, wie die register-Allokation erfolgt in verschiedenen Compilern und wie die verschiedenen Optimierungen verdeckt das high-level-Darstellung der verschachtelten Schleifen (et.al.) ist wichtiger als schreiben zu können einen bestimmten Dialekt der Montage Eingang.
Ihre beste Wette ist, beginnen Sie mit der assembly-Sprache, die temporäre Dateien von source-code, den Sie schreiben (siehe diese Frage für mehr Informationen). Dann können Sie die Quelle wechseln und sehen, wie es wirkt sich auf die intermediate-Dateien. Der andere Ort, um zu starten ist, indem Sie einen interactive disassembler wie IDA Pro.
Eigentlich schreiben Assembler-Programme und lernen die syntax von NASM, MASM,
gas
, deras
ist der einfachste Teil und es spielt eigentlich keine Rolle, welches Sie erfahren. Sie sind sehr ähnlich, da die syntax der Quell-Sprache ist sehr einfach. Wenn Sie planen, zu lernen, wie zu zerlegen und zu verstehen, was ein Programm tut, dann würde ich komplett ignorieren, makro-Assembler, da die Makros vollständig zu verschwinden, während der übersetzung, und Sie werden Sie nicht sehen, wenn man im disassembler-Ausgabe.Schmährede auf das Lernen Assembly
Lernen Sie eine assembly-Sprache ist anders als das erlernen einer höheren Ebene der Programmiersprache. Es sind weniger die syntaktische Konstrukte, wenn Sie ignorieren, makro-Assembler. Das problem ist, dass jeder compiler-Kette hat eine etwas andere Darstellung, so müssen Sie konzentrieren sich auf die Konzepte, wie die unterstützten Modi-Adresse, registrieren, Einschränkungen, etc. Diese sind nicht Teil der Sprache per se, wie Sie sind diktiert von der hardware.
Den Ansatz, dass nahm ich (teilweise, weil die Universität dazu gezwungen mich zu), ist zu erforschen und zu verstehen, die hardware selbst (z.B., Anzahl der Register, die Größe der Register, die Art der branch-Instruktionen unterstützt, usw.) und etwas mehr Akademische Konzepte wie interrupts und bitweise manipulation für integer-Spiel, bevor Sie anfangen zu schreiben, Assembler-Programme. Dies ist eine viel längere route, sondern die Ergebnisse in einer Reich Verständnis von Montage-und wie Sie zu schreiben high-performance-Programme.
Das interessante ist, dass in der Zeit, die ich damit verbracht zu lernen Montage-und compiler-Bau (was untrennbar zusammenhängt), ich schrieb tatsächlich nur sehr wenige Assembler-Programme. Mehr oft, bin ich verpflichtet zu schreiben, Ausschnitte von inline Assembler hier und da (z.B. einrichten von index-Registern, wenn die runtime-loader nicht). Ich verbrachte eine enorme Menge an Zeit, die das sezieren von crash-dumps von einer memory location, map loader-Datei, und der assembler output listings. Ich kann ehrlich sagen, dass die syntax der einzelnen assembler-deutlich anders ist als auch, was verschiedene Compiler tun wird, um Durcheinander der Absicht zu schnell oder kleinen code.
Lernen, wie man Assembler-Programme schreiben war, die am wenigsten lohnende Teil des Bildungsprozesses. Es war notwendig, um zu verstehen, wie die Quelle, die übersetzt in die bits und bytes, die der computer ausführt, aber es war wirklich nicht das, was ich wirklich brauchte, um reverse Engineering aus einem raw-binary (disassembler -> Liste der assembly -> beste Schätzung, die auf hohem Niveau Vorsatz) oder ein Speicher-dump. Ich mache eher letzteres, aber die job-Anforderungen sind die gleichen.
move
if (a > 0)
zumov.b r0,d0 ... bnz $L
Starten Sie durch das lernen über computer-Architektur (z.B. etwas gelesen von Andrew Tanenbaum), dann, wie ein OS geladen und läuft ein Programm (Levine Ketten & Lader), dann kompilieren einfacher Programme in C/C++ und Blick in die Assembler-listings.