<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Paralliverse</title>
	<atom:link href="http://log0.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://log0.wordpress.com</link>
	<description></description>
	<lastBuildDate>Sun, 21 Dec 2008 09:46:33 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='log0.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/7d9b4541129a5bbe2627f24abb822ab8?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Paralliverse</title>
		<link>http://log0.wordpress.com</link>
	</image>
			<item>
		<title>onhacks.org &#8211; where I am</title>
		<link>http://log0.wordpress.com/2008/12/21/onhacks-org-where-i-am/</link>
		<comments>http://log0.wordpress.com/2008/12/21/onhacks-org-where-i-am/#comments</comments>
		<pubDate>Sun, 21 Dec 2008 09:46:33 +0000</pubDate>
		<dc:creator>log0</dc:creator>
				<category><![CDATA[Random Chatter]]></category>
		<category><![CDATA[Farewell]]></category>

		<guid isPermaLink="false">http://log0.wordpress.com/?p=183</guid>
		<description><![CDATA[It&#8217;s been great writing here and carving deep my knowledge to myself and hopefully, to you who came. And thanks a lot for those who have written comments and also sending email to me on ideas and improvements. =)
As some of you might know, this page is not readily accessible in China. Hence, I am [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=183&subd=log0&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>It&#8217;s been great writing here and carving deep my knowledge to myself and hopefully, to you who came. And thanks a lot for those who have written comments and also sending email to me on ideas and improvements. =)</p>
<p>As some of you might know, this page is not readily accessible in China. Hence, I am now moving to here :</p>
<p><a href="http://www.onhacks.org" target="_self">http://www.onhacks.org</a></p>
<p>Where I will write with in English, Traditional Chinese and Simplified Chinese covering various aspects in Security and also the security view in China.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/log0.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/log0.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/log0.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/log0.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/log0.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/log0.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/log0.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/log0.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/log0.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/log0.wordpress.com/183/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=183&subd=log0&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://log0.wordpress.com/2008/12/21/onhacks-org-where-i-am/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Log0</media:title>
		</media:content>
	</item>
		<item>
		<title>Some Good Stuffs to Read</title>
		<link>http://log0.wordpress.com/2008/12/09/some-good-stuffs-to-read/</link>
		<comments>http://log0.wordpress.com/2008/12/09/some-good-stuffs-to-read/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 01:42:30 +0000</pubDate>
		<dc:creator>log0</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Good Stuffs]]></category>

		<guid isPermaLink="false">http://log0.wordpress.com/?p=176</guid>
		<description><![CDATA[Well, these articles really enlighten you on matters, even if you know about them. I recommend them to my fellow knowledge-thirsty visitors to take a look at them.
Lookout.net &#8211; Chris Weber, specializes in Internationalized Software Security
Unicode attacks and test cases &#8211; Visual Spoofing, IDN homograph attacks, and the Confusables
Unicode attacks and test cases &#8211; Visual [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=176&subd=log0&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Well, these articles really enlighten you on matters, even if you know about them. I recommend them to my fellow knowledge-thirsty visitors to take a look at them.</p>
<p><a href="http://lookout.net" target="_self">Lookout.net</a> &#8211; Chris Weber, specializes in Internationalized Software Security</p>
<p><a title="Permanent Link to Unicode attacks and test cases - Visual Spoofing, IDN homograph attacks, and the Confusables" rel="bookmark" href="http://www.lookout.net/2008/11/29/unicode-attacks-and-test-cases-visual-spoofing-and-the-confusables/">Unicode attacks and test cases &#8211; Visual Spoofing, IDN homograph attacks, and the Confusables</a></p>
<p><a title="Permanent Link to Unicode attacks and test cases - Visual Spoofing, IDN homograph attacks, and the Single Script Confusables" rel="bookmark" href="http://www.lookout.net/2008/12/03/unicode-idn-homograph-attacks-and-test-cases-visual-spoofing-and-the-single-script-confusables/">Unicode attacks and test cases &#8211; Visual Spoofing, IDN homograph attacks, and the Single Script Confusables</a></p>
<p><a href="http://kuza55.blogspot.com" target="_self">Alex&#8217;s Corner</a> &#8211; Kuza55, specializes in webappsec.</p>
<p><a href="http://kuza55.blogspot.com/2008/02/racing-to-downgrade-users-to-cookie.html">Racing to downgrade users to cookie-less authentication</a></p>
<p><a href="http://kuza55.blogspot.com/2008/02/understanding-cookie-security.html">Understanding Cookie Security</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/log0.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/log0.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/log0.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/log0.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/log0.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/log0.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/log0.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/log0.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/log0.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/log0.wordpress.com/176/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=176&subd=log0&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://log0.wordpress.com/2008/12/09/some-good-stuffs-to-read/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Log0</media:title>
		</media:content>
	</item>
		<item>
		<title>First look on Cookies</title>
		<link>http://log0.wordpress.com/2008/12/08/first-look-on-cookies/</link>
		<comments>http://log0.wordpress.com/2008/12/08/first-look-on-cookies/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 09:21:25 +0000</pubDate>
		<dc:creator>log0</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[China]]></category>
		<category><![CDATA[WebAppSec]]></category>

		<guid isPermaLink="false">http://log0.wordpress.com/?p=160</guid>
		<description><![CDATA[
I wrote a simple script to set some cookies, and found some cute numbers on the maximum cookies to be set per domain name per path. The cookies are in the form of &#60;key&#62;=&#60;val&#62;, e.g. 1=1, 2=1, 3=1, 4=1. The length of the cookie name matters, as I found out.
Internet Explorer 7 &#8211; 20 cookies, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=160&subd=log0&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><img class="aligncenter size-full wp-image-163" title="cookie_monster" src="http://log0.files.wordpress.com/2008/12/cookie_monster.jpg?w=208&#038;h=225" alt="cookie_monster" width="208" height="225" /></p>
<p>I wrote a simple script to set some cookies, and found some cute numbers on the maximum cookies to be set per domain name per path. The cookies are in the form of &lt;key&gt;=&lt;val&gt;, e.g. 1=1, 2=1, 3=1, 4=1. The length of the cookie name matters, as I found out.</p>
<p style="padding-left:30px;"><strong>Internet Explorer 7</strong> &#8211; 20 cookies, maximum of 244 Set-Cookies per page.</p>
<p style="padding-left:30px;"><strong>Firefox 3</strong> &#8211; 50 cookies.</p>
<p style="padding-left:30px;"><strong>Safari 3</strong> &#8211; 1161 cookies, no limit of Set-cookies per page. See analysis below.</p>
<p style="padding-left:30px;"><strong>Opera 9</strong> &#8211; 30 cookies.</p>
<p style="padding-left:30px;"><strong>Chrome 0.4</strong> &#8211; 59~70 cookies, I have no idea why it is varying.</p>
<p style="padding-left:30px;"><strong>Tencent Traveller 2</strong> &#8211; 20 cookies, follows the behaviour of Internet Explorer 7.</p>
<p>Except Safari 3, all browsers have a limit on the number of cookies to be set. I guess Safari is using a link list for that. For most browsers, although the HTTP Response code is 200, they will report the page as cannot be displayed. However, for Safari, since it has no limit, when the cookie headers are too long ( &gt; 7619 ), Apache replies with a 400 Bad Request.</p>
<p>Haven&#8217;t think of any interesting tests yet, but feel free to discuss if there is anything we can do about them. By the way, I remember hotmail sets a whole lot of cookies, like BrowserSense and BS are just duplicates obviously (legacy code, yeehh!), I wonder are they hitting the limits soon? =)</p>
<p>The Tencent Traveller 2, as I will bet none of you outside of China will know about, is actually a browser in China that is built on top of IE7. Consider a GUI on top of IE7, and it even uses cookies of IE7, too. I have no idea of its adoption in China. Only after testing I realized I am using a very old version of it. I&#8217;ll see if there&#8217;s anything interesting in its newest version, 4.4.</p>
<p>So much for debugging last time. Let&#8217;s get back to the web. =P</p>
<p>&#8212;</p>
<p>Tencent Traveller &#8211; <a href="http://www.skycn.com/soft/14500.html" target="_self">http://www.skycn.com/soft/14500.html</a></p>
<p>RFC2109 &#8211; <a href="http://www.faqs.org/rfcs/rfc2109.html" target="_self">http://www.faqs.org/rfcs/rfc2109.html</a></p>
<p>RFC2965 &#8211; <a href="http://www.faqs.org/rfcs/rfc2965.html" target="_self">http://www.faqs.org/rfcs/rfc2965.html</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/log0.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/log0.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/log0.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/log0.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/log0.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/log0.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/log0.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/log0.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/log0.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/log0.wordpress.com/160/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=160&subd=log0&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://log0.wordpress.com/2008/12/08/first-look-on-cookies/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Log0</media:title>
		</media:content>

		<media:content url="http://log0.files.wordpress.com/2008/12/cookie_monster.jpg" medium="image">
			<media:title type="html">cookie_monster</media:title>
		</media:content>
	</item>
		<item>
		<title>How to debug a Stack Overflow for beginners?</title>
		<link>http://log0.wordpress.com/2008/12/05/how-to-debug-a-stack-overflow-for-beginners/</link>
		<comments>http://log0.wordpress.com/2008/12/05/how-to-debug-a-stack-overflow-for-beginners/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 09:21:03 +0000</pubDate>
		<dc:creator>log0</dc:creator>
				<category><![CDATA[Debugging]]></category>

		<guid isPermaLink="false">http://log0.wordpress.com/?p=96</guid>
		<description><![CDATA[How do you debug a stack overflow?
If you rarely touch debuggers, the above question will be difficult to answer, and if now you are faced with some cryptic failure and error codes. Awww.
Today I am going to share with you my experience in a powerful debugger called WinDBG. This is going to be a very [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=96&subd=log0&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>How do you debug a stack overflow?</p>
<p>If you rarely touch debuggers, the above question will be difficult to answer, and if now you are faced with some cryptic failure and error codes. Awww.</p>
<p>Today I am going to share with you my experience in a powerful debugger called <a href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx" target="_self">WinDBG</a>. This is going to be a very long journey. On we go!</p>
<p>===</p>
<h4>The Beginning</h4>
<p>The first step in dealing with whatever bugs, is find a solid way to reproduce the bug. If it cannot be reproduced, how can you prove it is gone when you fixed it? Absence of evidence does not imply evidence of absence! Since it is different for all bugs, find the steps to reproduce the bug now and come back.</p>
<p>Have you got it? Make sure you do. You really need it.</p>
<p>Let&#8217;s begin.</p>
<p>&#8212;</p>
<p>Start the faulting process and attach WinDBG to it. Supply the path to the right symbols, and source files if you feel need them. The symbol files are called PDB. Without symbols, you will have a very hard time doing debugging in general. With the right source, you can free yourself from looking into assembly. ( Note that source can be incorrect! Assembly does not lie. )</p>
<p>An example for the symbols path could be the Microsoft Symbol Server, and my own symbols :</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">srv*DownstreamStore*D:local_SymbolDownstreamStore*http://msdl.microsoft.com/download/symbols;<br />
D:\Symbols;</span></p>
<p>Now let&#8217;s download the symbols, /f for <a href="http://msdn.microsoft.com/en-us/library/cc266830.aspx" target="_self">reload</a> immediately. The DLL has embedded information and knows where to look for the PDB in the symbol server.</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">.reload /f</span></p>
<p>This will force all the modules to find their corresponding PDB symbols. It will take some time. The symbols will be cached at D:\local_SymbolDownstreamStore as specified above. Next time you do not need to wait that long.</p>
<p><a href="http://msdn.microsoft.com/en-us/library/cc266720.aspx" target="_self">List loaded modules</a>, no arguments for showing all of them. This shows all the DLLs that is loaded into memory so far. Before we start doing any debugging, we have to make sure if the modules we want to debug have the right symbols.</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">lm</span></p>
<p>If you are successful, you will see something like below :</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">01000000 012ac000   CrashingProgram   <span style="color:#ff0000;">(private pdb symbols)  D:\symbols\CrashingProgram.pdb</span></span></p>
<p>This means the symbols are not right :</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">10000000 100c8000   ws03res    <span style="color:#ff0000;">(no symbols)</span></span></p>
<p>Let&#8217;s <a href="http://msdn.microsoft.com/en-us/library/cc266754.aspx" target="_self">set a breakpoint on all first chance exceptions</a>, &#8220;*&#8221; for all of them. The breakpoint freezes the program so we can examine it.</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">sxe *</span></p>
<p>Let&#8217;s return the control flow back to the application.</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">g</span></p>
<p>It should show a little *BUSY* status. Now it is your job to reproduce the bug.</p>
<p>Reproduce the bug now.</p>
<p>&#8212;</p>
<h4>The Debug</h4>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">(9df4.4f7c): Stack overflow &#8211; code c00000fd (first/second chance not available)<br />
eax=0000c94a ebx=80000000 ecx=00d6389c edx=7ffb001c esi=00000104 edi=77f670e9<br />
eip=77d06628 esp=00d62fc0 ebp=00d63858 iopl=0         nv up ei pl nz na pe nc<br />
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010206<br />
oleaut32!LoadTypeLibEx+0&#215;13:<br />
77d06628 53              push    ebx</span></p>
<p>Got it? Good. WinDBG should have halted by now. And the *BUSY* is gone. The next step is optional : create a memory dump in case you need to bring the debugging elsewhere or do it later.</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">.dump /ma C:\memory.dmp</span></p>
<p>The flag /m is to <a href="http://msdn.microsoft.com/en-us/library/cc267445.aspx" target="_self">create a minidump</a>, and with &#8220;a&#8221; it is equivalent to &#8220;fFhut&#8221; as well, which effectively means dump everything out. Funny thing is that a mini dump is bigger than a full dump &#8211; legacy stuffs.</p>
<p>The first thing you do on a crash, is to <a href="http://msdn.microsoft.com/en-us/library/cc266909.aspx" target="_self">do the !analyze</a>, with -v as verbose. It will do all the grunt work to analyze the information for you and save you a lot of time.</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">!analyze -v</span></p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;"><br />
0:001&gt; !analyze -v<br />
*******************************************************************************<br />
*                                                                             *<br />
*                        Exception Analysis                                   *<br />
*                                                                             *<br />
*******************************************************************************<br />
</span><span style="color:#999999;font-family:courier new;font-size:12px;"><br />
FAULTING_IP:<br />
ole32!ModalLoop+5b [d:\nt\com\ole32\com\dcomrem\chancont.cxx @ 200]<br />
776c1d74 57              push    edi</span><span style="color:#999999;font-family:courier new;font-size:12px;"><br />
EXCEPTION_RECORD:  ffffffff &#8212; (.exr 0xffffffffffffffff)<br />
ExceptionAddress: 77d06628 (oleaut32!LoadTypeLibEx+0&#215;00000013)<br />
<span style="color:#ff0000;">ExceptionCode: c00000fd (Stack overflow)</span><br />
ExceptionFlags: 00000000<br />
NumberParameters: 2<br />
Parameter[0]: 00000001<br />
Parameter[1]: 00d62fbc<br />
</span><span style="color:#999999;font-family:courier new;font-size:12px;"><br />
BUGCHECK_STR:  c00000fd<br />
<span style="color:#ff0000;">DEFAULT_BUCKET_ID:  STATUS_STACKOVERFLOW</span><br />
PROCESS_NAME:  CrashingProgram.exe<br />
<span style="color:#ff0000;">ERROR_CODE: (NTSTATUS) 0xc00000fd &#8211; A new guard page for the stack cannot be created.</span><br />
RECURRING_STACK: From frames 0&#215;70 to 0&#215;98<br />
NTGLOBALFLAG:  0<br />
APPLICATION_VERIFIER_FLAGS:  0<br />
LAST_CONTROL_TRANSFER:  from 77d06c53 to 77d06628<br />
</span><span style="color:#999999;font-family:courier new;font-size:12px;"><br />
<span style="color:#ff0000;">STACK_COMMAND:  ~1s; .ecxr ; kb</span><br />
</span><span style="color:#999999;font-family:courier new;font-size:12px;"><br />
FOLLOWUP_IP:<br />
<span style="color:#ff0000;">CrashingProgram!_com_ptr_t&lt;_com_IIID&lt;CrashingServiceLib::IShared,&amp;_GUID_e55d5bc5_0eff_4ca9_ae3f_63f6203afe18&gt; &gt;::CreateInstance+3a [d:\l\src\sdk\inc\comip.h @ 516]</span><br />
010ab6ca 8945fc          mov     dword ptr [ebp-4],eax<br />
</span><span style="color:#999999;font-family:courier new;font-size:12px;"><br />
FAULTING_SOURCE_CODE:<br />
512:<br />
513:         if (dwClsContext &amp; (CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)) {<br />
514:             IUnknown* pIUnknown;<br />
515:<br />
&gt;  516:             hr = CoCreateInstance(rclsid, pOuter, dwClsContext, __uuidof(IUnknown), reinterpret_cast&lt;void**&gt;(&amp;pIUnknown));<br />
517:<br />
518:             if (FAILED(hr)) {<br />
519:                 return hr;<br />
520:             }<br />
521:<br />
</span><span style="color:#999999;font-family:courier new;font-size:12px;"><br />
SYMBOL_STACK_INDEX:  82<br />
FOLLOWUP_NAME:  MachineOwner<br />
MODULE_NAME: CrashingProgram<br />
IMAGE_NAME:  CrashingProgram.exe<br />
DEBUG_FLR_IMAGE_TIMESTAMP:  4937c905<br />
<span style="color:#ff0000;">FAULTING_THREAD:  00004f7c</span><br />
SYMBOL_NAME:  CrashingProgram!_com_ptr_t&lt;_com_IIID&lt;CrashingServiceLib::IShared,&amp;_GUID_e55d5bc5_0eff_4ca9_ae3f_63f6203afe18&gt; &gt;::CreateInstance+3a<br />
FAILURE_BUCKET_ID:  c00000fd_CrashingProgram!_com_ptr_t__com_IIID_CrashingServiceLib::IShared,__GUID_e55d5bc5_0eff_4ca9_ae3f_63f6203afe18___::CreateInstance+3a<br />
BUCKET_ID:  c00000fd_CrashingProgram!_com_ptr_t__com_IIID_CrashingServiceLib::IShared,__GUID_e55d5bc5_0eff_4ca9_ae3f_63f6203afe18___::CreateInstance+3a<br />
Followup: MachineOwner<br />
&#8212;&#8212;&#8212;<br />
</span></p>
<p style="color:#999999;font-family:courier new;font-size:12px;">
<p>We are concerned only with these :</p>
<p>FAULTING_IP &#8211; The CPU instruction to execute when the crash happens.</p>
<p>STACK_COMMAND &#8211; This gives us a short hand to get more information on the stack by executing it in WinDBG command prompt.</p>
<p>MODULE_NAME &#8211; The crashing module name in the executable.</p>
<p>IMAGE_NAME &#8211; The crashing module file name in the file system.</p>
<p>FAULTING_THREAD &#8211; The thread ID of the thread that is active at the moment of crash.</p>
<p>FAULTING_SOURCE_CODE &#8211; If you have the right source code and symbols, this can pinpoint the source code where the crash happens.</p>
<p>STACK_TEXT &#8211; If you have not the right source code, this gives you the idea what happened.</p>
<p>ERROR_CODE &#8211; The error code of the exception that caused this crash.</p>
<p>DEFAULT_BUCKET_ID &#8211; The category of the problem we experience.</p>
<p>We got a stack overflow &#8211; 0xc00000fd ( You can find that in ntstatus.h ). We also know that the faulting thread is 1. In the above, sometimes you might not get the source code but the STACK_TEXT instead. The STACK_TEXT is the stacktrace of the faulting thread. It is present when you do not have the source code. Manually, you can type ~&lt;thread number&gt;s where thread number is the thread you want to see. In this case, it is 1. You can use the STACK_COMMAND as supplied above by the analysis, ~1s; .ecxr ; kb ;.</p>
<p>Let&#8217;s <a href="http://msdn.microsoft.com/en-us/library/cc266588.aspx" target="_self">work on thread one</a>.</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">~1s</span></p>
<p><a href="http://msdn.microsoft.com/en-us/library/cc266788.aspx" target="_self">Display the exception context</a> for more information just in case. Registers do not lie too. =)</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">.ecxr</span></p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">0:001&gt; .ecxr<br />
eax=0000c94a ebx=80000000 ecx=00d6389c edx=7ffb001c esi=00000104 edi=77f670e9<br />
eip=77d06628 esp=00d62fc0 ebp=00d63858 iopl=0         nv up ei pl nz na pe nc<br />
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010206<br />
oleaut32!LoadTypeLibEx+0&#215;13:<br />
77d06628 53              push    ebx</span></p>
<p>Now <a href="http://msdn.microsoft.com/en-us/library/cc266725.aspx" target="_self">dump  the thread stack</a> , &#8220;kb&#8221; with arguments. Stack traces can be corrupted, do not trust them all.</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">kb</span></p>
<p>As we are doing a stack overflow debugging, we are probably using the whole of the stack reserves. Let&#8217;s see how much memory are we allowed by <a href="http://msdn.microsoft.com/en-us/library/cc266939.aspx" target="_self">dumping the Thread Environment Block (TEB)</a> :</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">!teb</span></p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">0:001&gt; !teb<br />
TEB at 7ffdc000<br />
ExceptionList:        00d63ca0<br />
<span style="color:#ff0000;">StackBase:            00da0000<br />
StackLimit:           00d61000</span><br />
SubSystemTib:         00000000<br />
FiberData:            00001e00<br />
ArbitraryUserPointer: 00000000<br />
Self:                 7ffdc000<br />
EnvironmentPointer:   00000000<br />
ClientId:             00009df4 . 00004f7c<br />
RpcHandle:            00000000<br />
Tls Storage:          00000000<br />
PEB Address:          7ffdf000<br />
LastErrorValue:       14007<br />
LastStatusValue:      0<br />
Count Owned Locks:    0<br />
HardErrorMode:        0</span></p>
<p>Ahhh, do you see the StackBase and StackLimit? Their difference is the stack reserve limit for this thread, note that this can be different for every other thread.  ( DA0000 &#8211; D61000 = 3F000 ) and you got 252kb roughly.</p>
<p>Now let&#8217;s dump all of those stack frames and see what we&#8217;ve got.</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">~*kb 0xffff</span></p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;"><br />
0:001&gt; ~1kb 0xffff<br />
ChildEBP RetAddr  Args to Child<br />
<span style="color:#ff0000;">00d63858</span> 77d06c53 00d638d4 00000000 00d6389c oleaut32!LoadTypeLibEx+0&#215;13 [</span><span style="color:#999999;font-family:courier new;font-size:12px;">(truncated)</span><span style="color:#999999;font-family:courier new;font-size:12px;">]<br />
00d6386c 77d0e9f8 00d638d4 00d6389c 07df2d4c oleaut32!LoadTypeLib+0&#215;12 [(truncated)]<br />
00d63c4c 77d0ed1b 07df2d4c 00d63c68 0012f070 oleaut32!GetTypeInfoOfIID+0&#215;371 [</span><span style="color:#999999;font-family:courier new;font-size:12px;">(truncated)</span><span style="color:#999999;font-family:courier new;font-size:12px;">]</span><br />
<span style="color:#999999;font-family:courier new;font-size:12px;">00d63c6c 7778d01b 07df2d38 07defd58 022117dc oleaut32!CUnivStubWrapper::Invoke+0&#215;7c [</span><span style="color:#999999;font-family:courier new;font-size:12px;">(truncated)</span><span style="color:#999999;font-family:courier new;font-size:12px;">]<br />
&#8230; ( truncated for clarity )</span><span style="color:#999999;font-family:courier new;font-size:12px;"><br />
00d9ffa4 77f65e91 00000001 000a142c 00000000 CrashingModule!CServiceModule::_ServiceMain+0&#215;57 [</span><span style="color:#999999;font-family:courier new;font-size:12px;">d:\l\src\CrashingProgram\CrashingServiceMain.cpp</span><span style="color:#999999;font-family:courier new;font-size:12px;"> @ 514]<br />
00d9ffb8 77e64829 000a1420 00000000 00000000 advapi32!ScSvcctrlThreadA+0&#215;21 [</span><span style="color:#999999;font-family:courier new;font-size:12px;">(truncated)</span><span style="color:#999999;font-family:courier new;font-size:12px;">]<br />
<span style="color:#ff0000;">00d9ffec</span> 00000000 77f65e70 000a1420 00000000 kernel32!BaseThreadStart+0&#215;34 [</span><span style="color:#999999;font-family:courier new;font-size:12px;">(truncated)</span><span style="color:#999999;font-family:courier new;font-size:12px;">]<br />
</span></p>
<p>The first column is the address in the stack. The second column is the return address. The third, forth and fifth column are the arguments to the function call. We are concerned with the first column and the top and bottom of the stack trace. Their difference gives the amount of memory used on the stack.</p>
<p>To calculate the amount of memory used, do a subtraction ( D9FFEC &#8211; D63858 = 3C794 ) and &#8230; 242kb. There we go! This thread is topping the limit of 252kb, and it seems it just hit the top. However, we still have to find out what caused this memory usage in the first place.</p>
<p>Phew!</p>
<p>&#8212;</p>
<h4><strong>The Cause</strong></h4>
<p>Now, we have to find out what is happening. Since the problem lies in using the whole stack memory. Let&#8217;s analyze the stack frames for any recursion. <a href="http://msdn.microsoft.com/en-us/library/cc267849.aspx" target="_self">According to WinDBG online help, it could be</a> :</p>
<ul type="disc">
<li>A thread uses the entire stack reserved for it. This is often caused by  infinite recursion.</li>
<li>A thread cannot extend the stack because the page file is maxed out, and  therefore no additional pages can be committed to extend the stack.</li>
<li>A thread cannot extend the stack because the system is within the brief  period used to extend the page file.</li>
</ul>
<p>For cause 1, infinite recursion, the crash can be exacerbated if you are allocating huge strings on the stack.</p>
<p>So. Let&#8217;s look into the full stack trace and see if there are any apparent recursions :</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">0:001&gt; ~1kb 0xffff<br />
00d652f8 010af822 01012b68 00000000 00000017 <span style="color:#ff0000;">CrashingProgram!_com_ptr_t&lt;_com_IIID&lt;CrashingServiceLib::IShared3,&amp;_GUID_e55d5bc5_0eff_4ca9_ae3f_63f6203afe18&gt; &gt;::CreateInstance+0&#215;3a [d:\l\src\sdk\inc\comip.h @ 516]</span><br />
00d65344 010adf2e 00bb93c8 6c3ba3d9 00d6540c CrashingProgram!CShared2::CreateShared3Service+0&#215;72 [d:\l\src\CrashingProgram\Shared2.cpp @ 958]<br />
00d65408 77c80193 00bb93cc 00d65618 02020202 CrashingProgram!CShared2::GetSettings+0&#215;15e [d:\l\src\CrashingProgram\Shared2.cpp @ 458]<br />
&#8230; (truncated for clarity)<br />
00d67178 77c80193 00bc2f80 00000018 00000001 CrashingProgram!CrashingProgram::SetHealthStatus+0&#215;84 [d:\l\src\CrashingProgram\CrashingService.cpp @ 13073]<br />
&#8230; (truncated for clarity)<br />
00d68c80 010af822 01012b68 00000000 00000017 <span style="color:#ff0000;">CrashingProgram!_com_ptr_t&lt;_com_IIID&lt;CrashingServiceLib::IShared3,&amp;_GUID_e55d5bc5_0eff_4ca9_ae3f_63f6203afe18&gt; &gt;::CreateInstance+0&#215;3a [d:\l\src\sdk\inc\comip.h @ 516]</span><br />
00d68ccc 010adf2e 00bc2658 6c3b7a41 00d68d94 CrashingProgram!CShared2::CreateShared3Service+0&#215;72 [d:\l\src\CrashingProgram\Shared2.cpp @ 958]<br />
00d68d90 77c80193 00bc265c 00d68fa0 02020202 CrashingProgram!CShared2::GetSettings+0&#215;15e [d:\l\src\CrashingProgram\Shared2.cpp @ 458]<br />
&#8230; (truncated for clarity)</span></p>
<p>I have truncated the above stack trace, which is about thousands of lines. There is a recurring CreateInstance in general. I counted there are 37 instances of it, and each of them uses about 6.8kb. ( 6.8kb * 37 = 251.6kb ) Boom!!!</p>
<p>Remember what we see above in the &#8220;!analyze -v&#8221; results?</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;"><span style="color:#ff0000;">CrashingProgram!_com_ptr_t&lt;_com_IIID&lt;CrashingServiceLib::IShared,&amp;_GUID_e55d5bc5_0eff_4ca9_ae3f_63f6203afe18&gt; &gt;::CreateInstance+3a [d:\l\src\sdk\inc\comip.h @ 516]</span></span></p>
<p>Ignore this paragraph : <span style="color:#999999;">After some studying, it turns out that the cause is that a COM Single-Threaded Apartment allows pre-emption if the main thread is performing an Out-of-proc call, which is a by-product of the Windows Message Loop. The official workaround is to use the IFilter and implement the whole thing yourself. YUCKS! Whatever, <a href="http://www.tech-archive.net/Archive/VC/microsoft.public.vc.atl/2005-02/0399.html" target="_self">that is the reason</a> to a program I&#8217;m working on. It might be different for you. </span></p>
<p>MACHINE BENT! ( This is a my native language slang for almost anything, in this case &#8220;Gotcha!&#8221; )</p>
<p>By the way, you can also check if this thread is specially allocated only 252kb of stack reserve, or it is a executable limit. Let&#8217;s dump the executable headers information. The generic command is &#8220;<a href="http://msdn.microsoft.com/en-us/library/cc266895.aspx" target="_self">dh &lt;module start addr&gt;</a>&#8221; :</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;">!dh 01000000|CrashingProgram.exe -f</span></p>
<p>252 kb for stack reserves. I got the 01000000 from the &#8220;lm&#8221; command above. The two hex numbers are starting address and ending address of the loaded code :</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;"><span style="color:#ff0000;">01000000</span> 012ac000   CrashingProgram   (private pdb symbols)  D:\symbols\CrashingProgram.pdb</span></p>
<p>Then scroll down to the headers, in this case it is  :</p>
<p style="padding-left:30px;"><span style="color:#999999;font-family:courier new;font-size:12px;"><span style="color:#ff0000;">00040000 size of stack reserve</span><br />
00002000 size of stack commit<br />
00100000 size of heap reserve<br />
00001000 size of heap commit</span></p>
<p>That is pathetically small, <a href="http://msdn.microsoft.com/en-us/library/ms686774(VS.85).aspx" target="_self">MSDN says that the operating system default is rounded up to the nearest multiple of 1MB per stack</a>. However, it seems the compiler of this executable imposed their own limits in this case.</p>
<p>&#8212;</p>
<h4>The Words</h4>
<p>Wow! That&#8217;s all for such a boring tutorial. I removed some information from the stacktraces above, though I believe the information above is adequate for your understanding. I hope you find this article helpful for bootstrapping your debugging experience, as it can be very fun.</p>
<p>If you know where I am doing badly, remember to tell me as I am &#8230; a beginner! ( Hey! I am a web application security dude! )</p>
<p>===</p>
<p>Resources :</p>
<p>WinDBG help online &#8211; <a href="http://msdn.microsoft.com/en-us/library/cc267445.aspx" target="_self">http://msdn.microsoft.com/en-us/library/cc267445.aspx</a></p>
<p>Thread Stack Size &#8211; <a href="http://msdn.microsoft.com/en-us/library/ms686774(VS.85).aspx" target="_self">http://msdn.microsoft.com/en-us/library/ms686774(VS.85).aspx</a></p>
<p>Crash Dump Analysis &#8211; <a href="http://www.dumpanalysis.org/blog/" target="_self">http://www.dumpanalysis.org/blog/</a></p>
<p>Advanced Windows Debugging &#8211; <a href="http://www.amazon.com/Advanced-Debugging-Addison-Wesley-Microsoft-Technology/dp/0321374460" target="_self">http://www.amazon.com/Advanced-Debugging-Addison-Wesley-Microsoft-Technology/dp/0321374460</a></p>
<p>Windows Internals &#8211; <a href="http://www.amazon.com/Microsoft-Windows-Internals-4th-Server/dp/0735619174/" target="_self">http://www.amazon.com/Microsoft-Windows-Internals-4th-Server/dp/0735619174/</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/log0.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/log0.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/log0.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/log0.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/log0.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/log0.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/log0.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/log0.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/log0.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/log0.wordpress.com/96/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=96&subd=log0&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://log0.wordpress.com/2008/12/05/how-to-debug-a-stack-overflow-for-beginners/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Log0</media:title>
		</media:content>
	</item>
		<item>
		<title>I am NOT dead.</title>
		<link>http://log0.wordpress.com/2008/12/04/i-am-not-dead/</link>
		<comments>http://log0.wordpress.com/2008/12/04/i-am-not-dead/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 17:21:03 +0000</pubDate>
		<dc:creator>log0</dc:creator>
				<category><![CDATA[Random Chatter]]></category>

		<guid isPermaLink="false">http://log0.wordpress.com/?p=94</guid>
		<description><![CDATA[I know I look like I&#8217;m dead and abandoning this place
Nah.
I am just too busy last month on life matters and so, and I nearly got killed by the food in China, and now I am going to come back on track!
And I might be moving my blog once again, because my China friends aren&#8217;t [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=94&subd=log0&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I know I look like I&#8217;m dead and abandoning this place</p>
<p>Nah.</p>
<p>I am just too busy last month on life matters and so, and I nearly got killed by the food in China, and now I am going to come back on track!<br />
And I might be moving my blog once again, because my China friends aren&#8217;t making to this webpage. So sad. Anyway, I am having my next post ready, with images!</p>
<p><strong>Upcoming next : <a href="http://log0.wordpress.com/2008/12/05/how-to-debug-a-stack-overflow-for-beginners/" target="_self">How to debug a Stack Overflow for beginners</a>.</strong></p>
<p>(updated the link above)</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/log0.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/log0.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/log0.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/log0.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/log0.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/log0.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/log0.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/log0.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/log0.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/log0.wordpress.com/94/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=94&subd=log0&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://log0.wordpress.com/2008/12/04/i-am-not-dead/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Log0</media:title>
		</media:content>
	</item>
		<item>
		<title>Basics of The Integer in the Binary World</title>
		<link>http://log0.wordpress.com/2008/10/24/basics-of-integer-in-binary/</link>
		<comments>http://log0.wordpress.com/2008/10/24/basics-of-integer-in-binary/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 12:43:28 +0000</pubDate>
		<dc:creator>log0</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Integer Overflow]]></category>

		<guid isPermaLink="false">http://log0.wordpress.com/?p=76</guid>
		<description><![CDATA[Talking about overflows, Tom in my previous post mentioned -(-x) != x problem. Precisely, -(2^31) * -1 != 2^31 . What happened?
To understand this, we must understand how integers work in the reality and the binary world.
In reality, integers form a countably infinite set [1]. They have no upper or lower limits. So, in our [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=76&subd=log0&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Talking about overflows, Tom in my previous post mentioned -(-x) != x problem. Precisely, -(2^31) * -1 != 2^31 . What happened?</p>
<p>To understand this, we must understand how integers work in the reality and the binary world.</p>
<p>In reality, integers form a countably infinite set [1]. They have no upper or lower limits. So, in our mind, we can visualize it this way :</p>
<p style="text-align:center;"><a href="http://log0.files.wordpress.com/2008/10/overflow11.jpg"><img class="size-full wp-image-79 aligncenter" title="overflow1" src="http://log0.files.wordpress.com/2008/10/overflow11.jpg?w=500&#038;h=43" alt="" width="500" height="43" /></a></p>
<p>The line expands forever to the left and forever to the right.</p>
<p>In the binary world, this is another story. For an integer, we have only 4 bytes ( 32 bits ). By nature, an integer can only represent as many as 2^32 = 4294967296 values. Which means, integers in computers cannot represent the countably infinite nature of integers as in reality. Once the limits are exceeded, it wraps around. Like a wheel :</p>
<p><a href="http://log0.files.wordpress.com/2008/10/overflow21.jpg"><img class="aligncenter size-full wp-image-81" title="overflow21" src="http://log0.files.wordpress.com/2008/10/overflow21.jpg?w=388&#038;h=330" alt="" width="388" height="330" /></a></p>
<p>As you can see, if you subtract 1 from -2147483648 (-2^31), the integer in binary world no longer behaves in what we believe.</p>
<p>(-2^31) &#8211; 1<br />
= -214783648 &#8211; 1<br />
= +2147483647</p>
<p>Notice that overflowing by subtracting 1 from -(2^31) does not yield (2^31) but (2^31-1). Why? Because 0 is also a value in integer, and thus requires one representation as well. Now there are only (2^32-1) choices left, and so the positive value of -(2^31) is now missing.</p>
<p>That is what Tom is talking about. Since the positive of -(2^31) cannot be represented, -(-(2^31)) = -(2^31).</p>
<p>This goes the same for :</p>
<p>-(2^31) * -1 = -(2^31)<br />
-(2^31) / -1 = -(2^31)</p>
<p>The following code compiling in VC++ demonstrates :</p>
<pre>#include &lt;cstdio&gt;
#include &lt;climits&gt;

int main()
{
	printf("%12s\t%12s\t%12s\t%12s\t%12s\n","x","-x","x*-1","x/-1","x-1");
	for ( int i=0; i&lt;10; ++i )
	{
		int x = INT_MIN+i;
		printf("%12d\t%12d\t%12d\t%12d\t%12d\n",x,-x,x*-1,x/-1,x-1);
	}
	return 0;
}</pre>
<p>The output of the program is :</p>
<pre>           x              -x            x*-1            x/-1             x-1
 -2147483648     -2147483648     -2147483648     -2147483648      2147483647
 -2147483647      2147483647      2147483647      2147483647     -2147483648
 -2147483646      2147483646      2147483646      2147483646     -2147483647
 -2147483645      2147483645      2147483645      2147483645     -2147483646
 -2147483644      2147483644      2147483644      2147483644     -2147483645
 -2147483643      2147483643      2147483643      2147483643     -2147483644
 -2147483642      2147483642      2147483642      2147483642     -2147483643
 -2147483641      2147483641      2147483641      2147483641     -2147483642
 -2147483640      2147483640      2147483640      2147483640     -2147483641
 -2147483639      2147483639      2147483639      2147483639     -2147483640</pre>
<p>Look carefully at the 1st line. -2147483648 is -(2^31), our number of interest.</p>
<p>This is the basics of integer overflow problems, and I hope you have learned more about how integers work.</p>
<p>&#8212;</p>
<p>References :</p>
<p>[1] http://en.wikipedia.org/wiki/Integers</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/log0.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/log0.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/log0.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/log0.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/log0.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/log0.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/log0.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/log0.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/log0.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/log0.wordpress.com/76/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=76&subd=log0&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://log0.wordpress.com/2008/10/24/basics-of-integer-in-binary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Log0</media:title>
		</media:content>

		<media:content url="http://log0.files.wordpress.com/2008/10/overflow11.jpg" medium="image">
			<media:title type="html">overflow1</media:title>
		</media:content>

		<media:content url="http://log0.files.wordpress.com/2008/10/overflow21.jpg" medium="image">
			<media:title type="html">overflow21</media:title>
		</media:content>
	</item>
		<item>
		<title>Do Not Detect Overflow With Overflow</title>
		<link>http://log0.wordpress.com/2008/10/13/do-not-detect-overflow-with-overflow/</link>
		<comments>http://log0.wordpress.com/2008/10/13/do-not-detect-overflow-with-overflow/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 07:33:52 +0000</pubDate>
		<dc:creator>log0</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Vulnerability]]></category>
		<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://log0.wordpress.com/?p=66</guid>
		<description><![CDATA[Credits to a gweilo for the sharing below.
Integer overflow and underflow manifest themselves as vulnerabilities. Here is an overflow bug fired by Sir BugFinder. I assigned our fictional developer Sir FastFix ownership of the bug, and he jumped into the code straight.
First, look at this problematic pseudo-code snippet below :
SWORD param = 0;

while ( flag [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=66&subd=log0&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Credits to a <a href="http://en.wikipedia.org/wiki/Gwailo">gweilo</a> for the sharing below.</p>
<p>Integer overflow and underflow manifest themselves as vulnerabilities. Here is an overflow bug fired by Sir BugFinder. I assigned our fictional developer Sir FastFix ownership of the bug, and he jumped into the code straight.</p>
<p>First, look at this problematic pseudo-code snippet below :</p>
<pre>SWORD param = 0;

while ( flag )
{
	param ++ ;
	//
	//manipulate the flag value...
	//
}

buffer = malloc(sizeof(BYTE) * param);
...</pre>
<p>The param can increase definitely. No good. Sir FastFix quickly identifies the problem and sends me this code review below.</p>
<pre>// sirfastfix: now uses unsigned.
UWORD param = 0;

while ( flag )
{
	// sirfastfix: code fix for overflow bug.
	if ( param &gt; param + 1 )
	{
		TRACE_ERROR("Overflow occurred at param\n");
		return E_UNEXPECTED;
	}
	param ++ ;
	//
	//manipulate the flag value...
	//
}

buffer = malloc(sizeof(BYTE) * param);
...</pre>
<p>Now, I have to review it. Let&#8217;s look at the changes.</p>
<ol>
<li>param is now checked with the condition (param &gt; param + 1). Since it must be false, an overflow must have occurred if it is true. Intuitive.</li>
<li>param is now unsigned using UWORD, and not signed SWORD. I find no reasons for negative buffers. A good move.</li>
</ol>
<p>But, something smells stinky. Let&#8217;s think again.</p>
<ol>
<li>Why not use well-defined constants like MAX_INT, MAX_SHORT or MAX_LONG constants to check before incrementing param? Like MAX_INT &#8211; a &lt; b ?</li>
<li>Why the code to detect overflow is using yet another overflow to check?</li>
</ol>
<p>Sir FastFix, I am not approving this code check-in. This fix is not going in anywhere into the source tree. Who knows what this overflow to check overflow can result in? Let&#8217;s write more solid and not college quality code, and not rushing to resolve the bug.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/log0.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/log0.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/log0.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/log0.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/log0.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/log0.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/log0.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/log0.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/log0.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/log0.wordpress.com/66/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=66&subd=log0&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://log0.wordpress.com/2008/10/13/do-not-detect-overflow-with-overflow/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Log0</media:title>
		</media:content>
	</item>
		<item>
		<title>China is a Good Place to Pen Test</title>
		<link>http://log0.wordpress.com/2008/09/29/pen-test-china/</link>
		<comments>http://log0.wordpress.com/2008/09/29/pen-test-china/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 05:06:23 +0000</pubDate>
		<dc:creator>log0</dc:creator>
				<category><![CDATA[China]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Vulnerability]]></category>
		<category><![CDATA[WebAppSec]]></category>

		<guid isPermaLink="false">http://log0.wordpress.com/?p=61</guid>
		<description><![CDATA[
In the midst of crazy work, I breezed through certain websites and randomly injected some simple attack vectors over this month in China. I found several large sites that are vulnerable to XSS and SQL Injection.
Large sites including DangDang, Sina China, Sogou, Baidu, some of them fixed the problems after emailing them or maybe after [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=61&subd=log0&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:center;"><a href="http://log0.files.wordpress.com/2008/09/holes1.jpg"><img class="aligncenter size-medium wp-image-63" title="holes1" src="http://log0.files.wordpress.com/2008/09/holes1.jpg?w=300&#038;h=225" alt="" width="300" height="225" /></a></p>
<p>In the midst of crazy work, I breezed through certain websites and randomly injected some simple attack vectors over this month in China. I found several large sites that are vulnerable to XSS and SQL Injection.</p>
<p>Large sites including DangDang, Sina China, Sogou, Baidu, some of them fixed the problems after emailing them or maybe after reading the logs, too. However, the SQL Injection in DangDang remains unfixed and that is not good. I will not disclose here though ( you can certainly find it easily. It is just simple and buggy. )</p>
<p>To give you an idea of how big the sites above are relative to China, here are some analogies :</p>
<p><a href="http://www.dangdang.com" target="_self">DangDang</a> &#8211; Amazon</p>
<p><a href="http://www.sina.com.cn" target="_self">Sina China</a> &#8211; Yahoo! News</p>
<p><a href="http://www.sogou.com" target="_self">Sogou</a> &#8211; Ask.com</p>
<p><a href="http://www.baidu.com" target="_self">Baidu</a> &#8211; Google ( bonus, Baidu beats Google in China )</p>
<p>I guess I will have to find more time to play with these sites to look for more holes. But for now, I have tons of work piling up. Ouch. I have vacation today, in office.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/log0.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/log0.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/log0.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/log0.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/log0.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/log0.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/log0.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/log0.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/log0.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/log0.wordpress.com/61/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=61&subd=log0&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://log0.wordpress.com/2008/09/29/pen-test-china/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Log0</media:title>
		</media:content>

		<media:content url="http://log0.files.wordpress.com/2008/09/holes1.jpg?w=300" medium="image">
			<media:title type="html">holes1</media:title>
		</media:content>
	</item>
		<item>
		<title>More About the Characters Causing XSS in Opera</title>
		<link>http://log0.wordpress.com/2008/09/17/xss-characters-in-opera/</link>
		<comments>http://log0.wordpress.com/2008/09/17/xss-characters-in-opera/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 16:35:14 +0000</pubDate>
		<dc:creator>log0</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Vulnerability]]></category>
		<category><![CDATA[WebAppSec]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://log0.wordpress.com/?p=55</guid>
		<description><![CDATA[I talked about an XSS in Opera 9.51 as discovered by Chris Weber [1]. I talked with Chris and he hinted me something about the character encoding, which I certainly have little concept about it, and I found out why it is happening.
Except U+180E, U+180F, they are all associated with spaces ( The Zs, Zl, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=55&subd=log0&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I talked about an XSS in Opera 9.51 as discovered by Chris Weber [1]. I talked with Chris and he hinted me something about the character encoding, which I certainly have little concept about it, and I found out why it is happening.</p>
<p>Except U+180E, U+180F, they are all associated with spaces ( The Zs, Zl, Zp categories ) [2] [3]. In fact :</p>
<blockquote><p><span style="color:#999999;">U+2028 &#8211; Line separator in unicode 3.0<br />
U+2029 &#8211; Paragraph separator in unicode 3.0</span></p></blockquote>
<p>Different kind of spaces in unicode :</p>
<blockquote><p><span style="color:#999999;">U+00A0<br />
U+1680<br />
U+2000 to U+200A<br />
U+202F<br />
U+205F<br />
U+3000</span></p></blockquote>
<p>U+180E is a Mongolian Vowel Separator character [4], and U+180F is a non-existent character. Somehow U+180E fall into the Space Separator category as well. For U+180F, I really have no idea how it happened. If you know what is happening, I really appreciate your sharing.</p>
<p>Well, quite a good lesson on international character sets, no? I really recommend Chris Weber&#8217;s blog [5] because it contains a lot of information on character encoding and web application security that you should not miss it out.</p>
<p>&#8212;</p>
<p>References :</p>
<p>[1] &#8211; <a href="http://lookout.net/2008/08/26/advisory-attack-of-the-mongolian-space-evaders-and-other-medieval-xss-vectors/" target="_self">http://lookout.net/2008/08/26/advisory-attack-of-the-mongolian-space-evaders-and-other-medieval-xss-vectors/</a><br />
[2] &#8211; <a href="http://srfi.schemers.org/srfi-14/srfi-14.html" target="_self">http://srfi.schemers.org/srfi-14/srfi-14.html</a><br />
[3] &#8211; <a href="http://msdn.microsoft.com/en-us/library/ms776456(VS.85).aspx" target="_self">http://msdn.microsoft.com/en-us/library/ms776456(VS.85).aspx</a><br />
[4] &#8211; <a href="http://unicode.org/cldr/utility/character.jsp?a=180E" target="_self">http://unicode.org/cldr/utility/character.jsp?a=180E</a><br />
[5] &#8211; <a href="http://lookout.net/" target="_self">http://lookout.net/</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/log0.wordpress.com/55/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/log0.wordpress.com/55/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/log0.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/log0.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/log0.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/log0.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/log0.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/log0.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/log0.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/log0.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/log0.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/log0.wordpress.com/55/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=55&subd=log0&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://log0.wordpress.com/2008/09/17/xss-characters-in-opera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Log0</media:title>
		</media:content>
	</item>
		<item>
		<title>My Performance Test on Browsers</title>
		<link>http://log0.wordpress.com/2008/09/17/my-performance-test-on-browsers/</link>
		<comments>http://log0.wordpress.com/2008/09/17/my-performance-test-on-browsers/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 11:12:53 +0000</pubDate>
		<dc:creator>log0</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://log0.wordpress.com/?p=50</guid>
		<description><![CDATA[While playing with browsers last time on character encoding issues, I timed every browser loading 10000 non-existent image tags. As you may have guessed, the script is this :
&#60;img src=non-existent&#38;onerror=alert(1) /&#62;
Notice that the javascript is rarely involved unless the exploit succeeded. So for almost all the cases only the image tag is involved, and not [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=50&subd=log0&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>While playing with browsers last time on character encoding issues, I timed every browser loading 10000 non-existent image tags. As you may have guessed, the script is this :</p>
<blockquote><p><span style="color:#999999;">&lt;img src=non-existent&amp;onerror=alert(1) /&gt;</span></p></blockquote>
<p>Notice that the javascript is rarely involved unless the exploit succeeded. So for almost all the cases only the image tag is involved, and not the Javascript Engine.</p>
<p>The test is conducted on a VMWare Windows XP Single Core 2 GHz CPU with 256 RAM. A poor specification but nonetheless helps to magnify the problems in within.</p>
<p>With 10000 image tags on a single page, the test is conducted without closing the browser process for 6 iterations so as to capture possible memory leaks and consistent results. The results is as follows :</p>
<table style="text-align:center;" border="1" width="500">
<thead>
<tr>
<td>Browser name</td>
<td colspan="6">Time (seconds)</td>
</tr>
</thead>
<tbody>
<tr>
<td>Opera 9</td>
<td>61.2</td>
<td>90.9</td>
<td>44.2</td>
<td>54.5</td>
<td>47.2</td>
<td>58.2</td>
</tr>
<tr>
<td>Chrome 0.2</td>
<td>102.6</td>
<td>120.3</td>
<td>109.6</td>
<td>122.9</td>
<td>N/A</td>
<td>N/A</td>
</tr>
<tr>
<td>Firefox 3</td>
<td>41.8</td>
<td>50.1</td>
<td>45.1</td>
<td>52.1</td>
<td>57.4</td>
<td>66.6</td>
</tr>
<tr>
<td>Internet Explorer 7</td>
<td>9.2</td>
<td>8.3</td>
<td>8.8</td>
<td>8.0</td>
<td>8.5</td>
<td>8.9</td>
</tr>
<tr>
<td>Safari 3</td>
<td>84.2</td>
<td>79.0</td>
<td>138.4</td>
<td>352.6</td>
<td>(&gt;900)*</td>
<td>N/A</td>
</tr>
</tbody>
</table>
<p>* &#8211; Safari 3 only executed 3/4 of the scripts after 900 seconds, and was terminated because it is too slow.</p>
<p><strong>Opera 9</strong> &#8211; It scores consistently at about 50 seconds except for the 2nd iteration, which is quite good for 10000 tags. At such a poor specification, it is very responsive although it is heavily loaded.</p>
<p><strong>Chrome 0.2</strong> &#8211; It is slow at some 110 seconds, and scores consistently bad. The browser also literally hung and remains unusable during the load. As it is a beta, I am sure they will improve in time.</p>
<p><strong>Firefox 3</strong> &#8211; Fast at 50 seconds, but seems to have a slowing trend, could be caused by memory problems although formal memory profiling suggests otherwise [1]. Facts are facts. Overall experience is very responsive despite the heavy load.</p>
<p><strong>Internet Explorer 7</strong> &#8211; 8 seconds. Internet Explorer 7 seems to perform very well on such failing image tags, scoring consistently over the 6 iterations, and no signs of memory leakage. Probably optimizations are behind the scenes.</p>
<p><strong>Safari 3</strong> &#8211; An obvious growing trend from 80 seconds to exceeding 300 seconds, and took 900 seconds just to execute about 7500 of the image tags in the page at the 5th iteration. Obvious memory leakage and other problems are behind. The browser stays responsive, but its crawling speed is making it unusable.</p>
<p><strong>Conclusion :</strong></p>
<p>It seems to me the worst browser seems to be Safari here. If a formal performance test is conducted on such browsers, it may tell a lot more. But meanwhile, I do not have a reason to use Safari unless I want to test any new Carpet Bombing. =) Firefox 3 is still the road to go! And in China, inevitably the IE7 as well.</p>
<p>This is not a formal performance test and the test case consists of just a single type of script. I am just magnifying the case when a page has more images and seeing what are the capabilities of the browser is. I think IE7 should really get rid of that odd loading at the start of the browser, and maybe it can help pull back the users from Firefox 3.</p>
<p>&#8212;</p>
<p>References :</p>
<p>[1] <a href="http://blog.pavlov.net/2008/03/11/firefox-3-memory-usage/" target="_self">http://blog.pavlov.net/2008/03/11/firefox-3-memory-usage/</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/log0.wordpress.com/50/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/log0.wordpress.com/50/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/log0.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/log0.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/log0.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/log0.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/log0.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/log0.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/log0.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/log0.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/log0.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/log0.wordpress.com/50/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=log0.wordpress.com&blog=2508135&post=50&subd=log0&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://log0.wordpress.com/2008/09/17/my-performance-test-on-browsers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Log0</media:title>
		</media:content>
	</item>
	</channel>
</rss>