Ja, das ist möglich, aber seeeehr aufwändig, und nichts für Laien.

Das macht man in seltenen Fällen beim Untersuchen von Software, würde dich aber vermutlich hoffnungslos überfordern.

Eine fertige Software dafür gibt es nicht und ohne Kenntnisse der Systemprogrammierung und des Reversings wird das leider nichts werden, zumal du dir mit Chrome kein einfaches Ziel dafür ausgesucht hast. :)

...zur Antwort

Na klar, der sog. "Hopfenblütentee", auch als "Bier" bekannt. :)

...zur Antwort

Das Ganze portabel und sauber hinzubekommen ist ein absoluter Krampf.

Verwende am besten Systembibliotheken oder anstelle von einer Zeile mit fflush(stdin) das hier:

stdin = freopen(NULL, "r", stdin);

Vergiss dabei die Fehlerbehandlung nicht und behalte den Performanceoverhead im Auge.

...zur Antwort
C++: Kann ich diesen Code irgendwie noch vereinfachen?

Guten Abend,

ich schreibe gerade in C++ an einem kleinen Kniffelspiel. Im Moment bin ich soweit, dass ich mir fünf zufällige Zahlen (Würfel) über die rand()-Funktion erstelle, diese dann in einem Vektor speichere und anschließend über die Funktion auswertung() den höchsten Pasch zurückgebe. Jedoch ist der Code nicht gerade sehr kompakt. Hat jemand Vorschläge für Optimierungen?

Vielen Dank im Voraus!

#include <iostream>
#include <ctime>
#include <vector>
#include <random>

using namespace std;

vector<int> würfe()
{
  vector<int> list; // Ermittelt über die aktuelle Systemzeit 5 Zufallszahlen und übergibt sie dem Vektor list
  srand(time(0));

  for (int i = 0; i < 5; i++) {
    list.push_back(1 + rand() % 6);
    cout << list[i];
  }

  cout << endl;
  return list;
}

int auswertung(vector<int> ergebnis)
{
  int pasch = 0;

  // Verschachtelte for-Schleife iteriert durch Vektor und vergleicht alle Elemente miteinander
  for (vector<int>::iterator it = ergebnis.begin(); it != ergebnis.end(); ++it) {
    for (vector<int>::iterator it1 = ergebnis.begin(); it1 != ergebnis.end(); ++it1) {
      // Nur wenn die Werte gleich sind (Pasch) und nicht auf dasselbe Element zeigen, geht es weiter
      if (*it1 == *it && it != it1) {
        // Nur wenn der gefundene Pasch höher als der Höchste bereits gefundene ist, wird er ausgewertet
        if (*it > pasch) {
          switch (*it) {
            case 1: pasch = 1;
              break;
            case 2:
              pasch = 2;
              break;
            case 3: pasch = 3;
              break;
            case 4: pasch = 4;
              break;
            case 5: pasch = 5;
              break;
            case 6: pasch = 6;
              break;
          }
        }
      }
    }
  }

  return pasch;
}

int main()
{
  int pasch;
  vector<int> random = würfe();
  pasch = auswertung(random);

  cout << "Pasch: " << pasch << endl;
}
...zum Beitrag

Ich habe ehrlich gesagt nie Kniffel gespielt und weiß auch nicht 100%ig was ein Pasch ist, aber vielleicht dient dir dieser Code hier als Denkanstoß:

#include <algorithm> // generate, sort
#include <iostream> // cout, endl
#include <map>
#include <random>
#include <vector>

#include <cstdlib> // size_t

using namespace ::std;

[[nodiscard]] inline auto roll(const size_t count=5ul) {
  vector<int> result(count);

  random_device rng;
  uniform_int_distribution dist { 1, 6 };

  generate(result.begin(), result.end(), [&] () { return dist(rng); });

  return result;
}

int main() {
  auto rolls { roll() };
  map<int, size_t> counter;

  cout << "[ROLLS]" << endl;
  for (const auto n : rolls) {
    ++counter[n];
    cout << n << endl;
  }
  cout << endl;

  cout << "[STATS]" << endl;
  for (const auto p : counter) {
    cout << p.first << ": " << p.second << " times" << endl;
  }
  cout << endl;

  sort(rolls.begin(), rolls.end(), [&] (const auto a, const auto b) {
    return counter[a] * a > counter[b] * b;
  });

  cout << "[SORTED]" << endl;
  for (const auto n : rolls) {
    cout << n << endl;
  }
}

