Jammer-Thread

Hier kann über allgemeine Themen diskutiert werden, die sonst in kein Forum passen.
Insbesondere über Szene, Games, Kultur, Weltgeschehen, Persönliches, Recht, Hard- und Software.

Re: Jammer-Thread

Beitragvon joggel » 11.01.2018, 14:43

:D
Ja, die Idee ist sehr...naja..."besonders" :D

Na ich schaue mir mal dieses Tiled an. Danke trotzdem :)
bald mit neuem Avatar
Benutzeravatar
joggel
Establishment
 
Beiträge: 1206
Registriert: 06.11.2007, 19:06
Wohnort: Dresden

Re: Jammer-Thread

Beitragvon Essex20 » 11.01.2018, 18:38

Mich nervt an den neueren TileEd-Versionen das Verhalten, dass ich nicht mehr "adhoc" ein Tileset testen kann mit ner kleinen Map und ich nun gezwungen bin, vorher eine Datei anlegen und mich durch den Speicher-Dialog wurschteln zu müssen. Newer is not always better :-/

Edit: Analog zu IDE's ist das so, als ob man ein Projekt anlegen muss, nur um eine Code-Datei anzulegen und zu testen.
Benutzeravatar
Essex20
 
Beiträge: 33
Registriert: 18.04.2015, 13:45
Wohnort: Alzey (Rheinhessen)

Re: Jammer-Thread

Beitragvon MasterQ32 » 12.01.2018, 09:59

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.

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"
Duct tape is like the force. It has a light side, a dark side, and it holds the world together.
Benutzeravatar
MasterQ32
Felix Queißner
Establishment
 
Beiträge: 1006
Registriert: 07.10.2012, 14:56

Re: Jammer-Thread

Beitragvon Krishty » 13.01.2018, 01:27

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 Best STL Viewer.exe is not a valid Win32 application bzw. Best STL Viewer.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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6141
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Krishty » 15.01.2018, 12:07

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.)

Stand 2013 war das der einzige Unterschied. Es kann aber natürlich gut sein, dass inzwischen mehr dazugekommen ist.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6141
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Krishty » 15.01.2018, 16:02

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
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6141
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Krishty » 15.01.2018, 19:25

Darum schreibt niemand Thumbnail Handler für 3D-Dateien, Teil 25: Wenn beim Rendern ein GPU-Timeout auftritt und nicht richtig behandelt wird, zerfetzt es den Kernel.

Nachtrag: Oh, das ist sogar gewollt!
https://docs.microsoft.com/en-us/windows-hardware/drivers/display/limiting-repetitive-gpu-hangs-and-recoveries hat geschrieben:If the operating system detects that six or more GPU hangs and subsequent recoveries occur within 1 minute, the operating system bug-checks the computer on the next GPU hang.
Warum landet dann kein Eintrag in meinem Event Log? Warum muss das Dateisystem auf meiner Platte repariert werden? Warum sind alle gefeuert?

Die Situation ist also: Explorer will ein Thumbnail für eine Datei haben. Explorer ruft sechsfach parallel (wirklich!) meinen Thumbnail Handler für die selbe Datei auf. Die Systemressourcen gehen nicht sofort in die Knie, weil ich den Fall schon serialisiere. Weil die Datei knifflig ist, hagelt es GPU Timeouts. Als der sechste Thumbnail-Handler seinen Timeout erreicht, schaltet der Kernel auf Bluescreen. Ich habe NICHTS verkehrt gemacht, aber der User ist bluescreen’d. I CAN'T EVEN
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6141
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Krishty » 15.01.2018, 20:10

Soooo; ich bin auf Software-Rendering umgestiegen, wie Albi schonmal empfohlen hatte (via WARP).

  • Abstürze durch GPU-Timeouts: Nicht mehr möglich.

  • Ewige Ladezeit wegen schlecht optimierten Nvidia-Treibern: Weg. Alles initialisiert um die zehn Mal schneller als vorher.

  • Abstürze wegen Problemen mit Intel-Treibern: Kein Problem mehr.

  • Geschwindigkeit: Bei kleinen und mittleren Dateien schneller als vorher; nur bei richtig großen Dateien langsamer als Hardware.
Ob das auch bei den Usern gut funktioniert, bleibt abzuwarten (ich weiß nicht, ob WARP überall so ordentlich installiert ist, wie Microsoft es verspricht.) Mal gucken …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6141
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon joggel » 16.01.2018, 14:12

