{"id":366,"date":"2008-11-27T19:20:38","date_gmt":"2008-11-27T18:20:38","guid":{"rendered":"http:\/\/blog.m-ri.de\/?p=366"},"modified":"2008-11-25T18:57:42","modified_gmt":"2008-11-25T17:57:42","slug":"vs-tipps-tricks-heap-bugs-finden-teil-4","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2008\/11\/27\/vs-tipps-tricks-heap-bugs-finden-teil-4\/","title":{"rendered":"VS Tipps &#038; Tricks: Heap Bugs finden (Teil 4)"},"content":{"rendered":"<p>In meine ersten Artikeln \u00fcber Heap-Bugs habe ich bereits erw\u00e4hnt, dass die CRT aber auch Windows selbst Speicher unter bestimmten Umst\u00e4nden vorbelegt bzw. beim Freigeben des Speichers mit einem festen Wert l\u00f6scht.<\/p>\n<p>F\u00fcr einen Entwickler ist es gut zu wissen welche Werte durch wen gesetzt werden. Zudem erleichtert einem dieses Wissen auch das Debuggen und die Identifikation von Problemen im Zusammenhang mit dem Heap, deshalb habe ich hier mal diese Magic-Bytes, die von Microsoft verwendet werden hier zusammengetragen.<\/p>\n<p>W\u00fcrde man im Debugger zum Beispiel eine Variable mit dem Wert <strong>0xCCCCCCCC <\/strong>entdecken, dann ist davon auszugehen, dass man diese Variable auf dem Stack nicht initialisiert hat.<\/p>\n<ul>\n<li><strong>0xABABABAB<\/strong><br \/>\nWird von <em>HeapAlloc <\/em>als Wert f\u00fcr die Guard Bytes (&#8222;no man&#8217;s land&#8220;) vor und hinter Speicherbl\u00f6cken verwendet.<\/li>\n<li><strong>0xBAADF00D<\/strong><br \/>\nWird von <em>LocalAlloc(LMEM_FIXED) <\/em>verwendet um nicht nicht initialisierten Speicher im Heap zu kennzeichnen.<\/li>\n<li><strong>0xCCCCCCCC<\/strong><br \/>\nWird\u00a0von der Debug-CRT verwendet um nicht initialisierten Stack\u00a0zu kennzeichnen.<\/li>\n<li><strong>0xCDCDCDCD<\/strong><br \/>\nWird von der Debug-CRT verwendet um nicht initialisierten Speicher im Heap\u00a0zu kennzeichnen.<\/li>\n<li><strong>0xDDDDDDDD<\/strong><br \/>\nWird von der Debug-CRT verwendet um freigegebenen Speicher im Heap zu kennzeichnen.<\/li>\n<li><strong>0xFDFDFDFD<\/strong><br \/>\nWird von\u00a0vom Debug-Heap verwendet\u00a0f\u00fcr Guard Bytes (&#8222;no man&#8217;s land&#8220;), vor und hinter Speicherbl\u00f6cken.<\/li>\n<li><strong>0xFEEEFEEE<\/strong><br \/>\nWird von <em>HeapFree() <\/em>verwendet um freigegebenen Speicher zu kennzeichnen.<\/li>\n<\/ul>\n<p>Siehe auch: <a href=\"http:\/\/en.wikipedia.org\/wiki\/Magic_number_(programming\">http:\/\/en.wikipedia.org\/wiki\/Magic_number_(programming<\/a>)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In meine ersten Artikeln \u00fcber Heap-Bugs habe ich bereits erw\u00e4hnt, dass die CRT aber auch Windows selbst Speicher unter bestimmten Umst\u00e4nden vorbelegt bzw. beim Freigeben des Speichers mit einem festen Wert l\u00f6scht. F\u00fcr einen Entwickler ist es gut zu wissen welche Werte durch wen gesetzt werden. Zudem erleichtert einem dieses Wissen auch das Debuggen und &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2008\/11\/27\/vs-tipps-tricks-heap-bugs-finden-teil-4\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eVS Tipps &#038; Tricks: Heap Bugs finden (Teil 4)\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,19,11,3,2],"tags":[370,38,352,136,37,61],"class_list":["post-366","post","type-post","status-publish","format-standard","hentry","category-c","category-crt","category-debugging","category-programmieren","category-windows-api","tag-c","tag-debuggen","tag-mfc","tag-qualitaetssicherung","tag-vs-tippstricks","tag-winapi"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/366","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=366"}],"version-history":[{"count":1,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/366\/revisions"}],"predecessor-version":[{"id":368,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/366\/revisions\/368"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=366"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}