Um das zu kompilieren, brauchst du einen modernen Compiler, der C++17 unterstützt.

Die Ausgabe sieht ungefähr so aus:

[ROLLS]
4
5
4
1
1

[STATS]
1: 2 times
4: 2 times
5: 1 times

[SORTED]
4
4
5
1
1

Es wird also 5 mal gewürfelt (Zahlen 1 bis 6), danach gezählt wie oft welche Zahl gewürfelt wurde, und am Ende die ganzen Würfe so sortiert, dass die Kombination mit der höchsten Punktzahl am Anfang und die mit der niedrigsten am Ende steht.

Aber wie gesagt, ich kenne Kniffel nicht aus eigener Erfahrung, weshalb der obige Code jetzt keine fertige Lösung, sondern nur eine Idee ist.

Vielleicht hilft dir das ja etwas weiter.

Viel Spaß noch beim Programmieren. :)

PS: Selbst für so ein einfaches Würfelspiel wie Kniffel ist die rand()-Funktion aus der alten C-Bibliothek ungeeignet, weil dabei sehr oft die gleichen Zahlen auftreten werden. Der Algorithmus dahinter ist bekannt dafür sehr schlecht zu sein und eine äußerst miese Zufallsverteilung zu haben.

Es ist besser, wenn du einen der Zufallszahlengeneratoren aus der modernen C++ Standardbibliothek nimmst. Ich habe oben "random_device" genommen. Das muss nicht geseedet werden und erzeugt die besten Zufallszahlen.

...zur Antwort

Ohne mir deine Beschreibung überhaupt durchgelesen zu haben, kann ich dir anhand deiner bisherigen Fragen garantieren, dass dein Hashalgo totaler Murks ist.

Lerne doch bitte endlich mal die Grundlagen, um Wissenslücken zu schließen und auch mal etwas Richtiges programmieren zu können.

...zur Antwort

Drei Monate reichen höchstens aus, um absolute Grundlagen zu lernen, auch wenn du 15 Stunden pro Tag ackerst.

Du wirst damit nicht über unteres Mittelmaß hinauskommen, geschweige denn berufseinstiegsfähig sein.

Ich würde das ganze eher als Schnupperkurs bezeichnen.

...zur Antwort

Deine Kommentare sind alle redundant und damit m. M. n. durchweg als falsch anzusehen.

Lass die einfach weg, denn die haben null Mehrwert. Im Gegenteil, zukünftig schaden sie sicher.

...zur Antwort

Google mal nach Stack Machine oder Register Machine.

Das wäre genau der Ansatz, den man bei deinem Problem nehmen würde.

...zur Antwort

In gewissem Maße ja, auf jeden Fall mehr als Skriptkiddie-Zeug.

Ich bin von Assembler bei C und vielen gängigen noch weitaus höheren Sprachen gelandet, hab Mikrokontroller programmiert und irgendwann auch reversed, hab Netzwerksoftware und Server geschrieben, und auf dem Weg dahin viel über Sicherheit gelernt.

Aber Hacking ist ein breites Feld und wenn du mit gängigen Werkzeugen wie Shells, grep, sed, awk, file, objdump oder einem Debugger wie gdb bzw. Windbg oder gar radare umgehen kannst, und mit Sniffern für Netzwerk, USB oder sogar MIDI vertraut bist, dann kommst du sehr weit.

Dauert aber viele Jahre. :)

...zur Antwort

Das ist erschreckend einfach, da einfach viel zu viel Infrastruktur mit veralteter und aufgeblasener Software am Netz hängt.

Bei eBay bekommst du gebrauchte Industrieanlagen, wie zum Beispiel eine kleine S7, für wenige hundert Euro zum Üben.

Und das Internet ist voll von Uraltsystemen mit Apache 1.x oder PHP 4.x ...

Ich mache beruflich Codeaudits und auch viel Reversing, und glaub mir, es ist ein Wunder, dass nicht mehr passiert.

Im großen und ganzen ist sämtliche IT weltweit pure Kacke, die von unfähigen Affen zusammengeschustert wird. Ausnahmen sind rar.

Wie gesagt: Ein Wunder, dass nicht mehr passiert.

...zur Antwort

Du solltest mal hören, was die Leute so sagen, wenn man erzählt, dass man vim nutzt.

Dagegen sind die Reaktionen auf Eclipse absolut harmlos. :)

