Assembler direkt lernen?

06/18/2013 21:04 DigBind#1
Hallo,

Ich wollte programmieren lernen, und danach mich mit dem Thema Reverse Engineering beschäftigen, dann habe ich mir gedacht lerne ich Assembler hab auch ein Buch schon zu Hause, aber über die Sachen, die ich so lese ist, Assembler nicht als Anfänger Sprache da die meisten Leute sagen lerne C/C++ aber eigentlich habe ich da wirklich keine Lust drauf denn die Assembler Syntax gefällt mir ist einfach (persönliche Meinung aus den ersten zwei Kapitel über die Grundlagen des Prozessors Register usw.) meint ihr wenn ich unbedingt diese Sprache lernen will soll ich dann diese als Erstes lernen?
06/18/2013 21:07 Schlüsselbein#2
Wenn du es unbedingt willst, kannst du es. Mach, was dir Spaß macht und zu wissen, was unter der Haube passiert, schadet nie.
06/18/2013 23:52 MrSm!th#3
Wenn man Spaß dran hat, hat man auch keine Probleme. Gilt für alle Sprachen.
Leute, die von "zu schweren" Sprachen sprechen, sind Feggets, die sich dazu überwinden mussten bzw. dazu gezwungen wurden, sie zu lernen.

Allerdings macht es gerade für das Reversing natürlich Sinn, trotzdem nebenbei C++ zu lernen. Nicht, weil du ASM sonst nicht verstehen würdest (kapiere nicht, wie man jemandem raten kann, erst C oder C++ oder sonst was zu lernen, bevor er ASM lernen darf), sondern einfach, weil es dabei sehr hilfreich sein wird. Nichtsdestotrotz kannst du theoretisch auch Hacks u.Ä. vollständig in ASM programmieren; ist halt nur aufwändiger.
06/19/2013 01:03 Dr. Coxxy#4
hängt davon ab, was du am ende anstellen willst.
wenn du es ausschließlich zum reversen also zum verstehen von fremden code erlernen willst, solltest du zuerst c/c++ lernen bzw. grob anschauen wie code in einer hochsprache aussieht und was der compiler aus diesem hochsprachencode an assemblercode erzeugt, damit du den fremdcode auch wirklich "verstehst".
es bringt nichts winzige codeschnipsel von einem programm zu verstehen, wenn du sie nicht in einen größeren kontext einordnen kannst.
Wenn du ausschließlich Assembler kannst, wird das normalerweise in echten größeren anwendungen sehr schwierig, da erstens eine riesige menge an assembler code erzeugt wird, die von einem menschen nicht mehr zu überblicken ist und nur noch wenig mit von menschem geschriebenem asm code zu tun hat und zweitens der compiler einige einzigartige umsetzungen von hochsprachencode erzeugt, idr. auch noch zahlreiche optimierungen einbaut, die für einen menschen nicht auf anhieb ersichtlich sind wenn man nicht eine sehr genaue vorstellung davon hat, was der code den man gerade untersucht eigtl. tun soll.
Verständnis wie eine hochsprache wie z.b. C++ in assembler umgesetzt aussieht ist dabei unbedingt nötig.

Ist aufjedenfall kein fehler asm zu lernen, kommst du bei reverse engineering sowieso nicht dran vorbei, aber du solltest schon eine vorstellung davon haben wie das ursprüngliche programm aussah.
06/19/2013 14:29 Master674b#5
Quote:
Originally Posted by Dr. Coxxy View Post
hängt davon ab, was du am ende anstellen willst.
wenn du es ausschließlich zum reversen also zum verstehen von fremden code erlernen willst, solltest du zuerst c/c++ lernen bzw. grob anschauen wie code in einer hochsprache aussieht und was der compiler aus diesem hochsprachencode an assemblercode erzeugt, damit du den fremdcode auch wirklich "verstehst".
es bringt nichts winzige codeschnipsel von einem programm zu verstehen, wenn du sie nicht in einen größeren kontext einordnen kannst.
Wenn du ausschließlich Assembler kannst, wird das normalerweise in echten größeren anwendungen sehr schwierig, da erstens eine riesige menge an assembler code erzeugt wird, die von einem menschen nicht mehr zu überblicken ist und nur noch wenig mit von menschem geschriebenem asm code zu tun hat und zweitens der compiler einige einzigartige umsetzungen von hochsprachencode erzeugt, idr. auch noch zahlreiche optimierungen einbaut, die für einen menschen nicht auf anhieb ersichtlich sind wenn man nicht eine sehr genaue vorstellung davon hat, was der code den man gerade untersucht eigtl. tun soll.
Verständnis wie eine hochsprache wie z.b. C++ in assembler umgesetzt aussieht ist dabei unbedingt nötig.

Ist aufjedenfall kein fehler asm zu lernen, kommst du bei reverse engineering sowieso nicht dran vorbei, aber du solltest schon eine vorstellung davon haben wie das ursprüngliche programm aussah.
Besonders hart wirds bei voller Optimierung und inlining. Da erkenne ich selbst mit Hexrays meine Funktionen nicht wieder.