Jammer-Thread
Re: Jammer-Thread
Ich habe gerade satte 32 Gb Treiberleichen von Nvidia entsorgt. An den einen Teil kommt ja ein Normalmensch sogar noch ran. In C:\Nvidia \DisplayDriver steckten die letzten beiden Installer. 2Gb. Und unter C:\Program Files\NVIDIA Corporation\Installer2 steckten um die 75 alte Treiberpakete der letzten 5 Jahre. 15 Gb.
Für den Teil den sich Windows gesichert hat musste ich mir auch noch ein Spezialprogramm holen. DriverStoreExplorer. Denn unter C:\Windows\System32\DriverStore\FileRepository waren die gleichen 15 Gb Treiberleichen noch mal verewigt. Als Windows Backup.
Und ich wunder mich wieso meine SSD plötzlich keinen Platz mehr hat. Die haben echt was am Helm bei Nvidia -.-
Für den Teil den sich Windows gesichert hat musste ich mir auch noch ein Spezialprogramm holen. DriverStoreExplorer. Denn unter C:\Windows\System32\DriverStore\FileRepository waren die gleichen 15 Gb Treiberleichen noch mal verewigt. Als Windows Backup.
Und ich wunder mich wieso meine SSD plötzlich keinen Platz mehr hat. Die haben echt was am Helm bei Nvidia -.-
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
AVG hat innerhalb von 24 Stunden eine automatisierte Antwort geschickt:Krishty hat geschrieben:AVG, G-Data & Co brauchen Wochen, um das False Positive zu beseitigen.
Bei dem AVG-Kunden funktioniert es jetzt. Von G-Data noch keine Antwort.Hello,
Thank you for contacting AVG.
The detection by AVG was incorrect and was removed in a recent AVG update, please wait at least 24 hours.
If the detection persists:
1. Attach the screenshot of virus database:
[…]
Thank you
Best regards,
AVG Customer Care
Re: Jammer-Thread
Alter. Avast -.-
Ich scanne regelmässig auf Schädlinge, bzw. wenn ich was runterlade und es brauche. Und deswegen ist Avast ansonsten normalerweise komplett aus. Ich brauche keine nutzlose Systembremse.
Beim letzten Update hat sich das Ding aber nun so tief ins System eingegraben dass es wie ein Untoter immer wieder mitgestartet ist. Trotz deaktiviertem Selbstschutz und immer wieder deaktivierter Autostarteinträge und Services. Bis ich mal durch Zufall den Aufgabenplaner gecheckt habe. Da war es nun auch verewigt. Und ich vermute mal von da hat sich das immer wieder selber aktiviert. Fingers crossed dass es das war ...
Ich scanne regelmässig auf Schädlinge, bzw. wenn ich was runterlade und es brauche. Und deswegen ist Avast ansonsten normalerweise komplett aus. Ich brauche keine nutzlose Systembremse.
Beim letzten Update hat sich das Ding aber nun so tief ins System eingegraben dass es wie ein Untoter immer wieder mitgestartet ist. Trotz deaktiviertem Selbstschutz und immer wieder deaktivierter Autostarteinträge und Services. Bis ich mal durch Zufall den Aufgabenplaner gecheckt habe. Da war es nun auch verewigt. Und ich vermute mal von da hat sich das immer wieder selber aktiviert. Fingers crossed dass es das war ...
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Visual Studio unterstützt kein alignas(65536).
Ich dachte, ich könnte dem Compiler irgendwie vermitteln, dass Win32-Module immer an 64-K-Adressen ausgerichtet sind. Tja, schade. Künstliche Grenzen sind doch immer was Feines!https://docs.microsoft.com/en-us/cpp/cpp/align-cpp hat geschrieben:Valid entries are integer powers of two from 1 to 8192 (bytes)
- xq
- Establishment
- Beiträge: 1589
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: Jammer-Thread
Wofür wäre ein 16bit alignment sinnvoll?
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in Zig und nervt Leute damit.
Programmiert viel in Zig und nervt Leute damit.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Das ist die Allocation Granularity unter Win32. Jeder frische Speicherblock hat dieses Alignment.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
lolfuwarning LNK4281: undesirable base address 0x10000 for x64 image; set base address above 4GB for best ASLR optimization
Als nächstes meckern sie, weil ich ohne ihre kack Security Cookies oder ihren scheiß Secure Developmend Lifecycle programmiere
Meine Programme sind mit 15.5 im Schnitt 0,3–0,8 % größer geworden mit dem neuen Compiler.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Behoben mit 15.5. Hat nur vier Monate gedauert!Krishty hat geschrieben:Bug Report für Drag & Drop: https://developercommunity.visualstudio ... m-win.html
… behoben. Also geht mein Padding-Makro wieder in Funktionen. Hat nur … fünf Monate gedauert (oder 15 Seiten im Jammer-Thread).Krishty hat geschrieben:Wieder einen Bug in Visual C++ gefunden: https://developercommunity.visualstudio ... -comp.html
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
- freelist (read-write-Daten, 64 B)
- p5s (read-write-Daten, 8 B)
- p05 (read-only-Daten, 12 B)
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Nachträgliche Rezension:Krishty hat geschrieben:Warum muss man /Gw von Hand in die Linker-Kommandozeile eintippen? Warum gibt es noch keine Option dafür? Warum machen die sowas für nichts?
https://blogs.msdn.microsoft.com/vcblog ... er-switch/
- Dass man die Option auch in Visual C++ 2017 noch von Hand in die Kommandozeile eintragen muss, ist Quälerei.
- Davon abgesehen ist /Gw aber absolut geiler Scheiß. Schmeißt so ziemlich alle nutzlosen Daten aus meinen EXEs, über die ich mich jahrelang aufgeregt habe.
- Eigentlich sollte es standardmäßig an sein, aber in Verbindung mit /Gy (COMDAT Folding) können nicht-standardkonforme Optimierungen entstehen. (Jemand hat seinen Templates, die ansonsten zu identischem Code kompilieren, einzigartige Adressen verpasst, indem er leere statische Variablen angelegt hat. Mit /Gw werden diese Variablen wieder zu einer einzigen gefaltet, und alle Templates kollabieren wieder zur selben Adresse. Das hat dem Team gereicht, um /Gw aus den Standardeinstellungen zu schmeißen.)
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Warte … Zeiger aus dem User Mode werden ohne Validierung an Kernel-Mode-Treiber weitergegeben?! Das … das klingt nach einer furchtbaren Sicherheitslücke!?https://msdn.microsoft.com/en-us/library/windows/desktop/jj200584(v=vs.85).aspx hat geschrieben:Don't pass NULL pointers to Map
If you pass NULL to the pResource or pMappedResource parameter of the ID3D11DeviceContext::Map method, the behavior of Map is undefined. If you created a device that just supports the core layer, invalid parameters to Map can crash the operating system.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Raymond Chen hat einen sehr informativen Artikel darüber, warum sie diese Änderung vorgenommen haben: Why are the module timestamps in Windows 10 so nonsensical?Krishty hat geschrieben:Seit Windows 10 Creators Update und .NET 4.6 (vielleicht auch früher) ist der Zeitstempel in EXEs und DLLs kein Zeitstempel mehr.
Raymond Chen hatte vor Jahren einen Beitrag, dass das Feld eher als Build-ID gedacht ist denn als Zeitstempel. Aber warum sollte das in Konflikt stehen? Wer kompiliert zwei verschiedene Builds seines Programms in der selben Sekunde? Was wird besser, wenn da eine Toolchain-Kodierung drin landet?
Software ist natürlich nicht drauf vorbereitet, weil bisher jedes EXE-/DLL-Tool versucht, dort einen Zeitstempel zu lesen. Markierung ist das höchstwertige Bit. Die DLLs in System32 werden also seit dem Creators Update mit zufälligen Daten ab 2038 angezeigt.
Ich jammere, weil es so schön bequem war. Man musste kein Datum/Zeit in seine EXE schreiben. Ich brauchte meine Plugins nie nach Versionsnummern fragen, weil ja Zeitstempel drinlagen. Man konnte die Stempel weder vergessen noch vermasseln, weil sich der Linker drum gekümmert hat. Und jetzt? Alles kaputt. Nie kann ich was Schönes haben.
… ich nehme das Jammern also zurück; da habe ich wirklich nicht weit genug gedacht. Die Vorteile bei Sicherheit, Testen, inkrementell kompilieren und linken, Zertifizieren, usw. sind ja echt gigantisch.
Re: Jammer-Thread
Rate mal, warum die Linux-Grafiktreiber so langsam laufen? Der Großteil geht dafür drauf, für jeden aus dem Userspace übergebenen Pointer eine virtuelle IOMMU zu emulieren. Ich habe schon mit den Entwicklern diskutiert, ob die es bitte wenigstens abschaltbar machen. Die Antwort: Sicherheit geht vor.Krishty hat geschrieben:Warte … Zeiger aus dem User Mode werden ohne Validierung an Kernel-Mode-Treiber weitergegeben?! Das … das klingt nach einer furchtbaren Sicherheitslücke!?https://msdn.microsoft.com/en-us/library/windows/desktop/jj200584(v=vs.85).aspx hat geschrieben:Don't pass NULL pointers to Map
If you pass NULL to the pResource or pMappedResource parameter of the ID3D11DeviceContext::Map method, the behavior of Map is undefined. If you created a device that just supports the core layer, invalid parameters to Map can crash the operating system.
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
Re: Jammer-Thread
Ich wollte Visual Studio auf Englisch umstellen. Aus offensichtlichen Gründen. Nun, leider gab es Englisch nicht als Auswahl, aber ich wurde auf die Microsoft-Seite umgeleitet, wo es Sprachpakete gibt. Ich lade also einen 2.9 MB großen Installer runter, der mir zugleich mitteilt, dass die Installation 2 GB Festplattenspeicher (across all devices - na toll) belegen wird. Und als erstes mal damit rumtrödelt, einen Systemwiederherstellungspunkt zu erstellen.
Kann mir bitte jemand erklären, was der Blödsinn soll? So wie ich das sehe, will ich eine handvoll Strings ersetzen. Er sollte also eine handvoll Textdateien mit übersetzten String in irgendeinen Ordner kopieren und fertig. Können maximal ein paar hundert KB sein. Sollte innerhalb eines Sekundenbruchteils runtergeladen und installiert sein. Stattdessen dauert das hier schon wieder 10 Minuten. Welches blöde Arschloch ist eigentlich für so eine Software zuständig? Ich weiß nichtmal, wie ich einen Installer so sehr überladen könnte, wenn ich es darauf anlegen würde, möglichst ineffizient zu sein...
Kann mir bitte jemand erklären, was der Blödsinn soll? So wie ich das sehe, will ich eine handvoll Strings ersetzen. Er sollte also eine handvoll Textdateien mit übersetzten String in irgendeinen Ordner kopieren und fertig. Können maximal ein paar hundert KB sein. Sollte innerhalb eines Sekundenbruchteils runtergeladen und installiert sein. Stattdessen dauert das hier schon wieder 10 Minuten. Welches blöde Arschloch ist eigentlich für so eine Software zuständig? Ich weiß nichtmal, wie ich einen Installer so sehr überladen könnte, wenn ich es darauf anlegen würde, möglichst ineffizient zu sein...
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
Re: Jammer-Thread
Außerdem: Ich habe es jetzt endlich aufgegeben, CMake zu benutzen. Zumindest gucke ich bis auf weiteres was passiert, wenn man es nicht benutzt. Schlimmer kann es eigentlich nicht werden.
Der Anstoß dazu war, dass ich eines meiner Projekte auf meinem Laptop installieren und dafür meine Entwicklungsumgebung (im Sinne von: installierte Abhängigkeiten) einrichten musste (unter Windows). Naheliegenderweise lädt man also die neusten Versionen von allem herunter, man will ja aktuell sein. Ich hatte eigentlich CMake Skripte für alles, aber natürlich funktionierten sie nicht. Denn, wie jeder weiß, ist der normale Betriebsmodus von CMake nicht 'ausführen' sondern 'debuggen'. Jedes verdammte Mal. Meine Fresse.
Da CMake noch nie sinnvolle Fehlermeldungen generiert hat, musste ich also die Skripte lesen um zu verstehen, was falsch läuft. Ich brauchte irgendein System, also fing ich alphabetisch bei Assimp an. Ich les mir also die Logik nach der .lib-Dateien und Includeverzeichnisse gesucht werden durch, und gleiche sie händisch mit der frisch installierten Version (siehe Anhang A) ab. Und muss feststellen, dass Assimp jetzt seine kompilierten Dateien nach einem Schema benennt, das die verwendete Compilerversion beinhaltet. Was ja ansich sinnvoll ist, weil die benötigte Anzahl an Builds in C++ exponentiell mit der Anzahl der Parameter wächst (!!!), und man für jeden einen eindeutigen Name braucht. Weil C++ eine verdammte Scheißsprache ist.
Ich bin also drauf und dran, mein CMake-Skript so anzupassen, dass es die neuen Dateien finde. Und halte inne. Ich war kurz davor, einen Sonderfall einzubauen, der garantiert nur auf meinem Rechner funktionieren wird. Man könnte es auch flexibler machen und Umgebungsvariablen benutzen, aber ich weiß jetzt schon, dass ich dann beim nächsten mal wieder meine CMake-Skripte lesen werde, nur um nachzusehen, wie die Umgebungsvariable heißen muss, nur um dann ein anderes Programm zu starten, mit dem ich besagte Variable setzen kann. Es gibt also keinerlei Grund, das nicht direkt hardcodiert in das Skript zu schreiben, das spart nur Arbeit.
Man könnte sich auch irgendeine andere Lösung überlegen, die generelle, flexibler ist. Aber ich bin mir absolut sicher, das ich damit nicht den Fall abdecken werde, der in einem Jahr auftreten wird, wenn ich den Code mal wieder auf einer anderen Maschine ausführen will. Bringt also alles nix.
Ich habe endgültig genug. Ich benutze CMake seit ca. 5 Jahren regelmäßig. Es hat bisher noch kein einziges mal das getan, was es tun sollte (Abhängigkeiten automatisch finden). Ich musste jedes mal Skripte lesen, gucken was passiert und manuell anpassen. Es funktioniert einzig und alleine dann, wenn man ein Projekt runterlädt, in dem alle Abhängigkeiten gebündelt sind, aber das ist ja auch der triviale Fall. Dafür kann man auch statische Projektdateien bauen. Da braucht man auch nur eine Version, denn die können ja auch automatisch konvertiert werden. Der relevante Fall 'oh, mir fehlt eine Abhängigkeit, naja ich installiere sie einfach schnell nach' klappt abgesehen von einigen sehr sehr gängigen Bibliotheken (Qt, Cuda, ...) in der Regel nicht. Und dann muss ich in fremden Code suchen, wieso irgendeine Bibliothek nicht gefunden wird, weil ich davon wieder eine andere Version installiert habe, und muss wieder von vorne anfangen, alles anzupassen.
Ich habe die Schnauze endgültig voll. Ich versuch jetzt mal alles über Visual Studio zu konfigurieren, das Property Sheet System sieht brauchbar aus und es ist tausendmal angenehmer, direkt einen Pfad einzutragen, als ein Skript anzupassen, welches pseudogenerisch den Pfad finden soll und anschließend 4 mal zu debuggen, bis es das tatsächlich tut. Mal sehen wie weit ich damit komme, vor Qt habe ich jetzt schon Angst.
Anhang A:
Assimp kompilieren hat auch schon nicht geklappt. Weil es eine zlib-Version findet und benutzt, diese aber leider nicht kompatibel ist. Ich bekomme Linker-Fehler, die so erstmal nichtssagend sind. Ich gebe CMake die Schuld, von einem Buildsystem erwarte ich nicht nur, irgendetwas zu finden, sondern auch zu wissen, ob es das richtige ist. Die Kompatibilitätsprüfung hat also entweder nicht stattgefunden oder versagt, vielleicht hätte man es mit einem besseren CMake-Skript beheben können, aber von einem vernünftigen System erwarte ich einfach mal, dass angaben zu kompatiblen Programmversionen eingefordert werden und auch der dümmste Benutzer die Kompatibilitätsprüfung nicht kaputt bekommt. Weil genau diese Benutzer 95% der CMake Skripte schreiben werden.
Netterweise liefert assimp die Abhängigkeiten gleich mit. Aber wieso wird dann überhaupt nach einer externen Version gesucht? Wer weiß. Jedenfalls finde ich nach einigen Minuten CMake-Skripte debuggen tatsächlich einen Schalter den man umlegen kann und dann geht es. Trotzdem hat die Aktion mich 15 Minuten gekostet.
Ich saß jetzt wieder ca. 2.5 Stunden an meinem Projekt und die Bilanz lautet: 'Kein messbarer Fortschritt'. So macht das wirklich keinen Spaß :(
Der Anstoß dazu war, dass ich eines meiner Projekte auf meinem Laptop installieren und dafür meine Entwicklungsumgebung (im Sinne von: installierte Abhängigkeiten) einrichten musste (unter Windows). Naheliegenderweise lädt man also die neusten Versionen von allem herunter, man will ja aktuell sein. Ich hatte eigentlich CMake Skripte für alles, aber natürlich funktionierten sie nicht. Denn, wie jeder weiß, ist der normale Betriebsmodus von CMake nicht 'ausführen' sondern 'debuggen'. Jedes verdammte Mal. Meine Fresse.
Da CMake noch nie sinnvolle Fehlermeldungen generiert hat, musste ich also die Skripte lesen um zu verstehen, was falsch läuft. Ich brauchte irgendein System, also fing ich alphabetisch bei Assimp an. Ich les mir also die Logik nach der .lib-Dateien und Includeverzeichnisse gesucht werden durch, und gleiche sie händisch mit der frisch installierten Version (siehe Anhang A) ab. Und muss feststellen, dass Assimp jetzt seine kompilierten Dateien nach einem Schema benennt, das die verwendete Compilerversion beinhaltet. Was ja ansich sinnvoll ist, weil die benötigte Anzahl an Builds in C++ exponentiell mit der Anzahl der Parameter wächst (!!!), und man für jeden einen eindeutigen Name braucht. Weil C++ eine verdammte Scheißsprache ist.
Ich bin also drauf und dran, mein CMake-Skript so anzupassen, dass es die neuen Dateien finde. Und halte inne. Ich war kurz davor, einen Sonderfall einzubauen, der garantiert nur auf meinem Rechner funktionieren wird. Man könnte es auch flexibler machen und Umgebungsvariablen benutzen, aber ich weiß jetzt schon, dass ich dann beim nächsten mal wieder meine CMake-Skripte lesen werde, nur um nachzusehen, wie die Umgebungsvariable heißen muss, nur um dann ein anderes Programm zu starten, mit dem ich besagte Variable setzen kann. Es gibt also keinerlei Grund, das nicht direkt hardcodiert in das Skript zu schreiben, das spart nur Arbeit.
Man könnte sich auch irgendeine andere Lösung überlegen, die generelle, flexibler ist. Aber ich bin mir absolut sicher, das ich damit nicht den Fall abdecken werde, der in einem Jahr auftreten wird, wenn ich den Code mal wieder auf einer anderen Maschine ausführen will. Bringt also alles nix.
Ich habe endgültig genug. Ich benutze CMake seit ca. 5 Jahren regelmäßig. Es hat bisher noch kein einziges mal das getan, was es tun sollte (Abhängigkeiten automatisch finden). Ich musste jedes mal Skripte lesen, gucken was passiert und manuell anpassen. Es funktioniert einzig und alleine dann, wenn man ein Projekt runterlädt, in dem alle Abhängigkeiten gebündelt sind, aber das ist ja auch der triviale Fall. Dafür kann man auch statische Projektdateien bauen. Da braucht man auch nur eine Version, denn die können ja auch automatisch konvertiert werden. Der relevante Fall 'oh, mir fehlt eine Abhängigkeit, naja ich installiere sie einfach schnell nach' klappt abgesehen von einigen sehr sehr gängigen Bibliotheken (Qt, Cuda, ...) in der Regel nicht. Und dann muss ich in fremden Code suchen, wieso irgendeine Bibliothek nicht gefunden wird, weil ich davon wieder eine andere Version installiert habe, und muss wieder von vorne anfangen, alles anzupassen.
Ich habe die Schnauze endgültig voll. Ich versuch jetzt mal alles über Visual Studio zu konfigurieren, das Property Sheet System sieht brauchbar aus und es ist tausendmal angenehmer, direkt einen Pfad einzutragen, als ein Skript anzupassen, welches pseudogenerisch den Pfad finden soll und anschließend 4 mal zu debuggen, bis es das tatsächlich tut. Mal sehen wie weit ich damit komme, vor Qt habe ich jetzt schon Angst.
Anhang A:
Assimp kompilieren hat auch schon nicht geklappt. Weil es eine zlib-Version findet und benutzt, diese aber leider nicht kompatibel ist. Ich bekomme Linker-Fehler, die so erstmal nichtssagend sind. Ich gebe CMake die Schuld, von einem Buildsystem erwarte ich nicht nur, irgendetwas zu finden, sondern auch zu wissen, ob es das richtige ist. Die Kompatibilitätsprüfung hat also entweder nicht stattgefunden oder versagt, vielleicht hätte man es mit einem besseren CMake-Skript beheben können, aber von einem vernünftigen System erwarte ich einfach mal, dass angaben zu kompatiblen Programmversionen eingefordert werden und auch der dümmste Benutzer die Kompatibilitätsprüfung nicht kaputt bekommt. Weil genau diese Benutzer 95% der CMake Skripte schreiben werden.
Netterweise liefert assimp die Abhängigkeiten gleich mit. Aber wieso wird dann überhaupt nach einer externen Version gesucht? Wer weiß. Jedenfalls finde ich nach einigen Minuten CMake-Skripte debuggen tatsächlich einen Schalter den man umlegen kann und dann geht es. Trotzdem hat die Aktion mich 15 Minuten gekostet.
Ich saß jetzt wieder ca. 2.5 Stunden an meinem Projekt und die Bilanz lautet: 'Kein messbarer Fortschritt'. So macht das wirklich keinen Spaß :(
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Kompilier Assimp doch als DLL, dann geht das mit jedem Compiler … (aber dann hast du keine Sonderzeichen in Dateinamen und keine Fortschrittsbalken mehr, lol)Jonathan hat geschrieben:Ich brauchte irgendein System, also fing ich alphabetisch bei Assimp an. Ich les mir also die Logik nach der .lib-Dateien und Includeverzeichnisse gesucht werden durch, und gleiche sie händisch mit der frisch installierten Version (siehe Anhang A) ab. Und muss feststellen, dass Assimp jetzt seine kompilierten Dateien nach einem Schema benennt, das die verwendete Compilerversion beinhaltet. Was ja ansich sinnvoll ist, weil die benötigte Anzahl an Builds in C++ exponentiell mit der Anzahl der Parameter wächst (!!!), und man für jeden einen eindeutigen Name braucht. Weil C++ eine verdammte Scheißsprache ist.
- Chromanoid
- Moderator
- Beiträge: 4273
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Jammer-Thread
Mich würde immer noch interessieren, wie sich Gradle für CPP anfühlt. Vielleicht willst Du das ja mal zum Anlass nehmen, es auszuprobieren: https://docs.gradle.org/current/usergui ... tware.html Unity3D wird damit wohl auch gebaut, falls das ein Anreiz ist. Wobei sie aktuell nicht mehr mit Unity Technologies auf der Hauptseite werben, nur noch hier https://gradle.com/about.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Dinge, die ich schon immer tun wollte, aber andere waren schneller weil sie Unity nutzen statt sich wochenlang ihre eigenen Formatierungsroutinen für Gleitkommazahlen zu schreiben; Teil 812:
und
https://twitter.com/HoussineMehnik/stat ... 5208351744
und
https://twitter.com/HKdevblog/status/686217337293418496
und
https://twitter.com/HoussineMehnik/stat ... 5208351744
und
https://twitter.com/HKdevblog/status/686217337293418496
- Schrompf
- Moderator
- Beiträge: 5047
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Jammer-Thread
Ich erkenne nicht, was daran der Trick ist? Selbstähnliche Replikation?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Naja, das eine ist ein Zettelgenerator. Das andere ist ein Rohrgenerator. Und dann ein Müll(verteilungs)generator. AFAIK nicht einmal mit großer Trickserei, aber dafür muten die hochproduktiv an.
Re: Jammer-Thread
Sinnlos!!
Ich finde (zumindest nach einigem googlen) keinen gaaanz simplen Tilemap-Editor!!
Ich möchte einfach nur eine Map gestalten, auf den einzelnen Tiles Grafiken (1 Bild aus 251 Einzelnbildern) "packen", und das soll dann als leicht lesbare/importierbare Datei gespeichert werden...
Ich sehe es schon kommen, dass ich selber so einen TileMap-Editor schreiben muss :(
Ich finde (zumindest nach einigem googlen) keinen gaaanz simplen Tilemap-Editor!!
Ich möchte einfach nur eine Map gestalten, auf den einzelnen Tiles Grafiken (1 Bild aus 251 Einzelnbildern) "packen", und das soll dann als leicht lesbare/importierbare Datei gespeichert werden...
Ich sehe es schon kommen, dass ich selber so einen TileMap-Editor schreiben muss :(
- RustySpoon
- Establishment
- Beiträge: 298
- Registriert: 17.03.2009, 13:59
- Wohnort: Dresden
Re: Jammer-Thread
Naja, die Standardlösung ist da halt immer noch Tiled. Es tut zumindest was es soll, auch wenn mich das Ding jedesmal aufs Neue aufregt. Das Exportformat ist zumindest auch straightforward.
Re: Jammer-Thread
Das habe ich auch gefunden. Und dann TileStudio.
Mh... ich glaube, dann schaue ich mir mal Tutorials an. Ist bestimmt schneller als selber einen zu schreiben.
Was ich mir auch spontan überlegt habe:
Mit Gimp das zu machen.
Ich erstelle mir ein Bild. Meine Tilegrafiken sind zB 64x64Pixel.
Das heißt, das dieses Bild die Dimensionen von (breite x 64)x(höhe x 64) hat.
Ich lade die einzelnen TileGrafiken in Gimp und baue dann daraus meine Map.
Ich definiere zu jeder TileGrafik eine zusätzliche Ebene, die nur eine bestimmte Farbe hat, also jede TileGrafik verfügt dann über einen zusätzlichen Farbcode.
Beim Abspeichern schalte ich dann lediglich die originalGrafikEbene aus, und es werden nur die Farben auf den Ebenen abgespeichert.
Beim Importieren generiere ich die Map anhand der Farbcodes....
Würde sowas unter Gimp gehen?
Mh... ich glaube, dann schaue ich mir mal Tutorials an. Ist bestimmt schneller als selber einen zu schreiben.
Was ich mir auch spontan überlegt habe:
Mit Gimp das zu machen.
Ich erstelle mir ein Bild. Meine Tilegrafiken sind zB 64x64Pixel.
Das heißt, das dieses Bild die Dimensionen von (breite x 64)x(höhe x 64) hat.
Ich lade die einzelnen TileGrafiken in Gimp und baue dann daraus meine Map.
Ich definiere zu jeder TileGrafik eine zusätzliche Ebene, die nur eine bestimmte Farbe hat, also jede TileGrafik verfügt dann über einen zusätzlichen Farbcode.
Beim Abspeichern schalte ich dann lediglich die originalGrafikEbene aus, und es werden nur die Farben auf den Ebenen abgespeichert.
Beim Importieren generiere ich die Map anhand der Farbcodes....
Würde sowas unter Gimp gehen?
- RustySpoon
- Establishment
- Beiträge: 298
- Registriert: 17.03.2009, 13:59
- Wohnort: Dresden
Re: Jammer-Thread
Gehen würde das sicher... aber Alter, was ein Stunt. :D
Im Vergleich zu Tiled wirst du da auch an Produktivität nichts gewinnen. Das Ding ist ja wirklich schon auf das Nötigste eingedampft: Karte anlegen, Tileset anlegen, lostilen, exportieren, fertig. Und das Exportformat ist 'ne billige XML für die es inzwischen auch zig Importer gibt.
Was mich an Tiled immer so genervt hat waren eher die fehlenden "intelligenten" Tools. Ich krieg z.B. die Krise, wenn ich eine Straße male und diese "Randtiles" immer noch händisch setzen muss. Oder man immer nur ein Tile auswählen kann, so das man z.B. "Rauschen" in großen Flächen immer händisch gestalten muss. Aber ich glaub da hat sich das Ding in den letzten Jahren auch schon verbessert.
Im Vergleich zu Tiled wirst du da auch an Produktivität nichts gewinnen. Das Ding ist ja wirklich schon auf das Nötigste eingedampft: Karte anlegen, Tileset anlegen, lostilen, exportieren, fertig. Und das Exportformat ist 'ne billige XML für die es inzwischen auch zig Importer gibt.
Was mich an Tiled immer so genervt hat waren eher die fehlenden "intelligenten" Tools. Ich krieg z.B. die Krise, wenn ich eine Straße male und diese "Randtiles" immer noch händisch setzen muss. Oder man immer nur ein Tile auswählen kann, so das man z.B. "Rauschen" in großen Flächen immer händisch gestalten muss. Aber ich glaub da hat sich das Ding in den letzten Jahren auch schon verbessert.
Re: Jammer-Thread
:D
Ja, die Idee ist sehr...naja..."besonders" :D
Na ich schaue mir mal dieses Tiled an. Danke trotzdem :)
Ja, die Idee ist sehr...naja..."besonders" :D
Na ich schaue mir mal dieses Tiled an. Danke trotzdem :)
- xq
- Establishment
- Beiträge: 1589
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: Jammer-Thread
Mittlerweile kann Tiled Autotiles und das "fülle mit einem element zufällig aus mehr als einer tile", aber ich hab mittlerweile auch so eine halb-aversion gegen tiled. viele features sind schon geil, aber das programm ist mal wieder ein fall von "so generisch, das es weh tut"Was mich an Tiled immer so genervt hat waren eher die fehlenden "intelligenten" Tools. Ich krieg z.B. die Krise, wenn ich eine Straße male und diese "Randtiles" immer noch händisch setzen muss. Oder man immer nur ein Tile auswählen kann, so das man z.B. "Rauschen" in großen Flächen immer händisch gestalten muss. Aber ich glaub da hat sich das Ding in den letzten Jahren auch schon verbessert.
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in Zig und nervt Leute damit.
Programmiert viel in Zig und nervt Leute damit.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Ooooh, diese Ficker bei Microsoft.
Wenn man in den Projekteinstellungen von Visual Studio nicht das XP-kompatible Toolset auswählt, startet die Anwendung nicht mehr unter XP.
Das ist überraschender, als es klingt: Selbst eine komplett leere Anwendung, die nichts tut und keine Abhängigkeiten hat, schmeißt den Fehler Foo.exe is not a valid Win32 application bzw. Foo.exe ist keine gültige Win32-Anwendung. – WTF?! Warum sollte die nicht laufen können?!
Es gibt keinen Grund. Die Schweinepriester setzen schlicht und einfach im Optional Header der PE die Felder Major/MinorSubsystemVersion auf 6.0 statt 5.1. Ohne weitere Not.
Und das scheiß Windows sagt nicht etwa „Zu neu für mich!“ oder „Mach erstmal Vorspiel!“, sondern schmeißt diesen bekackten kryptischen Win32-Fehler.
Ich kann die EXE also einfach im Hex-Editor öffnen, die vier Bytes überschreiben, und schon läuft wieder alles unter XP.
*spuck*
Nachtrag: Ich kann in den Projekteinstellungen → Linker → System → Minimal Required Version den Wert 5.01 eingeben, dann landet der im PE-Header und das Programm startet noch unter XP. Immerhin bleibt mir damit das Hex-Editing erspart. Ist vielleicht auch besser; Standardprogramme nutzen die CRT und starten wirklich nicht mehr unter XP, sobald man das nicht-XP-Toolset auswählt.
Wenn man in den Projekteinstellungen von Visual Studio nicht das XP-kompatible Toolset auswählt, startet die Anwendung nicht mehr unter XP.
Das ist überraschender, als es klingt: Selbst eine komplett leere Anwendung, die nichts tut und keine Abhängigkeiten hat, schmeißt den Fehler Foo.exe is not a valid Win32 application bzw. Foo.exe ist keine gültige Win32-Anwendung. – WTF?! Warum sollte die nicht laufen können?!
Es gibt keinen Grund. Die Schweinepriester setzen schlicht und einfach im Optional Header der PE die Felder Major/MinorSubsystemVersion auf 6.0 statt 5.1. Ohne weitere Not.
Und das scheiß Windows sagt nicht etwa „Zu neu für mich!“ oder „Mach erstmal Vorspiel!“, sondern schmeißt diesen bekackten kryptischen Win32-Fehler.
Ich kann die EXE also einfach im Hex-Editor öffnen, die vier Bytes überschreiben, und schon läuft wieder alles unter XP.
*spuck*
Nachtrag: Ich kann in den Projekteinstellungen → Linker → System → Minimal Required Version den Wert 5.01 eingeben, dann landet der im PE-Header und das Programm startet noch unter XP. Immerhin bleibt mir damit das Hex-Editing erspart. Ist vielleicht auch besser; Standardprogramme nutzen die CRT und starten wirklich nicht mehr unter XP, sobald man das nicht-XP-Toolset auswählt.
Zuletzt geändert von Krishty am 06.02.2018, 15:10, insgesamt 1-mal geändert.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Weil ich gefragt wurde, was überhaupt der Unterschied zwischen dem normalen Toolset und dem XP-kompatiblen Toolset ist:
- Man kann das Verhalten der CRT einstellen (set_terminate(), _set_purecall_handler(), usw.)
- Damit das funktioniert, muss die CRT an globalen Adressen Funktionszeiger speichern.
- Wenn es ein Angreifer schafft, durch eine kleine Sicherheitslücke einen der Zeiger zu überschreiben, wird daraus eine große Sicherheitslücke (Remote Code Execution).
- Als Mitigation werden globale Zeiger seit der 2010er CRT verschlüsselt gespeichert und bei Benutzung wieder entschlüsselt. Die Schlüssel werden bei Prozessstart zufällig gewählt. Ein Angreifer, der die Zeiger überschreiben kann, müsste also zusätzlich die richtige Ver- und Entschlüsselung erraten.
- Das würde nichts bringen, wenn die Schlüssel im User Mode Address Space herumliegen (auf den der Angreifer ja schon Zugriff hat). Daher wurde diese Funktionalität in den Kernel geschoben – in die Funktionen EncodePointer() und DecodePointer() (hier übrigens wieder Grüße von Meltdown/Spectre!).
- Diese Funktionen wurden während der Entwicklung von Windows XP intern genutzt, und ab Windows Vista öffentlich gemacht.
- Dummerweise hat sich dabei die Importbibliothek geändert (Kernel32.dll vs KernelBase.dll).
- Die 2010er-CRT produziert deshalb auf Windows XP Fehler à DecodePointer konnte nicht in Kernel32.dll gefunden werden.
- Das XP-kompatible Toolset linkt eine spezielle Version der MSVCRT, die noch die XP-kompatiblen Einsprungspunkte für EncodePointer() und DecodePointer() unterstützt. (AFAIK unabhängig davon, ob man statisch oder dynamisch linkt.)
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Mein Thumbnail-Handler zwingt manchmal das ganze System in die Knie. Obwohl er so irre schnell ist und so wenig Speicher verbraucht. Bei einem GB Arbeitssatz sollte doch mein Rechner nicht mit Paging anfangen?!
Nun habe ich es mal geschafft, einen Debugger anzuhängen, und … der Explorer lädt meinen Thumbnail Handler für die selbe Datei fünf Mal gleichzeitig mit identischen Parametern. WTF! Bei fünf GB Arbeitssatz sieht die Sache natürlich schon ganz anders aus.
Jetzt darf ich erstmal herausfinden, wo die vier überflüssigen Aufrufe herkommen und ob ich die irgendwie loswerde.
Nachtrag: Der Call Stack ist immer identisch:
Krishty.dll!Thumbnails::GetThumbnail(unsigned int maximalDimension, OS::Win32::GDI::Bitmap * * result, OS::Win32::Shell::ThumbnailAlphaType * alpha)
thumbcache.dll!RunExtractor(struct IUnknown *,unsigned int,struct HBITMAP__ * *,enum WTS_ALPHATYPE *,unsigned long *)
thumbcache.dll!CThumbnailCache::_PerformFullExtraction(struct IShellItem *,unsigned int,unsigned int,int,struct HBITMAP__ * *,enum WTS_ALPHATYPE *,int *,int *)
thumbcache.dll!CThumbnailCache::_GetThumbnailImpl(class CThumbnailMoniker &,struct IShellItem *,unsigned int,enum WTS_FLAGS,int,struct ISharedBitmap * *,int *,int *)
thumbcache.dll!CThumbnailCache::GetThumbnail(struct IShellItem *,unsigned int,enum WTS_FLAGS,struct ISharedBitmap * *,enum WTS_CACHEFLAGS *,struct WTS_THUMBNAILID *)
shell32.dll!CShellItem::_GetThumbnail(struct tagSIZE,int,struct ISharedBitmap * *)
shell32.dll!CShellItem::GetSharedBitmap(struct tagSIZE,int,struct ISharedBitmap * *)
shell32.dll!CImagePrefetchWorkItem::_LoadThumbnail(int,struct IShellFolder2 *,struct _ITEMID_CHILD const *,struct IItem *,struct ISharedBitmap * *)
shell32.dll!CImagePrefetchWorkItem::_PrefetchImages(int,struct IShellFolder2 *,unsigned int,int)
shell32.dll!CImagePrefetchWorkItem::DoWork()
Die einzigen Ergebnisse für CImagePrefetchWorkItem sind drei automatisch erzeugte Crash Reports und eine chinesische Seite. I’m so sick of this shit
Nun habe ich es mal geschafft, einen Debugger anzuhängen, und … der Explorer lädt meinen Thumbnail Handler für die selbe Datei fünf Mal gleichzeitig mit identischen Parametern. WTF! Bei fünf GB Arbeitssatz sieht die Sache natürlich schon ganz anders aus.
Jetzt darf ich erstmal herausfinden, wo die vier überflüssigen Aufrufe herkommen und ob ich die irgendwie loswerde.
Nachtrag: Der Call Stack ist immer identisch:
Krishty.dll!Thumbnails::GetThumbnail(unsigned int maximalDimension, OS::Win32::GDI::Bitmap * * result, OS::Win32::Shell::ThumbnailAlphaType * alpha)
thumbcache.dll!RunExtractor(struct IUnknown *,unsigned int,struct HBITMAP__ * *,enum WTS_ALPHATYPE *,unsigned long *)
thumbcache.dll!CThumbnailCache::_PerformFullExtraction(struct IShellItem *,unsigned int,unsigned int,int,struct HBITMAP__ * *,enum WTS_ALPHATYPE *,int *,int *)
thumbcache.dll!CThumbnailCache::_GetThumbnailImpl(class CThumbnailMoniker &,struct IShellItem *,unsigned int,enum WTS_FLAGS,int,struct ISharedBitmap * *,int *,int *)
thumbcache.dll!CThumbnailCache::GetThumbnail(struct IShellItem *,unsigned int,enum WTS_FLAGS,struct ISharedBitmap * *,enum WTS_CACHEFLAGS *,struct WTS_THUMBNAILID *)
shell32.dll!CShellItem::_GetThumbnail(struct tagSIZE,int,struct ISharedBitmap * *)
shell32.dll!CShellItem::GetSharedBitmap(struct tagSIZE,int,struct ISharedBitmap * *)
shell32.dll!CImagePrefetchWorkItem::_LoadThumbnail(int,struct IShellFolder2 *,struct _ITEMID_CHILD const *,struct IItem *,struct ISharedBitmap * *)
shell32.dll!CImagePrefetchWorkItem::_PrefetchImages(int,struct IShellFolder2 *,unsigned int,int)
shell32.dll!CImagePrefetchWorkItem::DoWork()
Die einzigen Ergebnisse für CImagePrefetchWorkItem sind drei automatisch erzeugte Crash Reports und eine chinesische Seite. I’m so sick of this shit