EAN Prüfziffernberechnung in C++

Beim Programmstart werden zwei Arten erstellt, Heap (den man auch als Freispeicher bezeichnen kann) und den Stack.
"Lokale" Variablen, das sind Variablen, die innerhalb eines Blocks deklariert sind, werden "auf" dem Stack gespeichert. Sie werden dort automatisch angelegt, wenn mit der Ausführung des Blocks begonnen wird und existieren nur bis zum Verlassen des Blocks.
ich muss zugeben ichhabe oben mal die Bezeichnungen vertauscht, und die adresse zu überschreiben kann man ziemlich einfach erreichen, ich kann hier gerne mal sowas zeigen, nur würde ich wahrscheinlich irgendjemanden damit "gefährden".
 
Ist jetzt zwar extremes Offtopic, aber ein Exploit für ein einfaches Programm wie folgendes zu schreiben kann schon relativ kompliziert werden (naja wenn man es einmal verstanden hat...), aber normalerweise hat man eben keinen Quellcode ;)
Code:
void foo() {
    char buffer[3];
    cin >> buffer;
}
int main(int argc, int *argv[]) {
    foo();
}

@topic: c++-Style is etwa so:

Code:
bool validateEan(std::string const& ean)
{
    unsigned checksum = 0;
    int multiply = 1;
    for(std::string::size_type p = ean.size() - 1; p != std::string::npos; --p) {
        checksum += multiply * (ean[p] - '0');
        if(multiply == 3)
            multiply = 1;
        else
            multiply = 3;
    }

    if((checksum % 10) == 0)
        return true;
    return false;
}
 
Zurück