Ich weiß nicht was ich von dieser Studie halten soll...
https://www.kaspersky.de/blog/chip-unte ... nein/7303/

Okay... sehe gerade, dass ca die Hälfte der in Deutschland lebenden sich so etwas implantieren lassen würde.
Mir persönlich wirkt das etwas....."befremdlich"
bald mit neuem Avatar
Benutzeravatar
joggel
Establishment
 
Beiträge: 1206
Registriert: 06.11.2007, 19:06
Wohnort: Dresden

Re: Jammer-Thread

Beitragvon Krishty » 16.01.2018, 19:28

Visual C++ kompiliert alle Shader mit Reflection (falls man das FX-Framework nutzt) und bietet keine UI-Möglichkeit, das abzuschalten. Daher immer als zusätzliche Kommandozeilenoption angeben:

/Qstrip_debug /Qstrip_priv /Qstrip_reflect
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6141
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Krishty » 17.01.2018, 14:26

1&1 Webhosting ist offline. Toll.

Ich kann mich noch einloggen und E-Mail abholen, aber Webspace antwortet nicht mehr. Supportseite ist auch nicht erreichbar.

The page you are looking for is temporarily unavailable.
Please try again later.


Lügen.png

LÜGNER

Nachtrag: Seit 14 Uhr behoben.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6141
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Krishty » Gestern, 14:18

Rechner eingeschaltet, Bootvorgang, Pause – Dateisystem muss auf Fehler überprüft werden.

Okay.

Hunderte Fehler flitzen über den Bildschirm, die meisten mit DLLs und Manifests im Windows-Verzeichnis. Sieht übel aus.

Windows bootet tadellos. Ich will nachsehen, was los war.

Event Log hat nur die ersten 16.000 Buchstaben.

Die Zusammenfassung, die Liste betroffener Dateien, – alles weg. Wurde einfach nicht mitgespeichert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6141
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Krishty » Heute, 13:22

Ich kriege Visual C++ nicht dazu, das Overflow-Flag zu benutzen.

Clang/GCC haben __builtin_umul_overflow() und Konsorten. Das erzeugt direkt ein jo oder jno (Jump on Overflow/Jump on No Overflow). Aber Visual C++ hat sowas nicht. Am nächsten kommt man ran, indem man 32·32=64 multipliziert (__emulu) und dann die höchsten 32 Bits in einem unsigned int isoliert (bloß nicht als 64-Bit-Zahl lassen!) und sie auf Null testet.

Wie traurig, dass man in Software emulieren muss, was die CPU sowieso tut. Ein Befehl mehr, ein Register mehr.

Wieauchimmer. Alles ist 10 Mal effizienter als die Vorschläge auf StackOverflow.

Code: Ansicht erweitern :: Alles auswählen
// Multiplies the given integers and stores the result.
//  • returns “yes” if overflowing
bool overflowingMultiplication(size_t & result, size_t const a, size_t const b) {
        // • x86 has hardware support via “overflow” flag after multiplication

#       if COMPILED_BY_VISUAL_CPP

                // • Visual C++ does not grant access to the “overflow” flag
                // • the closest we have is a 32·32=64 or 64·64=128 multiplication with a check for the discarded bits
                // • available via “__emulu()”/“_umul128()” intrinsics
                // • do NOT repeat the multiplication (Visual C++ 2017 cannot merge duplicate multiplications)
#               if COMPILED_FOR_X86_32
                        auto const result64 = __emulu(a, b);
                        result = size_t(result64);
                        return 0 != uint32_t(result64 >> 32); // check the 32 discarded bits
#               elif COMPILED_FOR_X86_64
                        unsigned __int64 discarded;
                        result = _umul128(a, b, &discarded);
                        return 0 != discarded; // check the 64 discarded bits
#               else
#                       error TODO
#               endif

#       elif COMPILED_BY_CLANG || COMPILED_BY_GCC

                // “overflow” flag checks are available via “__builtin_umul_overflow()”/“__builtin_umulll_overflow()” built-ins
#               if COMPILED_FOR_X86_32
                        return __builtin_umul_overflow(a, b, &result);
#               elif COMPILED_FOR_X86_64
                        return __builtin_umulll_overflow(a, b, &result);
#               else
#                       error TODO
#               endif

#       endif
}
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6141
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Vorherige

Zurück zu Allgemeines Talk-Brett

Wer ist online?

Mitglieder in diesem Forum: Linkdex [Bot] und 5 Gäste