Soll jeder nutzen, was ihm am besten gefällt.

...zur Antwort

Tja, die wollen einfach nicht akzeptieren, das Menschen Individuen und alle unterschiedlich sind.

Ich sitze auch oft breitbeinig, weil mir sonst die Weichteile schmerzen. Du glaubst gar nicht, wie die Manspreadinganhänger diskutieren können, anstatt das einfach mal zu akzeptieren.

Ich würde mir nie erdreisten, anderen Menschen eine schmerzhafte Körperhaltung aufzwingen zu wollen, nur weil sie mir persönlich keine Probleme bereitet.

...zur Antwort

Ich lebe in Japan und hin und wieder gucke ich auch mal Anime unterschiedlichster Couleur, im TV, von GEO oder als Stream.

Aber das, was du hier so anprangerst, kommt so gut wie nie vor, und wenn doch, dann wohldosiert und gut im Kontext platziert.

Deshalb vermute ich ganz einfach mal, dass das Problem bei DIR liegt. Wenn du selbst angeblich sexistische Animes schaust, dann bist DU vermutlich ganz einfach so veranlagt, bzw. hast so einen Fetisch.

Also wenn dir alle Anime sexistisch erscheinen, dann liegt das wohl eher an deiner Filterblase und deinem persönlichen Geschmack, als am Mainstream.

...zur Antwort
Sinnvoll

Da ich selbst als gesunder und sportlicher Mann ebenfalls mit 31 fast an den Folgen einer Grippe gestorben bin, würde ich unbedingt zu einer Impfung raten.

Die meisten Menschen hatten selbst noch nie eine richtige Grippe und verwechseln das mit einer starken Erkältung. Wie sehr einen so eine Influenza aber umhauen kann, merkt man erst, wenn man eine hat.

Das ging bei mir bis zur Unansprechbarkeit aufgrund von Schwäche. Lässt sich für Außenstehende leider kaum in Worte fassen.

Fakt ist, dass dich völlig unabhängig von deiner jetzigen körperlichen Verfassung, eine Influenza umbringen kann, oder du mit den Folgen den Rest deines Lebens zu kämpfen hast.

Lass dich bitte nicht von den Leuten beeinflussen, die offensichtlich nicht wissen, wovon sie reden, und alles in einen Topf mit gewöhnlichen Erkältungen werfen. Eine echte Grippe spielt in einer GANZ anderen Liga!

...zur Antwort

Denke bitte nicht, dass du alles über SQL Injections weißt, nur weil du es mal kurz im Studium hattest.

Und leider überschätzen sich zu viele Admins selbst, und erkennen so etwas nicht mal, wenn sie es unter die Nase gerieben bekommen.

Hier auf GF, genau auf dieser Seite, die du gerade liest, gibt es eine seit 3 Jahren offene SQL Injection Lücke, die von den GF Entwicklern einfach nicht geschlossen wird, weil sie die davon ausgehenden Angriffsmöglichkeiten - trotz ellenlanger Erklärungsversuche - einfach nicht zu verstehen scheinen.

Details nenne ich jetzt natürlich nicht öffentlich, und genau genommen ist die Sache für mich gegessen, aber das soll nur ein Beispiel dafür sein, dass es eben NICHT jedes Kind zu verstehen scheint.

Und um deine Frage zu beantworten: Mit etwas Erfahrung muss man gar nicht aktiv danach suchen. Solche Lücken laufen einem einfach so beim Besuch einer Website über den Weg.

Also lerne einfach schön weiter, auch wenn es dir zu primitiv erscheinen mag. Irgendwann kommt die Erleuchtung von ganz allein. ;)

...zur Antwort

Ich bevorzuge beides.

C89 für schwache Hardware wie Mikrokontroller, und C++ für TMP-Orgien.

Moderner C++-Code ist zu großen Teilen übrigens zur Kompilierzeit lauffähig und ermögllicht alleine dadurch ein Level an Optimierung, das mit C nicht erreichbar ist.

An constexpr-Magie kommt C nicht ran, schon gar nicht mit der entsprechenden Typsicherheit.

Und Konzepte wie RAII sind in C völlig unmöglich, ermöglichen aber eine Fehlervermeidung, die ihres gleichen sucht.

Ich nutze besonders C89 und C++17, je nach Projekt, aber auf nur eines davon würde ich mich nicht versteifen wollen.

...zur Antwort