Hi,
also, ich halte mal fest, dass man Deines Erachtens auch (und gerade ;-) komplexe Programme mit einfachen Mitteln analysieren kann.
Ja.
Die Analyse eines Programmes funktioniert wie die Synthese: Stück für Stück. Um so einen Block auseinanderzunehmen brauche ich keine hochkomplexen Analysatoren außer dem eigenem Gehirn. Ja, ich finde sogar, das die Dinger mehr im Weg rumstehen als Nutzen bringen, aber das ist meine ganz persönliche Meinung; privater Geschmack sozusagen.
Re-engineering ohne Code ist zum größtem Teil stupide Assemblerdumpanalyse, die sich hin und wieder durch T&E beschleunigen läßt. Bei der Analyse sucht man nach bekannten Mustern, dazu reichen ein paar Zeilen Perl, dafür braucht man schonmal kein komplexes Programm. Angenehm natürlich, wenn es ein Programm gibt, das diese Muster schon alle kennt und automatisch anwenden kann, sodaß am Ende schon halbwegs lesbarer C-Code rauskommt (Für PE-Dateien (Windows) gibt es das z.B. käuflich zu erwerben). Ein Tracer ist auch noch nützlich. Vielleicht auch noch ein Object-Dump u.ä. Aber alles keine Programme, die man guten Gewissens als komplex bezeichnen kann. Die kann man sich alle auf die Schnelle selber schreiben und fallen daher großzügigerweise auch noch unter "ein paar Zeilen Perl".
Das einzig Beschränkende ist Zeit, also die schiere Masse an zu analysierender Logik. Allerdings kann man Details gegen die Masse handeln: Man kann recht schnell im grobem feststellen, was das Programm macht und benötigt dann proportional zur Detailiertheit mehr Zeit. Man kann auch sehr schnell ein einziges Detail herausfinden (zwecks Debugging zum Beispiel) ohne herausbekommen zu müssen, was das Programm überhaupt macht.
Für den Großteil dieser Punkte ist ein komplexes Analyseprogramm unnötig bis kontraproduktiv. Wenn Du z.B. ganz grob wissen möchtest, was das Programm macht, schaust Du z.B. einfach in's README falls Du es nicht ausführen kannst. Erst wenn es keine Dokumentation gibt mußt Du an die Innereien (Wenn es keine Dokumentation gibt ist es aber wahrscheinlich eh Open Source ;-). Jetzt kannst Du natürlich Dein dickes Analyseprogramm anschmeißen. Ich würde aber vorher noch mal einen simplen Hexdump probieren, meist hilft der schneller. Willst Du hingegen ein bestimmtes Detail herausfinden könnte besagtes Analyseprogramm tatsächlich helfen. Jedoch schmeißt Dich das mit Informationen völlig zu, die Du erst mühsam filtern mußt. Du könntest natürlich auch soviel Erfahrung damit gesammelt haben, das Du es als Armverlängerung benutzen kannst. Nur: ob Du damit Erfahrung sammelst oder mit anderem ...
(Blake Ross also als Vierzehnjaehriger durchaus ohne weitere besondere Hilfsmittel den Netscape-Browser debuggen konnte und so.)
Ja, denn er hat lediglich Fehler festgestellt und nach seinen Möglichkeiten versucht zu reparieren. Da es viele Fehler gab (und auch immer noch gibt) war es ihm möglich einige zu finden, die sich leicht reparieren lassen. Das ist für einen geübten 14 jährigen mit etwas Talent ohne weiteres möglich. Im Gegensatz zu den -- meist amerikanischen Medien -- sehe ich da aber auch nichts wirklich Umwerfendes dahinter. Das einzige, was meine Bewunderung bekommt ist sein Durchhaltevermögen. Immerhin kam ja seine Pubertät dazwischen, die hat schon so einige vielversprechende Talente gefressen.
so short
Christoph Zurnieden