Gibt es Revese Engeneers die aus Source Code mit sehr wenigen
Kommentaren aber kompletter Hardware-Dokumentation eine komplette
Dokumentation erstellen können, also zu jeder Zeile Code (mit einer
Anweisung) angeben können wofür die ist?
Ich meine das geht zumindest ab einigen hundert Anweisungen (und
insbesondere über 100 Funktionen) nicht mehr, weil das hinter dem Code
stehende Konzept meist nicht erkennbar ist, aber dafür habe ich keinen
formalen Beweis und vielleicht gibt's ja auch andere Meinungen.
Das geht schon bei einer einzigen Zeile nicht.
Oder kannst Du Gedanken lesen, was der ürsprüngiche Entwickler sich
dabei gedacht hat ?
Entweder der Entwickler kommentiert direkt beim Schreiben des Programms
oder es wird nie passieren.
Das ist auch der Grund, warum Software beim Weiterentwickeln tonnenweise
alte Leichen enthält oder komplett neugeschrieben wird.
Hier mal ein Beispiel:
add a, #90h
da a
addc a, #40h
da a
Wenn Du rauskriegst, wozu das gut ist, bist Du ein Genie.
Peter
Ok,ich habe mir sowas schon bei den Programmen vom IOCCC gedacht, aber
es wäre ja prinzipiell möglich, das es Genies gibt, die ein
IOCCC-Programm ( http://www.ioccc.org/ ) wie
#include <stdio.h>
#include <math.h>
double l;main(_,o,O){return
putchar((_--+22&&_+44&&main(_,-43,_),_&&o)?(main(-43,++o,O),((l=(o+21)/s
qrt(3-O*22-O*O),l*l<4&&(fabs(((time(0)-607728)%2551443)/405859.-4.7+acos
(l/2))<1.57))[" #"])):10);}
ganz einfach finden und sofort den Output hinschreiben können.
Mit Hardware ist es schwieriger, aber wenn man die auswendig kennt, wäre
das ja kaum komplizierter.
hi peter,
sagt dir softice was? damit kann man ganz toll windows programme
debuggen und hacken. was sich der programmierer dabei gedacht hat ist
mir egal..hauptsache ich verstehe den code..also sag nicht das geht
nicht.
Hi BAB,
zwischen Hacken und Verstehen ist ein himmelweiter Unterschied.
Ein Hacker analysiert nur einen kleinen Teil oder modifiziert was und
beobachtet, was sich anders verhält. Er kratzt sozusagen nur an der
Oberfläche und dringt nicht in die Tiefe vor.
Bis Du das Programm wirklich in allen Details verstanden hast, benötigst
Du weitaus mehr Zeit, als wenn Du es komplett neu geschrieben hättest.
Reengineering lohnt sich nur, um geheime Algorithmen anderer zu
extrahieren.
Selbst, wenn man eigenen Code nach Jahren wieder betrachtet, braucht man
einige Zeit, um ihn wieder zu verstehen.
Oftmals kommen einem dann einige Anweisungen überflüssig vor oder
scheinen zu fehlen, dem ist aber nicht so.
Peter
Jep, geht mir auch so...
Wenn ich mal alten Code nach einem Jahr oder so wieder rauskrame, bin
ich auch immer ganz baff, welches Genie da am Arbeiten war... Spaß
beiseite: Man macht sich zum Zeitpunkt der Programmentwicklung so seine
Gedanken, wie die Aufgabe optimal zu lösen ist. Neben
Standard-0815-Geschichten wie z.B. RS232 gibt es dann eben auch
komplizierte Gedankengänge, die einige Zeit in der Ideenschmiede
"gereift" sind (mir kommen die besten Ideen aufm Klo).
Einen Code Zeile für Zeile zu übersetzen, das ist von einem Disassembler
noch zu leisten. Aber dann entsprechende Kommentare... Es besteht schon
ein Unterschied, ob da steht "Ausgabe von R16 auf PORTD" oder "Gib das
Ergebnis der Prüfsummenberechnung auf PORTD aus". Dieser Unterschied ist
für einen Disassembler mit Sicherheit nicht erkennbar.
Tja, ich habe das Prooblem nun ein Projekt mit über 100 Funktionen und
nur sehr wenig Dokumentation zu haben, und muss auch zum Debugen
nachvollziehen was wo passiert.
Also muss der Autor noch verraten wie er es gemacht hat. Das viele
Optimierungen drinn sind, ist zwar zu erkennen, aber welche
Konzepte/Modelle verwendet wurden sieht man man Source Code leider nicht
an.