Spoiler: Der GLSL Code wird vom Compiler in ein normales ELF executable umgebaut, welcher den Sourcecode und natürlich die Instruktionen enthalten. Genau das kann man sich geben lassen, wenn man auf die OpenGL 4.5 ARB zugreift und sich das Binary vom Shader zurück geben lässt.
Khronos hat ja diese API aufgenommen, damit man auf der lokalen GPU nicht immer wieder den Shader neu bauen muss, sondern einfach das Bin vom vram lädt, auf die Platte packt und dann beim nächsten mal von dort in den VRAM lädt. Das spart bei größeren Shadern, wie sie bei deferred shading üblich sind ne menge Zeit. Man kann sich nun für eine GPU Architektur ein Binary selber bauen und ganz andere Dinge auf der GPU tun ^^
Bei AMD ist das ganz einfach, weil die ihre Instruction-Set einen um die Ohren hauen, in CodeXL werden die GLSL und CL Shader für alle möglichen AMD GPUs gebaut und dann kann man sich den Assembly und ISA Code neben den HLSL/GLSL/CL Code angucken und da steht auch wieviele Clocks die Operation brauchen wird und auch Latenzen. Das gehört zur statischen Code-Analyse, die in diesen Monat erschienenden CodeXL Version rein kam. Ich hab damit schon zuhause erfolgreiche Tests gemacht
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Immer wieder interessant, was sich Hacker so ausdenken. Stellt sich die Frage, was man als Angreifer damit anstellen kann. Das gefährlichste was mir spontan einfällt ist, das manipulieren der Bildschirmausgabe bzw. das Abgreifen des Grafikspeichers z.B. aus einer virtuellen Maschine heraus. Gibt es die ProgramBinary-Funktionen eigentlich auch für WebGL?
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2622 Wohnort: Berlin
Programmiersprache: Go, C/C++
Per Standard nicht, da es ein opengl arb ist aber wenn wer faul beim treiberinterface war, dann kann man die auch in opengl es/webgl aufrufen. Das wäre sehr schlimm, wenn eine website deine gpu kapert und bitcoins errechnet. Sobald man Geld verdienen kann, wird es ausgenutzt, wie es schon diverse male mit javascript und bitcoin passiert ist. Man kann aber ziemlich einfach über unity plugin deine gpu kapern.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Ginge Bitcoins berechnen nicht auch ohne diesen Hack? Alles was man dazu bräuchte wären doch Compute Shader oder notfalls auch nur Transform Feedback.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2622 Wohnort: Berlin
Programmiersprache: Go, C/C++
Sicher gibt es einige weitere Möglichkeiten. Ich bin mir gerade nicht sicher, dass compute shader in webgl verfügbar sind aber transform feedback schon. Interessant wäre, ob man ein shaderprogram so modifizieren kann, dass es bis zum runterfahren weiter läuft, ohne host Applikationen.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Interessant wäre, ob man ein shaderprogram so modifizieren kann, dass es bis zum runterfahren weiter läuft, ohne host Applikationen.
Das Problem ist da glaube ich, dass die GPU dann ja blockiert ist, oder? Und meiner Erfahrung nach wird der Treiber abgewürgt, wenn ein Shader mehrere Sekunden nicht mehr zurückkommt. Siehe TDR: https://msdn.microsoft.com/en-us/librar ... 85%29.aspx Man kann den TDR Timeout aber in der Rgistry ändern: https://www.reddit.com/r/opengl/comment ... with_long/ Und so könnte der Shader dann wohl ne Weile laufen. Aber wozu ohne Host Application?
_________________ "Pixel, ich bin dein Vater." -Darf Shader
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2622 Wohnort: Berlin
Programmiersprache: Go, C/C++
Im slides erklärtn er, dass man ein programm schreiben kann und das einfach mit ein anderem mit ausführt. Man tut also ein paar rechnungen machen, dass es nicht mehr als 1ms läuft und das führt er jeden frame dann mit dem anderen shader auS. So fällt es nicht auf, dein programm hat ledeglich weniger frames. Dazu muss man die werte in ein buffer halten aber wie schon geschrieben wurde kann man überall im speicher rum fuhrwerken und wenn man sich ein paar bytes im programm selber reserviert. Bei normalen programmen hat man auch schreibbare bereiche im binary, um z.b. Globale variablen zu realisieren.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.