asm, c und c++ (incl. GUI) - Programmierung lernen - wie



  • Hallo,

    ich komme von Delphi 3/5/7 und VisualBasic 5 her. Wobei ich Basic im Laufe der Zeit schon fast wieder vergessen hab und mich da heutzutage (vb2010/12) mehr zurecht finden würde.
    In delphi bin ich auch nicht gerade besser, kann mir da aber die eine oder andere GUI-Anwendung zum Bearbeiten von Dateien schreiben.

    So, ich möchte nun aber mal meine Freizeit dazu verwenden, Assembler, c und c++ zu lernen. Zum Schluß evtl. noch c# - ist wieder interessanter, da man angeblich neuerdings wieder echten Maschinencode erstellen kann.
    Beruflich/Studium brauch ich es nicht - von daher muß ich mich nicht reinquälen und möchte das eher von einer lockeren Seite angehen.

    Für c++ hab ich mir schon ein paar Bücher besorgt:
    http://www.amazon.de/Grundkurs--Programmierung-verständlich-erklärt-Computing/dp/3836222949
    http://www.amazon.de/lernen-verstehen-anwenden-ambitionierte-Sprachstandard/dp/3827332095
    , weil es die recht günstig gab.
    Dazu "c für Teens" von mitp.

    Allerdings bleibt noch die Frage der Reihenfolge, wie ich die Sprachen lernen soll:
    wahrscheinlich
    ASM, C, C++, und RE

    denn, was mich aber auch immer schon interessiert hat ist Reversen - nicht zu illegalen Zwecken, sondern - weil ich es für sinnvoll halte, mancher Software (insbesondere IE-Toolbars, etc.) auf die Finger zu schauen.

    Allerdings möchte ich - wie sich glaub ich niemand davon freisprechen kann - auch GUI Anwendungen programmieren. Vorerst noch unter Windows, später auch mal unter Linux (wenn ich noch mehr Zeit hab)
    Wobei das also ShellExecute, Bilder-[jpg, png, gif]Anzeigen und Zwischenablage beträfe.

    Compiler habe ich

    • Borland Builder 1.0 [aus dem Buch c für Teens]
    • Visual C++ 5 Pro (ich mußte das Teil 1999 einfach kaufen und wollte da schon beginnen)
    • und den Borland c++ compiler v.?? glaube 32Bit sowie den 8er cmdline

    Kann ich wohl beide in der Schublade liegen lassen 😃
    (ist der Borland wirklich soo schlecht?)
    Wobei ich auch noch schwanke zwischen VisualStudio Express und Code:blocks - Eklipse mag ich weniger - wegen JAVA.
    später dann entweder QT oder wxwidgets (vermutl. letzteres) - gerne natürlich auch vStudio - Button, Image, ComboBox unter Win ...

    äh, stimmt es eigentlich, daß die ExpressVersion von VS langsamer/träger ist als das VStudio? oder ist auch das nur ein Gerücht?

    ne Frage, die mir dann auch noch aufkommt:
    Ist das eigentlich hinterher fast egal womit ich was compiliere? Kann ich mit beiden bsp. Camstudio 2.0 selber compileren?

    und vorab: Worin besteht denn eigentlich die Schwierigkeit bei c/c++, mit der viele zu kämpfen haben, oder wegen der sie stöhnen? Was ist denn so aufwendig daran?

    Also zusammengefaßt:

    1. Reihenfolge, 2) IDE's,3) >kann ich mit beiden "alles" compilieren?<, 4) Schwierigkeiten bei c/c++

    Wenn Ihr kurz was dazu schreiben könntet, wäre das sehr nett.
    Danke und schöne Ostertage!



    1. Kommt darauf an was dich interessiert und was du machen willst. Viele hier werden dir dazu raten mit C++ anzufangen, damit du dir keine "schlechten Angewohnheiten" (C-Stil) einfängst. Wenn du aber schon schreibst, dass du auch ASM und RE lernen willst, kannst du meiner Meinung nach ruhig mit C anfangen. C++ bringt dir in Richtung RE eigentlich nicht wirklich was, das gibt dir eher Werkzeuge um Programme möglichst sauber und Fehlerfrei aufzuschreiben.

    2. Visual Studio 2013 oder MinGW mit GCC 4.8 oder höher mit einer IDE deiner Wahl. Clang wäre vermutlich der beste Compiler, aber der ist noch "in work" und nicht wirklich vorhanden auf Windows.

    3. Jain. Da gibt es verschiedene Aspekte. Generell kannst du ein komplett konformes ISO-C++ Programm mit allen Compilern kompilieren die diese Standard implementieren. Es gibt aber kaum real-world Programme die nur Standardfunktionen benutzen, weil du da eben nur die Konsole zur Verfügung hast. (Standard-C++ Programme haben nur Streams zur Kommunikation mit der "Außenwelt".) Es gibt durchaus viele Bibliotheken die diese Anforderung erfüllen, aber eben kaum Programme. Dazu kommt dann noch, dass Projekte dir nicht unbedingt build-tools für mehrere Compiler mit bringen, sondern nur für einen. Wenn du viel selbst kompilieren willst wirst du also zwangsläufig irgendwann zumindest VS und GCC brauchen, das macht auf Windows aber eh keinen Spaß. Es gibt eigentlich keinen Grund auf Windows viele Programme selbst kompilieren zu wollen.

    4. Mit C haben eigentlich nicht wirklich viele Leute Probleme. Hin und wieder werden Pointer genannt, aber ehrlich gesagt, im RL habe ich noch niemanden getroffen der die nicht nach 10 Minuten verstanden hat. C++ hat einige Schwierigkeiten. Es versucht mit C kompatibel zu bleiben (was auch in großen Teilen gelingt, es gibt einige Ausnahmen), was dazu führt dass es zur Lösung eines Problems oft 3-5 Wege gibt, wobei dann 1-2 davon große Vorteile zu den anderen haben, die man als Anfänger aber nicht sofort sieht. Das führt einfach zu viel Verwirrung, wenig Stil-Übereinstimmung in verschiedenen Open-Source Projekten, und einer insgesamt ziemlich großen und inkonsistenten Sprache. Aber wenn man sich da ein mal durch gebissen hat lernt man sie trotzdem zu schätzen, weil die "Features" einem zumindest helfen fast alle Flüchtigkeitsfehler und viele Bugs zu vermeiden.

    weil ich es für sinnvoll halte, mancher Software (insbesondere IE-Toolbars, etc.) auf die Finger zu schauen.

    Ich sage mal voraus dass du das niemals machen wirst, weil selbst wenn du RE drauf haben solltest ist es einfach viel zu langweilig. 😃

    Schwierigkeiten bei c/c++

    Schreib am besten C|C++, bei C/C++ sehen die Leute hier Rot, es sind zwei unterschiedliche Sprachen. ⚠ ⚠ ⚠ ➡ 💡



  • Darf man erfahren, mit welchem Hintergedanken du dir dieses Wissen aneignen möchtest? Insbesondere C, C++ und ASM? Für das Entwickeln der meisten Programme, die einem das tägliche Leben erleichtern, gibt es Programmiersprachen, die weitaus weniger Zeit verschlingen und auch ansonsten geeigneter sind. Ausserdem muss ich dich enttäuschen: locker angehen lassen bringt dir bei diesem Triple nichts. (Und es ist auch leider nicht ausreichend, nur die Syntax zu verinnerlichen. Das hat nichts mit können zu tun.) Hast du dir Gedanken gemacht, wie lange es dauern könnte, auch nur in einer der Sprachen "flüssig" zu sein und damit brauchbare Software zu entwickeln?

    PS: Um fremder Software (wie Browser Plugins) gelegentlich ein wenig auf die Finger zu sehen, gibt es zwei einfachere Möglichkeiten: entweder setzt du auf open source, oder du analysiert deinen Netzwerkverkehr.

    PPS: Auf stackoverflow (The Definitive C bzw C++ Book Guide and List) findest du übrigens gute Einstiegspunkte.



  • vor fast 17 Jahren hab ich durch einen guten Freund das erste Mal von c++ gehört, der das für sein Studium lernen wollte. Der hatte geschwärmt.
    Beim Schauen in einige Bücher von damals ... hab ich das gleich wieder aufgegeben: 1) kryptisch: "WTF sind denn Namespaces?" 2) Dieser Corier Font, oder welcher das für die Code Beispiele is ist grausam zu lesen. Übel. Heute weichen die ja wenigstens immer mehr davon ab.
    bei den beiden Büchern schrecken mich die Erinnerungen noch etwas ab.

    Mhh, ja, die einfachen Sprachelemente dürften vielfach ähnlich denen von Pascal sein.
    Schwierig könnte ich mir bisher vorstellen, wenn die und die anderen alle immermehr in Namespaces versteckt sind.

    Reversen: Jaa.. ich find das schon perfide, was selbst Freewareprogramme am System verändern und "mitbrigen/installieren" - und selbst nervige Fenster.
    Seit Jahren hab ich schon die Registry und das System überwacht.
    Aber den Programmen das per Patch abgewöhnen, wäre eben praktisch.
    Dafür brauch ich zumindest notwendige Assemblerkenntnisse - Erfahrungen ohnehin nur durch Übung und Anleitungen aus diversen Foren.
    Bei kleineren nop und Jnz patches hatte ich bereits mehrfach Erfolg.
    Aber die Konsequenz, das alles auch komplett zu lernen, um in jeder Situation rückwärts zu verstehen/nachzuvollziehen zu können, fehlte bisher.

    Inline ASM war für mich bisher in Delphi nur Spielerei. Ein Gimmik. Denn dazu hatte ich zu wenig Ahnung.

    OK, und eigentlich - Delphi - is ja da, um ratzfatz GUIs zusammenzuklicken. Aber bei der Preispolitik und jedes neues Code-Fundstück braucht fast > D7, also XE2/6.

    Da dachte ich, daß vC++ vielleicht mit Zukunft wäre. (wobei MS uns das wohl immer mehr vermiesen wollen wird) - preiswerter - dabei zudem effektiver.

    VisualBasic mag ich eigentlich nicht, wegen der DLLs, die sich seit v5 in der Registry verewigen. Naja, MFC wären mit Sicherheit nicht weniger anspruchslos.

    Delphi-Programme [ohne DB] brachten wenigstens alles mit und bestanden aus Maschinencode und hinterließen keine Rückstände im System.

    Naja, also so ... ungefähr ist der Grund meiner Motivation.

    An der Uni oder VHS ein Kurs geht ja über Monate. und Sprit-Verbrauchsrechner hatte ich schon mal in JAVA kennengelernt 😞 eek.



  • Ich verstehe deine Motivation um ASM zu lernen. Du möchtest nachvollziehen können, was das Programm eigentlich so macht und es ggfs. patchen. Ich sage es nochmal: verwende open source software. (Dann hast du sogar einen guten Grund um C zu lernen.)
    Dein Vorhaben ist schon ziemlich ausgefallen: du installierst malware (bspw in Form von adware), und möchtest dann die schadhaften Teile entfernen. Hm, dann müsstest du das gesamte Programm analysieren, weil wohlmöglich hat es noch ganz andere böse Dinge im Sinn, als nur ein paar Fensterchen aufspringen zu lassen.

    Deiner weiteren Argumentation kann ich nicht ganz folgen, aber ich nehme an, du möchtest einen Delphi Ersatz. C und C++ sind keiner. Ob C# einer ist, muss dir jemand anders beantworten. Woher stammt dein Faible für "Machinencode"? Wenn du den ablegst, dann gefällt dir vielleicht python (damit kannst du auch auf wxwidgets zugreifen). Schon mal angesehen?

    Und ansonsten: du schreibst in deinem ersten post, dass du wohlmöglich auch mal für Linux programmieren möchtest. Wenn dir Windows auf die Nerven geht (Dlls, kleine nette "Zusatzprogramme"…), weshalb probierst du nicht mal ein Linux Derivat aus? Kann auch nur in einer virtuellen Maschine sein. Wenn du dich jetzt mit einem Windows-Framework auseinandersetzt, wird dir das bei einem späteren Umstieg nicht helfen… .



  • cooky451 schrieb:

    Schwierigkeiten bei c/c++

    Schreib am besten C|C++, bei C/C++ sehen die Leute hier Rot, es sind zwei unterschiedliche Sprachen. ⚠ ⚠ ⚠ ➡ 💡

    C/C++ = C/C++ = 1/++

    C bleibt da nicht übrig.



  • FLX schrieb:

    OK, und eigentlich - Delphi - is ja da, um ratzfatz GUIs zusammenzuklicken. Aber bei der Preispolitik und jedes neues Code-Fundstück braucht fast > D7, also XE2/6.

    Da dachte ich, daß vC++ vielleicht mit Zukunft wäre. (wobei MS uns das wohl immer mehr vermiesen wollen wird) - preiswerter - dabei zudem effektiver.

    Mit VC++ entwickelst du hauptsächlich Anwendungen für Windows, was soll daran Zukunft sein?
    Das ist der gleiche Vendor Lockin wie bei Delphi.

    Wenn du dieses Problem nicht haben willst, dann wirst du ein GUI Toolkit wählen müssen, dass auch mehrere Plattformen Zuhause ist.
    Meine Empfehlung wäre hier Qt.

    Insofern wird es dir nicht viel bringen MFC oder die WinAPI in und auswendig zu können.

    Da du aber sowieso nur GUI Anwendungen entwickeln willst, warum nimmst du dann dafür nicht einfach Java?



  • Auskenner schrieb:

    Da du aber sowieso nur GUI Anwendungen entwickeln willst, warum nimmst du dann dafür nicht einfach Java?

    Weil Java für GUI Anwendungen scheiße ist.

    Wenn du C++ machen willst, wär meine Empfehlung auch Qt. Wenn du von Delphi kommst, wirst du dich am ehesten mit C# wohl fühlen.



  • Kürzer schrieb:

    C/C++ = C/C++ = 1/++
    C bleibt da nicht übrig.

    der wahre Sachverhalt erschließt sich erst durch Reihenentwicklung:

    C/C++ = C/(1+C) = 1 - 1/C + 1/C^2 - 1/C^3 + - ...


Anmelden zum Antworten