{"id":649,"date":"2011-03-26T20:51:33","date_gmt":"2011-03-26T19:51:33","guid":{"rendered":"http:\/\/blog.m-ri.de\/?p=649"},"modified":"2011-03-21T20:52:22","modified_gmt":"2011-03-21T19:52:22","slug":"umstellung-eines-projektes-auf-vs-2010-schaltet-dep-nxcompat-ein-und-aslr-dynamicbase-ein","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2011\/03\/26\/umstellung-eines-projektes-auf-vs-2010-schaltet-dep-nxcompat-ein-und-aslr-dynamicbase-ein\/","title":{"rendered":"Umstellung eines Projektes auf VS-2010 schaltet DEP (\/NXCOMPAT) ein und ASLR (\/DYNAMICBASE) ein"},"content":{"rendered":"<p>Bei der Umstellung eines Projektes von <em>VS-2005<\/em> auf <em>VS-2010 <\/em>lief unsere Software im Testfeld ohne Probleme, bis auf einem Rechner, auf dem gezielt immer wieder der selbe Fehler auftrat.<\/p>\n<p>Der Stackdump zeigte aber immer wieder eine unterschiedliche Absturzadresse. Gl\u00fccklicherweise konnten wir durch Crash-Dumps einigerma\u00dfen lokalisieren was passierte. Eigent\u00fcmlicherweise zeigte sich der Crash immer beimAufruf einer bestimmten Windows-Prozedur:<\/p>\n<p><a href=\"http:\/\/blog.m-ri.de\/wp-content\/uploads\/2010\/07\/DEP4.png\"><img loading=\"lazy\" decoding=\"async\" title=\"DEP4\" src=\"http:\/\/blog.m-ri.de\/wp-content\/uploads\/2010\/07\/DEP4.png\" alt=\"\" width=\"773\" height=\"185\" \/><\/a><\/p>\n<p>Eigent\u00fcmlicherweise lief das selbe Programm mit <em>VS-2005 <\/em>kompiliert auf allen Maschinen. Also vermutete ich einen Compilerfehler! Aber wie kann ein Compilerfehler nur auf einer Maschine zu einem Problem werden?<\/p>\n<p>Aber ich lag komplett daneben.<br \/>\nNach der Analyse des Codes stellte sich heraus das <em>DEP<\/em> die Ursache war, und das der Crash nur auf der einizgen Maschine auftrat, auf der <em>DEP<\/em> unterst\u00fctzt wurde und eingeschaltet war.<\/p>\n<p><a href=\"http:\/\/blog.m-ri.de\/wp-content\/uploads\/2010\/07\/DEP1.png\"><img loading=\"lazy\" decoding=\"async\" title=\"DEP1\" src=\"http:\/\/blog.m-ri.de\/wp-content\/uploads\/2010\/07\/DEP1.png\" alt=\"\" width=\"380\" height=\"542\" \/><\/a><\/p>\n<p>Die anderen Rechner im Testfeld unterst\u00fctzen <em>DEP<\/em> nicht:<\/p>\n<p><a href=\"http:\/\/blog.m-ri.de\/wp-content\/uploads\/2010\/07\/DEP2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-752\" title=\"DEP2\" src=\"http:\/\/blog.m-ri.de\/wp-content\/uploads\/2010\/07\/DEP2.png\" alt=\"\" width=\"384\" height=\"548\" srcset=\"http:\/\/blog.m-ri.de\/wp-content\/uploads\/2010\/07\/DEP2.png 384w, http:\/\/blog.m-ri.de\/wp-content\/uploads\/2010\/07\/DEP2-210x300.png 210w\" sizes=\"auto, (max-width: 384px) 85vw, 384px\" \/><\/a><\/p>\n<p>Und auf diesen trat der Fehler nicht auf.<\/p>\n<p>Weitere Analyse zeigte, dass ein spezieller Code aus einer Fensterklasse, die ich von einer Libary \u00fcbernommen hatte ein spezielles Windows Subclassing mit einem Thunking \u00e4hnlich wie <em>ATL<\/em> machte, jedoch wurde der Speicher nicht korrekt als ausf\u00fchrbar markierte.<br \/>\nFolgerichtig krachte es. D.h. die paar Codezeilen, die gerade mal einen JMP und das laden eines Registers durchf\u00fchrten wurden von <em>DEP<\/em> als illegal betrachtet und es kam zum Crash.<\/p>\n<p>Und das eigent\u00fcmliche, dass der Code mit <em>VS-2005<\/em> kompiliert lief, war auch schnell erkl\u00e4rt.<br \/>\nAls das Projekt von <em>VS-2005 <\/em>in <em>VS-2010 <\/em>\u00fcbernommen wurde, wurden auch die Optionen f\u00fcr <em>DEP<\/em> (<em>\/NXCOMPAT<\/em>) und auch <em>ASLR<\/em> (<em>\/DYNAMICBASE<\/em>) eingeschaltet \u2757<\/p>\n<p><a href=\"http:\/\/blog.m-ri.de\/wp-content\/uploads\/2010\/07\/DEP3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-753\" title=\"DEP3\" src=\"http:\/\/blog.m-ri.de\/wp-content\/uploads\/2010\/07\/DEP3.png\" alt=\"\" width=\"853\" height=\"291\" srcset=\"http:\/\/blog.m-ri.de\/wp-content\/uploads\/2010\/07\/DEP3.png 853w, http:\/\/blog.m-ri.de\/wp-content\/uploads\/2010\/07\/DEP3-300x102.png 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><\/p>\n<p>Das ist eigentlich nicht nett, denn es hat schon einige weitreichende Konsequenzen f\u00fcr die Software.<br \/>\nAlso aufgepast bei der Konvertierung von Programmen und genau dar\u00fcber nachgedacht ob man <em>DEP<\/em> und <em>ASLR<\/em> wirklich f\u00fcr seine Software will \u2757<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bei der Umstellung eines Projektes von VS-2005 auf VS-2010 lief unsere Software im Testfeld ohne Probleme, bis auf einem Rechner, auf dem gezielt immer wieder der selbe Fehler auftrat. Der Stackdump zeigte aber immer wieder eine unterschiedliche Absturzadresse. Gl\u00fccklicherweise konnten wir durch Crash-Dumps einigerma\u00dfen lokalisieren was passierte. Eigent\u00fcmlicherweise zeigte sich der Crash immer beimAufruf einer &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2011\/03\/26\/umstellung-eines-projektes-auf-vs-2010-schaltet-dep-nxcompat-ein-und-aslr-dynamicbase-ein\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eUmstellung eines Projektes auf VS-2010 schaltet DEP (\/NXCOMPAT) ein und ASLR (\/DYNAMICBASE) ein\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[30,3,17,172,2],"tags":[267,205,38,171],"class_list":["post-649","post","type-post","status-publish","format-standard","hentry","category-c","category-programmieren","category-vista-2","category-vs2010","category-windows-api","tag-aslr","tag-crash","tag-debuggen","tag-vs-2010"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/649","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/comments?post=649"}],"version-history":[{"count":0,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/649\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=649"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=649"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}