<?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/"
	>

<channel>
	<title>Mandelbrot89&#39;s blog</title>
	<atom:link href="http://mandelbrot89.appspot.com/feed" rel="self" type="application/rss+xml" />
	<link>http://mandelbrot89.appspot.com</link>
	<description>This is mandelbrot89‘s blog</description>
	<lastBuildDate>Tue, 01 Nov 2011 23:08:03 +0000</lastBuildDate>
	<language>zh-cn</language>
	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>Micolog-Python 0.7</generator>
		<item>
		<title>无题</title>
		<link>http://mandelbrot89.appspot.com/2011/11/1/2011_11_2.html</link>
		<comments>http://mandelbrot89.appspot.com/2011/11/1/2011_11_2.html#comments</comments>
		<pubDate>Tue, 01 Nov 2011 23:08:03 +0000</pubDate>
		<dc:creator>zhengxin.89</dc:creator>
				<category><![CDATA[2011年11月 ]]></category>


		<guid isPermaLink="false">http://mandelbrot89.appspot.com/?p=169001</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>自从gae被墙后,基本很少很少上来写东西,由于墙,我竟可以有一片他人很少能接触到的属于自己的田地,有点讽刺的感觉.</p>
<p>毕业之季,多事之秋.</p>

<h4>相关阅读</h4>
<ul>
    
    <li><a href="http://mandelbrot89.appspot.com/2011/05/27/2011_5_26.html">谈话记</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2011/02/6/2011_0126.html">所思所想</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2010/12/21/2010_12_21.html">技术·大学</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2010/08/31/0901.html">初恋的感觉</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2010/07/23/0723.html">搬宿舍</a></li>
    
</ul>
<p>本文网址:<a href="http://mandelbrot89.appspot.com/2011/11/1/2011_11_2.html">http://mandelbrot89.appspot.com/2011/11/1/2011_11_2.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://feeds.feedburner.com/http/mandelbrot89appspotcom/feed/comments</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item><item>
		<title>谈话记</title>
		<link>http://mandelbrot89.appspot.com/2011/05/27/2011_5_26.html</link>
		<comments>http://mandelbrot89.appspot.com/2011/05/27/2011_5_26.html#comments</comments>
		<pubDate>Fri, 27 May 2011 04:48:41 +0000</pubDate>
		<dc:creator>zhengxin.89</dc:creator>
				<category><![CDATA[2011年5月 ]]></category>


		<guid isPermaLink="false">http://mandelbrot89.appspot.com/?p=156001</guid>
		<description><![CDATA[5月25号，我被金山西山居告知，通过了西山居在学校的笔试，叫我在早上过去公司面试。于是早上我跟我另外两个同学一起过去西山居，9点半达到公司，大概11点半面试完，然后我们几人又跑去M记吃了午餐，吃饱饭足坐公车回学校。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;公车驶往学校的半路上，突然家里来了电话，我想当然的以为是家里人想知道我面试的结果。电话那边是我姐接的电话，我姐说：“弟，是你吗？有人想跟你说几句话，你等等。”听语气我觉得我姐今天语气有点不大寻常。]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>5月25号，我被金山西山居告知，通过了西山居在学校的笔试，叫我在早上过去公司面试。于是早上我跟我另外两个同学一起过去西山居，9点半达到公司，大概11点半面试完，然后我们几人又跑去M记吃了午餐，吃饱饭足坐公车回学校。</p>
<p>公车驶往学校的半路上，突然家里来了电话，我想当然的以为是家里人想知道我面试的结果。电话那边是我姐接的电话，我姐说：&ldquo;弟，是你吗？有人想跟你说几句话，你等等。&rdquo;听语气我觉得我姐今天语气有点不大寻常。</p>
<p>于是那人开始跟我讲话了，他问，你的名字是不是XX？</p>
<p>我说是，怎么了？</p>
<p>他说，你上次寒假回学校是什么时候？</p>
<p>我怎么会记得我什么时候回学校，于是我说我不记得了。</p>
<p>他说，你想清楚点，是13号还是14号？</p>
<p>我说，那应该是13号吧，我不是记得很清楚。我开始觉得有点点不妥，但我说不出是哪里不对劲，直到他下面一句话，我才马上意识到家里发生什么事了。</p>
<p>他说，你是不是在家里用过自由门？</p>
<p>我说，自由门？</p>
<p>他一口就咬定我是用过自由门的了，然后说，你用自由门来干什么？</p>
<p>我不知他为什么会知道我用自由门，为什么会找到我家，他是如何找到我的，其实我从这里学到一些东西，就是对方一口咬定你时，你可以承认，但一定不能坦白，因为你不知对方究竟知道多少，你应该反过来试探他，试探他究竟是如何找到你的，他找你的目的是什么。</p>
<p>但我那时反应不过来，我真的很老实，我完全没说假话，我说，因为我读的是计算机专业，所以我们很多时候需要上很多技术论坛，但是网站我们都访问不了，所以我只能使用自由门来访问这些资源。</p>
<p>他说，你都上什么网站？</p>
<p>我说，比如说我们专业的一个计算机语言，就需要使用这个软件来访问。</p>
<p>他说，这个不说，你是不是经常上自由门上面那些网站？</p>
<p>我说，没有啊，我不上那些网站的，我只是用来当工具下载我们需要的那些学习资源。</p>
<p>老实讲我并没说假话，我真的觉得动态网上面的内容实在是喜欢不来，可能有客观的，但是我有其他获得咨询的途径，不需要动态网上面的网站。</p>
<p>他说，那你知道秘密树洞不？</p>
<p>于是我终于意识到，他想从我这知道什么了。翻墙并不是主要目的。</p>
<p>我说，我不知道啊。</p>
<p>他说，你别给我装，你知道秘密树洞不？</p>
<p>当时我有点懵了，其实我应该一口咬定我不知道，不管他问你什么，你应该一口咬定，而且坚决地说你不知道，我想，只有这样的话，你才能知道，究竟他知道你些什么。</p>
<p>我说，我知道，但是我从没用过，我只知道有这个东西而已。</p>
<p>他说，你从哪里知道的？</p>
<p>我说，像微博啊，上面都就有类似的秘密树洞。</p>
<p>当时我想，你他妈的讲话那么不干脆，问个话都要绕圈子。</p>
<p>然后他说，你的自由门软件都装在哪了？</p>
<p>我说，我一般都放在桌面上，有的话就只有那里有了。</p>
<p>然后突然电话给了其他人听，那是我舅，我舅在派出所工作。</p>
<p>我舅跟我说，XX啊（我小名），刚才啊什么什么书记，（具体我不是很记得了）刚才跟你说的你听到了吧，以后你就别使用这个软件了，还有，在学校有用的话，也要记得删除掉，知道不？</p>
<p>我只能恩恩地答应着。</p>
<p>故事的发生大概就是这样。</p>
<p>我觉得实际上这并能不算真正意义上的喝茶。这个电话过后，我妈，我爸，连续打了我好几个电话。我问我妈究竟是怎么回事。我妈说今天早上家里突然接到个电话，然后硬是跟我姐说我姐用过什么自由门，我姐听得不知所云。然后他说，叫你爸直接过来派出所，我全家吓到要死，以为犯了什么事。我爸到了派出所，问他究竟是什么事，那王八蛋不说是什么事，就说你就在这等着，后来我爸实在没办法，才叫了我舅，了解情况后大概知道怎么一回事，于是派了两个警察到我家，查看我的电脑。我妈说，还好是有你舅，不然的话，他说一定要叫你回来，当面把事情说清楚。我可以想象，我父母有多紧张。我妈说，哎，为了你这事，我们整个下午都没吃饭，你爸在派出所按了好多个手印，名字也签了好多张。</p>
<p>他妈的，我当时真的挺气愤的，你他妈干嘛麻烦我家人，你可以在学校找我谈话，但不要影响到我家人，我妈身体又不是很好，她这样一吓，晚上又肯定会失眠。</p>
<p>而且，我只是一个学生，你有必要怕到连个学生都不放过吗？我一点影响力都没有，我能做屁大点事？你们有这么多精力，为什么不花在真正为人民服务上？纳税人辛辛苦苦挣的钱就是反过来养这些人来监视自己的吗？靠！</p>
<p>加上前阵子看到自由门的报道，我猜想可能是自由门这个软件已经被破解了，所以他可以成功定位到使用者的ip。</p>
<p>于是我把不要再使用自由门的消息跟身边的朋友都说了下。</p>
<p>我舅后来再打给我，叫我也不用想那么多，没什么事情了。我问他，他们究竟是如何找到我的。我舅说，这个是公安内部的工作，不能告诉你。</p>
<p>我爸后来告诉我，他是从国家安全局上边发文件过来，再找到我的。</p>
<p>我不知他是只知道ip，还是twitter上知道我的。于是我开始不信任任何通讯工具，昨天一听到电话铃声我就精神紧张。这个世界越来越像1984。</p>
<p>今晚，就是26号，我在上机课的时候，老师在访问技术网站的时候发生上不了，于是我们跟她说，你要翻墙。我同学上去用自由门帮她翻墙。我于是好意地提醒他，尽量别使用自由门。他跟我说，在校园网内，使用自由门是没事的。然后他从网络的原理跟我分析，我们是在一个局域网内，即使他们能找到我们，也无法定位具体的ip。我才明白，原来是我傻逼了，在家里用ADSL畅通无阻地使用自由门。熊猫是通过猫知道我使用翻墙的信息的。其实他并不知道我多少信息，只是知道我使用的ip，我家的ip持有人是我爸，所以很自然就找到我爸去了。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>从这里我开始意识到，翻墙，这个行为在法律上虽然没能定义，但是这不是一个安全的行为，我们要为自己负责，最好要先了解到翻墙可能的后果，我们最好要确认，至少他是安全的，如果不能确保安全，那最好别去使用。</p>
<p>这是我第一次跟熊猫接触，我有点不知所以然，得到的经验是，不管怎样，你得冷静，即使你被叫去谈话了，如果不确定对方知道多少你的底细的话，最好什么都不要承认。</p>
<p>有一句话是这样说的，不会翻墙的大学生不是好的大学生，我很认同这句话。我是好大学生。</p>
<p>去你妈的GFW。</p>
<p>&nbsp;</p>

<h4>相关阅读</h4>
<ul>
    
    <li><a href="http://mandelbrot89.appspot.com/2011/11/1/2011_11_2.html">无题</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2011/02/6/2011_0126.html">所思所想</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2010/12/21/2010_12_21.html">技术·大学</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2010/08/31/0901.html">初恋的感觉</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2010/07/23/0723.html">搬宿舍</a></li>
    
</ul>
<p>本文网址:<a href="http://mandelbrot89.appspot.com/2011/05/27/2011_5_26.html">http://mandelbrot89.appspot.com/2011/05/27/2011_5_26.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://feeds.feedburner.com/http/mandelbrot89appspotcom/feed/comments</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item><item>
		<title>HGE游戏简易架构</title>
		<link>http://mandelbrot89.appspot.com/2011/02/27/2011_2_27.html</link>
		<comments>http://mandelbrot89.appspot.com/2011/02/27/2011_2_27.html#comments</comments>
		<pubDate>Sun, 27 Feb 2011 05:44:59 +0000</pubDate>
		<dc:creator>zhengxin.89</dc:creator>
				<category><![CDATA[c++笔记 ]]></category>


		<guid isPermaLink="false">http://mandelbrot89.appspot.com/?p=151001</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>什么是hge？</p>
<p>这里给出hge文档的Overview</p>
<p>HGE is an easy to use yet powerful hardware accelerated 2D game engine. It is a full featured middleware for all who want to develop commercial quality 2D games rapidly and easily. It covers all imaginable 2D game genres:you could create everything from a simple puzzle to advanced multilayered platformer or strategy without even thinking of any non game logic code! And you don't have to know anything about "window messages", DirectX programming and all that stuff. Instead you can start developing your own game within 15 minutes!&nbsp;</p>
<p>在一个ACM论坛上，我看到一篇对hge进行封装的帖子，加之上学期对MFC的架构的一点认识，我发现这个帖子对hge封装得特别好，这篇帖子把MFC的封装思想给搬运到hge游戏架构中来，还使用了单例的设计思想。这里把这篇帖子简单介绍下。</p>
<p>下面是我对这个架构所画的UML图</p>
<p><img src="/media/agxtYW5kZWxicm90ODlyDQsSBU1lZGlhGMGjCQw/hge1.jpg" alt="" width="320" height="151" /></p>
<p>架构实现了hge所需要的基本函数，而main函数的调用也对CMyApp不可见，这样的实现方法我们在MFC中也能看到，MFC中是看不到main函数的。程序会自动调用main。</p>
<p>而当游戏的架构做好后，我们只需要建立我们的程序类，即从CApplication继承的CMyApp，然后，改写我们所需要的函数。这样的架构，使得我们的开发变得更容易，单单只需要改写我们需要的函数即可，而不需要对背后的函数指针之类进行封装。更符合面向对象，我们的每一个程序都继承自CApplication。</p>
<p>我想起曾哥的一句话，MFC虽然在现在，可能已经算是过时的技术，但我们学习它，可以学习它的思想，比如封装。像这个架构的封装，就是源自MFC。<!--more--></p>
<p>下面还是把代码贴出来。简单地对自己所理解的注释下。</p>
<p>// Application.h</p>
<p>&nbsp;</p>
<pre class="brush: cpp;fontsize: 100; first-line: 1; ">#pragma once

#pragma comment(lib, "hge.lib")

#pragma comment(lib, "hgehelp.lib")

#include &lt;hge.h&gt;

#include &lt;cassert&gt;

class CApplication

{

	friend int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int );

public:

	CApplication(void);

	virtual ~CApplication(void);

	// 这里使用了单例的设计

	static CApplication* GetApplication();

	static HGE* GetHGE();

protected:

	// hge所需要的基本函数

	virtual void InitApplication();

	virtual bool InitInstance();

	virtual void ExitInstance();

	virtual bool FrameFunc();

	virtual void RenderFunc();

	virtual bool GFXRestoreFunc();

	virtual void FocusLostFunc();

	virtual void FocusGainFunc();

	virtual bool ExitFunc();

private:

	void ExitApplication();

	bool Initialize();

	bool Run();

	// 这里使用回调函数的目的是为了让Initialize函数

    // 的函数指针能调用需要的函数

	static bool FrameCallback();

	static bool RenderCallback();

	static bool GFXRestoreCallback();

	static bool FocusLostCalllback();

	static bool FocusGainCallback();

	static bool ExitCallback();

private:

	// 单例，m_nAppCnt计数器，使程序永远只有一个

	static int m_nAppCnt;

	static CApplication *m_pThis;

	static HGE *m_pHGE;

};</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>// Application.cpp</p>
<p>&nbsp;</p>
<pre class="brush: cpp;fontsize: 100; first-line: 1; ">#include "Application.h"

HGE *CApplication::m_pHGE = NULL;

int CApplication::m_nAppCnt = 0;

CApplication *CApplication::m_pThis = NULL;

CApplication::CApplication(void)

{

	++m_nAppCnt;

	assert(m_nAppCnt == 1);

	m_pThis = this;

}

CApplication::~CApplication(void)

{

	--m_nAppCnt;

}

CApplication* CApplication::GetApplication()

{

	assert(m_pThis != NULL);

	return m_pThis;

}

HGE* CApplication::GetHGE()

{

	assert(m_pHGE != NULL);

	return m_pHGE;

}

void CApplication::InitApplication()

{

}

bool CApplication::InitInstance()

{

	return true;

}

void CApplication::ExitInstance()

{

}

bool CApplication::FrameFunc()

{

	return false;

}

void CApplication::RenderFunc()

{

}

bool CApplication::GFXRestoreFunc()

{

	return true;

}

void CApplication::FocusLostFunc()

{

}

void CApplication::FocusGainFunc()

{

}

bool CApplication::ExitFunc()

{

	return true;

}

void CApplication::ExitApplication()

{

	m_pHGE-&gt;System_Shutdown();

	m_pHGE-&gt;Release();

}

bool CApplication::Initialize()

{

	m_pHGE = hgeCreate(HGE_VERSION);

	assert(m_pHGE != NULL);

	m_pHGE-&gt;System_SetState(HGE_FRAMEFUNC, FrameCallback);

	m_pHGE-&gt;System_SetState(HGE_RENDERFUNC, RenderCallback);

	m_pHGE-&gt;System_SetState(HGE_GFXRESTOREFUNC, GFXRestoreCallback);

	m_pHGE-&gt;System_SetState(HGE_FOCUSLOSTFUNC, FocusLostCalllback);

	m_pHGE-&gt;System_SetState(HGE_FOCUSGAINFUNC, FocusGainCallback);

	m_pHGE-&gt;System_SetState(HGE_EXITFUNC, ExitCallback);

	InitApplication();

	if (!m_pHGE-&gt;System_Initiate())

	{

		MessageBox(NULL, (LPCTSTR)(m_pHGE-&gt;System_GetErrorMessage()), L"Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);

		ExitApplication();

		return false;

	}

	if (!InitInstance())

	{

		ExitApplication();

		return false;

	}

	return true;

}

bool CApplication::Run()

{

   // m_pHGE-&gt;System_Start()调用后，程序会

   // 自动调用FrameFunc()

   // 当FrameFunc()返回false时，

   // 则程序调用RenderFunc()

   // 直到FrameFunc()返回true，程序结束。

	bool bRes = m_pHGE-&gt;System_Start();

	ExitInstance();

	ExitApplication();

	return bRes;

}

bool CApplication::FrameCallback()

{

	return m_pThis-&gt;FrameFunc();

}

bool CApplication::RenderCallback()

{

	m_pThis-&gt;RenderFunc();

	return false;

}

bool CApplication::GFXRestoreCallback()

{

	return m_pThis-&gt;GFXRestoreFunc();

}

bool CApplication::FocusLostCalllback()

{

	m_pThis-&gt;FocusLostFunc();

	return false;

}

bool CApplication::FocusGainCallback()

{

	m_pThis-&gt;FocusGainFunc();

	return false;

}

bool CApplication::ExitCallback()

{

	return m_pThis-&gt;ExitFunc();

}</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>// Main.cpp</p>
<p>&nbsp;</p>
<pre class="brush: cpp;fontsize: 100; first-line: 1; ">#include "Application.h"

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)

{

	if (!CApplication::GetApplication()-&gt;Initialize())

	{

		return -1;

	}

	if (!CApplication::GetApplication()-&gt;Run())

	{

		return -2;

	}

	return 0;

}</pre>
<p>&nbsp;</p>
<pre class="brush: cpp;fontsize: 100; first-line: 1; ">////////////

// 测试代码 //

/////////////</pre>
<p>// MyApp.h</p>
<p>&nbsp;</p>
<pre class="brush: cpp;fontsize: 100; first-line: 1; ">#pragma once

#include "Application.h"

class CMyApp : public CApplication

{

public:

	CMyApp(void);

	virtual ~CMyApp(void);

protected:

	virtual void InitApplication();

	virtual bool FrameFunc();

	virtual bool ExitFunc();

};

extern CMyApp theApp;</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>// MyApp.cpp</p>
<p>&nbsp;</p>
<pre class="brush: cpp;fontsize: 100; first-line: 1; ">#include "MyApp.h"

#define _CRTDBG_MAP_ALLOC

#include &lt;stdlib.h&gt;

#include &lt;crtdbg.h&gt;

CMyApp theApp;

CMyApp::CMyApp(void)

{

}

CMyApp::~CMyApp(void)

{

	_CrtDumpMemoryLeaks();

}

void CMyApp::InitApplication()

{

	GetHGE()-&gt;System_SetState(HGE_TITLE, "HGE_App");

	GetHGE()-&gt;System_SetState(HGE_SHOWSPLASH, false);

	GetHGE()-&gt;System_SetState(HGE_WINDOWED, true);

	GetHGE()-&gt;System_SetState(HGE_HIDEMOUSE, false);

	GetHGE()-&gt;System_SetState(HGE_FPS, 100);

}

bool CMyApp::FrameFunc()

{

	return false;

}

bool CMyApp::ExitFunc()

{

	return MessageBox(NULL, L"是否退出程序？", L"HGE Application"

		, MB_YESNO | MB_ICONWARNING)==IDYES;

}</pre>
<p>附上原论坛的地址。<a href="http://yzfy.org/dis/goto.php?tid=982&amp;goto=lastpost">http://yzfy.org/dis/goto.php?tid=982&amp;goto=lastpost</a>。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

<p>本文网址:<a href="http://mandelbrot89.appspot.com/2011/02/27/2011_2_27.html">http://mandelbrot89.appspot.com/2011/02/27/2011_2_27.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://feeds.feedburner.com/http/mandelbrot89appspotcom/feed/comments</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item><item>
		<title>2011年2月22号</title>
		<link>http://mandelbrot89.appspot.com/2011/02/22/2011_2_22.html</link>
		<comments>http://mandelbrot89.appspot.com/2011/02/22/2011_2_22.html#comments</comments>
		<pubDate>Tue, 22 Feb 2011 00:52:05 +0000</pubDate>
		<dc:creator>zhengxin.89</dc:creator>
				<category><![CDATA[2011年2月 ]]></category>


		<guid isPermaLink="false">http://mandelbrot89.appspot.com/?p=149001</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<div>今天是2011年2月22号，幸好不是2011年1月11号，而在22年前的今天，正是我从娘胎出来的日子。</div>
<div></div>
<div>小时候，我最期待的有两个节日，一是春节，因为可以有钱拿，二是生日，因为可以有蛋糕吃。</div>
<div></div>
<div>我记得每次过生日，在许愿的时候，大人总会在旁边说，要好好听话，以后娶个漂亮老婆，我总会假装很生气，说自己是不娶老婆的。但内心却默默地想着未来的对象样子，还不自觉把某个暗恋对象套进去。然后拼命许愿，许愿。也不知是谁发明的，生日就要吃蛋糕，就得吃双蛋，吃长长的面条，就要双手合十许愿，许完之后还得对着蜡烛这么一吹，这一吹还十分讲究功夫，得一次性全吹完，不然许的愿就不灵了。</div>
<div></div>
<div>我想，今年换个方式，不买蛋糕，就买一瓶茉莉花茶。</div>
<div></div>
<div>然后，许愿：希望《动物庄园》只是一个笑话。</div>

<p>本文网址:<a href="http://mandelbrot89.appspot.com/2011/02/22/2011_2_22.html">http://mandelbrot89.appspot.com/2011/02/22/2011_2_22.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://feeds.feedburner.com/http/mandelbrot89appspotcom/feed/comments</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item><item>
		<title>所思所想</title>
		<link>http://mandelbrot89.appspot.com/2011/02/6/2011_0126.html</link>
		<comments>http://mandelbrot89.appspot.com/2011/02/6/2011_0126.html#comments</comments>
		<pubDate>Sun, 06 Feb 2011 04:23:38 +0000</pubDate>
		<dc:creator>zhengxin.89</dc:creator>
				<category><![CDATA[2011年1月 ]]></category>


		<guid isPermaLink="false">http://mandelbrot89.appspot.com/?p=145001</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: Arial, sans-serif; line-height: 22px; font-size: small; border-collapse: collapse;"><strong>把qq空间的文章转放到blog。</strong></span></p>
<p><span style="font-family: arial; line-height: normal; font-size: small; border-collapse: collapse;">回家后，我发现我和父母之间的距离越来越大，甚至沟通都很难，出去外面看到的，学到的，接触到的，见识到的，都远远高于待在一个小地方所得到的。</span><br /><span style="font-family: Arial, sans-serif;"><span style="border-collapse: collapse; line-height: 22px;"><br /></span></span><span style="font-family: Arial, sans-serif; line-height: 22px; font-size: small; border-collapse: collapse;">我所想的，所思考的，很多是经过很多次思索才得出的。有这么一句话，说的是：做人要现实，不能过于理想。我于是深深思索自己，我到底想要的是什么。</span><br /><span style="font-family: Arial, sans-serif;"><span style="border-collapse: collapse; line-height: 22px;"><br /></span></span><span style="font-family: Arial, sans-serif; line-height: 22px; font-size: small; border-collapse: collapse;">不知有多少人会相信&ldquo;技术改变生活&rdquo;。但我真的相信，因为我真的见识到了技术是真的可以改变生活的，不仅仅可以改变生活，甚至可以改变社会。我记得fracting一开始推荐我使用gmail的时候，我并不喜欢gmail。人总会有惯性的思维，当我习惯于qq，qq默认所带来的qq邮箱的时候，我并不会花时间去了解其他我不熟悉的服务。这里并不是一定要在qq邮箱和gmail两者之间一比高下，我想说的，是一种心态。因为我深深地体会到，做一个墨守成规的人，不难，而做一个经常尝试去突破思维定势的人，却是很难很难的。而任何一个有所追求的人，是很难忍受某些不自由而选择妥协的。</span><br /><span style="font-family: Arial, sans-serif;"><span style="border-collapse: collapse; line-height: 22px;"><br /></span></span><span style="font-family: Arial, sans-serif; line-height: 22px; font-size: small; border-collapse: collapse;">多少人会认为我的想法很愤青，思想幼稚，其实别人怎么看我真的无所谓。现实的社会真的很现实，没有人管你，没有人关心你，人和人之间很多情况下会变成赤裸裸地剥削，甚至是嬉皮笑脸又恶狠狠地剥削着你。特别是在中国这个特殊的体制下，我们都知道，我们不仅仅需要钱，我们更需要&ldquo;人&rdquo;，&ldquo;武林外传&rdquo;有句笑话是&ldquo;没事，我上面有人&rdquo;，这就是一句典型的中国式笑话，同时，我们会向往国外很多自由的生活，我们会对比国外和中国国内的教育，我们痛骂教育，痛恨贪官。同时，我们麻木，我们怕被跨省，说一套做一套，我们缺乏思考者，很多聪明人都不愿当思考者，因为当思考者，并不能让你捞到好处，不能捞到好处意味着你不成功，思考者并不适合在这个社会生存。于是聪明人都出国，都选择讲假话，或者偶尔说两句不痛痒的真话。我特别不喜欢那些动不动就装得很懂社会的人，懂不是靠装出来的，是做出来的。</span><br /><span style="font-family: Arial, sans-serif;"><span style="border-collapse: collapse; line-height: 22px;"><br /></span></span><span style="font-family: Arial, sans-serif; line-height: 22px; font-size: small; border-collapse: collapse;">中国人活着特别特别矛盾。我们可以进行换位思考，贪官，其实很多贪官他们一开始并不是真的想贪钱，他们可能有理想，但在体制内，所谓的理想是很难存在的，只要你生活在体制中，你就得学会妥协，你就得学着保护自己。很多人在痛恨贪官的同时，是否会想，真正核心的问题真的是出在贪官身上么？教育，为什么中国无法产生世界级的大学，而印度，香港，台湾却做到了，问题真的是出在大学本身么？</span><br /><span style="font-family: Arial, sans-serif;"><span style="border-collapse: collapse; line-height: 22px;"><br /></span></span><span style="font-family: Arial, sans-serif; line-height: 22px; font-size: small; border-collapse: collapse;">我说得很容易让人认为我是那种要跟不合理抗争到底的人，但其实我所追求的东西真的很简单很简单，我知道，人是不可能脱离物质生活的，我不可能也没办法为了精神的思考，精神的生活，而放弃我所需要的物质生活。我记得我刚到珠海的时候，我失望了一下，因为珠海并没有丛林似的高楼大厦，珠海没有特别发达的交通路线，每次我出游的时候，我都得挤着搭1个多小时的公车，去广州的时候，那种大城市的感觉，像庞大的八爪鱼般，把它的触角伸向四面八方，到处的高楼耸立，是完全超乎我所想象的，像那种乡巴佬，第一次见世面的感觉。但广州那种城市生活，会讨人喜欢吗？每天，你得挤着上公交，挤着上地铁，像鱿鱼一样挂在公交上，人与人匆匆往来，今天大家一起吃饭，明天又是陌生的面孔。想在一个生活压力这么大的地方生存下来，是很不容易的。我们得牺牲掉人生很多的东西。而珠海，这种活生生的生存压力，却没有这么大，很多的绿化，很容易可以见到的大海，据说珠海每一寸树木的砍伐都得经过政府的同意。于是我渐渐喜欢上珠海，我觉得，做为一个人，最起码的应该学会跟大自然打交道。</span><br /><span style="font-family: Arial, sans-serif;"><span style="border-collapse: collapse; line-height: 22px;"><br /></span></span><span style="font-family: Arial, sans-serif; line-height: 22px; font-size: small; border-collapse: collapse;">不知多少人会认真地去对待一件小事，有多少人会认真地去削一个苹果，在学校的时候，有时我会突然发神经地自己在宿舍煮东西，然后放上轻柔的音乐。有时我会突然跑去跑步，然后静静地享受这一过程。也许你会说，叫你天天自己煮，看你还有没有什么乐趣。我这里想说的并不是说服你跟我一样突然发神经地做一些事，而是，我们其实可以做很多细小琐碎的事情，我们可以去快乐地享受这一过程。每天轻轻的一个微笑，总比天天板着一副脸强吧。这是一种生活的态度。听说在国外的时候，遇到那些穿西装革皮，还在西装的口袋上装着一张白色纸巾的人，最好别问他们问题。这些人，通常生活死板，思维固定，活像僵尸。人，应该需要一个乐观的心态，最起码，有一种幽默的生活态度。</span><br /><span style="font-family: Arial, sans-serif;"><span style="border-collapse: collapse; line-height: 22px;"><br /></span></span><span style="font-family: Arial, sans-serif; line-height: 22px; font-size: small; border-collapse: collapse;">我的头像是chrome的logo。chrome是开源的，我想这个头像可以代表一种开源的文化。开源是一种无私的精神，开源，意味着你辛苦做出来的软件是没法赚钱的。Linux就是这样一种开源思想充斥的地方。在fracting的介绍下，我加入了一些Linux社区。在Linux社区里，不怕你提出多蠢的问题，都没有人会笑你，这里有很多互帮互助的人，而且有很多很多的高手，当你看到那些高手，会在一件很细微的事情上，竟能看到一些你完全思考不到的高度。你会学习到很多很多东西的。而这些东西，并不一定要是高手才能做的。像投诉，我们有多少人会意识到投诉的重要意义，拿我们学校的校园网来说，每次选课的时候，每每都会出现系统崩溃的现象，有多少人在暗地里骂，网上发帖，但很少很少有人会去投诉。我们一人投诉的力量很微小，但我们很多人聚集一起，都去投诉的话，就会形成一股不可忽略的力量。我们读了这么多年的书，真的就只是学会如何去考试而已么？一旦接触到这些东西，我发现我很难不受这些东西所影响，在Linux社区里，我发现，很多人用Linux其实不是为了装逼，很多Linux用户考虑到的是版权的问题，在中国，全民盗版，我们无法知道Windows背后的艰辛。我老师跟我们讲他在在国外的时候，别人电脑系统坏了，他需要尽力帮别人把电脑修好，而不像在中国一般，直接重装系统。老师跟他朋友说，&ldquo;你看，这就是特色社会主义的好处&rdquo;。</span><br /><span style="font-family: Arial, sans-serif;"><span style="border-collapse: collapse; line-height: 22px;"><br /></span></span><span style="font-family: Arial, sans-serif; line-height: 22px; font-size: small; border-collapse: collapse;">一般写上qq空间的文章，就意味着文章是给别人看的。刚写到这的时候跑去洗澡，回来之后却发现接不上去了。就写到这吧，算一篇个人的日志。</span><span style="font-family: Arial, sans-serif;"><span style="border-collapse: collapse; line-height: 22px; font-size: x-small;"><br /></span></span></p>

<h4>相关阅读</h4>
<ul>
    
    <li><a href="http://mandelbrot89.appspot.com/2011/11/1/2011_11_2.html">无题</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2011/05/27/2011_5_26.html">谈话记</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2010/12/21/2010_12_21.html">技术·大学</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2010/08/31/0901.html">初恋的感觉</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2010/07/23/0723.html">搬宿舍</a></li>
    
</ul>
<p>本文网址:<a href="http://mandelbrot89.appspot.com/2011/02/6/2011_0126.html">http://mandelbrot89.appspot.com/2011/02/6/2011_0126.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://feeds.feedburner.com/http/mandelbrot89appspotcom/feed/comments</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item><item>
		<title>技术·大学</title>
		<link>http://mandelbrot89.appspot.com/2010/12/21/2010_12_21.html</link>
		<comments>http://mandelbrot89.appspot.com/2010/12/21/2010_12_21.html#comments</comments>
		<pubDate>Tue, 21 Dec 2010 13:00:21 +0000</pubDate>
		<dc:creator>zhengxin.89</dc:creator>
				<category><![CDATA[2010年12月 ]]></category>


		<guid isPermaLink="false">http://mandelbrot89.appspot.com/?p=141001</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>起笔敲键盘的时候，不自觉写了些&ldquo;阴暗&rdquo;的文字，但在这篇文章里，我只是想表达对技术，或者对大学的一些想法，于是又把之前的文字全部删除，虽然在这个国家，每天总会有各种各样幽默的事情发生。</p>
<p><strong>技术</strong></p>
<p>就计算机技术来说，学什么样的东西才能称为学技术，常常听到我周围的人说，某某技术学院每天学的东西比本科的多很多，他们出来，可以自己配置机器，可以自己写代码，可以马上投入生产线使用，&ldquo;技术型人才&rdquo;，其实某时候真的是实情，但是，大学课堂，和技术学院，其实本质上是有很多区别的。首先，需要搞明白的是，学什么样的东西可以称之为学技术。我们都知道，技术每天都在进步，你今天学的东西，很可能明天就完全过时了，就像C#，C#真的做得很强大，强大到你几乎可以不去理底层究竟发生了什么，你根本也不需要去知道。因为微软已经封装得很好，它把烦躁重复的代码全部封装成库，现在的开发，可以做到&ldquo;所见即所得&rdquo;，我根本不需要去了解为什么移动主窗口时，按钮为什么也会跟着移动，为什么滚动条可以自动随文字上下移动......开发的门槛越来越低，前几天，我只是拖拽几个控件，用一个下午就可以简单开发出个新浪微博客户端。也许明天，或者不远的将来，任何人都可以编程，曾哥说，其实，这都是假象，因为，很多优秀的人都在拼命降低编程的门槛，为的是什么，就是让你以为自己真的学会了编程，让你愿意掏腰包买他们开发的东西。而技术学院，基本教的就是让你如何去使用其他人开发的东西。大学课堂和技术学院，本质上的区别在于，一个授予&ldquo;渔&rdquo;，一个授予&ldquo;鱼&rdquo;。那么，就引出一个问题，大学课堂，到底教什么才是重要的，曾哥经常问我们，在技术领域里，什么东西是一成不变，什么样的东西，才是最重要的。语法什么的都不重要，因为这些都是人为规定的，很难学会的，才是最重要的东西，就像算法，离散数学。核心的东西才是最重要的，语言书籍基本年年改版，但算法之类的书籍却一成不变，道理就在这里。所以，真正决定未来能走多远，不在于你学了多少门语言，学了多少语法。关键在于，你对数学理解的深度。</p>
<p><strong>大学</strong></p>
<p>我在校内下载了一个系列的视频，名字《耶鲁大学开放课程.哲学.死亡》，视频里，老师坐在讲台上讲课，哲学老师满脸胡子，天南地北，每句话中都充满智慧。令我想起了苏格拉底。我想象中的智者，是一群人围在一起，聆听大师的演讲，各自发表自己的见解。我想，真正的大学课堂也应该是这样，凭什么我们得叫跟我们演讲的人做老师，就是因为我们需要他的启发。但是，现实却是很让人失望的，我并不想骂哪个老师，实情是，周围真正负责任的老师真的很少，我甚至觉得我自己也可以去做老师，很多老师无非就是对着PPT念，烂老师是一抓一把。我们学院竟然还有个老师说，写代码是没用的。也许是制度的原因，导致只要高学历的人就可以当老师，甚至可以无视他对技术领域的理解。曾哥是难得的老师，他是真正懂技术的人，他不会胡乱对你吹嘘，学院的就业率有多高，这个行业的前景有多么光明，很幸运可以遇到个改变我很多的人。听说，我们学校的校长准备干一些很有魄力的改革，他觉得，考试很多都是形式化，所以今年把我们的考试给取消掉，以前我们老校长，刚进校的时候，就大胆地喊出口号，称学校将实行完全学分制，口号还没喊热，&ldquo;不学无术&rdquo;的老师被完全学分制吓坏了神经，于是硬是把老校长给挤出了学校。而换来的新校长，他并不喊口号，却静悄悄地沿着前任校长的方案实行改革，虽然我并不能看到改革成功的一天，但内心希望学校真有改革成功这么一天。</p>

<h4>相关阅读</h4>
<ul>
    
    <li><a href="http://mandelbrot89.appspot.com/2011/11/1/2011_11_2.html">无题</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2011/05/27/2011_5_26.html">谈话记</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2011/02/6/2011_0126.html">所思所想</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2010/08/31/0901.html">初恋的感觉</a></li>
    
    <li><a href="http://mandelbrot89.appspot.com/2010/07/23/0723.html">搬宿舍</a></li>
    
</ul>
<p>本文网址:<a href="http://mandelbrot89.appspot.com/2010/12/21/2010_12_21.html">http://mandelbrot89.appspot.com/2010/12/21/2010_12_21.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://feeds.feedburner.com/http/mandelbrot89appspotcom/feed/comments</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item><item>
		<title>12月10号</title>
		<link>http://mandelbrot89.appspot.com/2010/12/9/2010_12_10.html</link>
		<comments>http://mandelbrot89.appspot.com/2010/12/9/2010_12_10.html#comments</comments>
		<pubDate>Thu, 09 Dec 2010 22:22:33 +0000</pubDate>
		<dc:creator>zhengxin.89</dc:creator>
				<category><![CDATA[2010年12月 ]]></category>


		<guid isPermaLink="false">http://mandelbrot89.appspot.com/?p=140001</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>今天是一个特殊的日子，本来我不知今天是什么日子的，但是很神奇，昨天，即是9号，appspot域名全体攻陷。于是我知道了，今天真的是一个特殊的日子&mdash;&mdash;世界人权日。我想说这个国家每年总会来那么几次，准确地说，应该说是这个政府，国家和政府并不是同一概念。</p>
<p>Google在全球的定位，应该算得上是一个引领全球科技发展的这么一个创新技术型公司，Google推出了很多代表web2时代的产品，像doc，code，gae等等，Google从来都是一个商业公司，但这丝毫不影响我对Google的喜爱，因为Google是真正在做事情的，在盈取利益的同时，Google也为世界带来了技术的进步发展。Google的很多产品都是很优秀的，而在中国，doc部分无法连接，code部分被墙，Google问答上线3天不到，立即无法访问，gae终于也加入了GFW优秀网站认证行列，我真的不想成天想这些问题，但我真的很难理解，为什么自由地浏览下网页，仅仅是关于技术的，也那么难么？费曼曾经写一些思考，在《科学的价值》这篇文章里，他说，科学知识是一种力量，他既能让我们行善，也能让我们为恶。我觉得技术也是如此，技术本身并没有善恶，但使用它的人，却可以利用它做不同的事，像Google开发的chrome，android，像劳民伤财的GFW。</p>
<p>那些胡乱瞎封锁网站的人，你们总是习惯用下半身思考问题，鸵鸟的掩耳盗铃只能让它自己心安理得，不让气球透气的结果就是气球自我爆炸。我想，总会有一天，你们是需要负责任的。作为一个成年人，即使屁股长在脑袋上，总是需要为他所做的一言一行负上责任。</p>
<p>昨天，我在reader上看到shaopu哥和网友的评论。看到一句话让我很有触动，&ldquo;现在这么多大学生，都在用腾讯的qq，就没有一个想超过马化腾的？&rdquo;我看了觉得自己惭愧得要命，我似乎习惯了很多习以为常的东西，却不曾去想，我们干嘛不自己开发一个属于自己的IM软件，干嘛非得要马化腾。这是一个跟抵触不用qq换其他IM软件完全不同高度的思考，人总是因为技术的局限不足而不敢去想像，而技术的进步，却总是需要那些看似疯狂的想像。</p>
<p>其实我不知自己以后会不会从事计算机这方面的工作，未来本就是一个未知数，我只是在想，我已经浪费了很多很多时间，我能不能在剩下不多时间里，我想寻找自己源源不断的动力来源，尽力去尝试，看自己可以做到哪个程度上。</p>
<p>记得曾哥在暑假的时候，问过我们的一句话，&ldquo;你们为什么而编程？&rdquo;，我们安静。然后他说，我编程只是为了这个，接着在黑板上写道&ldquo;Just coding for fun&rdquo;。</p>
<p>&nbsp;</p>

<p>本文网址:<a href="http://mandelbrot89.appspot.com/2010/12/9/2010_12_10.html">http://mandelbrot89.appspot.com/2010/12/9/2010_12_10.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://feeds.feedburner.com/http/mandelbrot89appspotcom/feed/comments</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item><item>
		<title>关于sina微博</title>
		<link>http://mandelbrot89.appspot.com/2010/12/6/2010_12_06.html</link>
		<comments>http://mandelbrot89.appspot.com/2010/12/6/2010_12_06.html#comments</comments>
		<pubDate>Mon, 06 Dec 2010 15:21:49 +0000</pubDate>
		<dc:creator>zhengxin.89</dc:creator>
				<category><![CDATA[2010年12月 ]]></category>


		<guid isPermaLink="false">http://mandelbrot89.appspot.com/?p=137001</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">前天在</span><span lang="EN-US">twitter</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">上看到校友说图书馆的展览大厅里有张奇图，于是我今天专程跑去凑了凑热闹，照了张相回来。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;"><img src="../media/agxtYW5kZWxicm90ODlyDQsSBU1lZGlhGPGWCAw/GFW.jpg" alt="" />&nbsp;&nbsp; &nbsp; <img src="../media/agxtYW5kZWxicm90ODlyDQsSBU1lZGlhGPm9CAw/gfwitem.jpg" alt="" width="221" height="280" /></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">有上过阵子</span><span lang="EN-US">sina</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">微博的人一般都知道，</span><span lang="EN-US">sina</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">微博最近来了个不速之客，</span><span lang="EN-US">@</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">毛新宇，腊肉的孙子。（下简称孙子）对他到底有多傻逼我兴趣倒不是很大，但在随便浏览时发现</span><span lang="EN-US">sina</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">微博里还有一个</span><span lang="EN-US">ID</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">就跟孙子仅仅差了一个字，叫毛心宇。</span><span lang="EN-US">Sina</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">微博有个自定义域名，每个域名都是独一无二的，所以一旦给占用了，就意味着别人无法再使用这个单独的域名。于是，就有了这神奇的一幕</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;"><img src="../media/agxtYW5kZWxicm90ODlyDQsSBU1lZGlhGImPCAw/maoxinyu.jpg" alt="" width="574" height="297" /></span></p>
<p class="MsoNormal">Sina跟国内的很多互联网公司一样，都不是什么好鸟，为了生存壮大，总是在做各种各样特别操蛋的事，赤裸裸地侵犯着用户，然后GFW在背后发力，屏蔽twitter，全民微博。这里并不是说sina微博不好，像sina微博在技术方面，对开发者来说，确确实实是作出了贡献，sina开放了他的API，使得开发者可以更简单地调用接口，从而实现各种各样的客户端，sina微博有个最受欢迎的客户端wing，就是一个90后的女生所写的，做得很好很好，几乎无法超越。</p>
<p class="MsoNormal">我因为最近在学习C#，所以也想试试能不能用C#做一个自己的客户端。于是查了下API的文档，发现有现成的SDK，作者<a href="http://t.sina.com.cn/n/sarlmolapple">http://t.sina.com.cn/n/sarlmolapple</a>，他做的是真正有技术含量的工作，这里感谢@sarlmolapple。</p>
<p class="MsoNormal">下面记录下开发自己的客户端的小小尝试。</p>
<p class="MsoNormal">1， &nbsp;首先，需要申请一个自己的应用，我的应用其实已经申请了很久，但应用一直不通过sina审核，这点和twitter的oauth相比，差了很多，twitter很轻松就可以拥有属于自己的应用。申请成功后，你会得到一个App Key和一个App Secret。但一般的应用只会显示来自新浪微博开放接口，要想显示自定义名字，则需要申请审核，审核要求应用要有一定的用户量和调用次数，当调用到一定的数量时，sina会发一封&ldquo;APP审核友情提示&rdquo;邮件给你，当审核成功后，就可以发属于自己的应用了。</p>
<p class="MsoNormal">2， &nbsp;有了上面的两个关键key和secret，接下来下载C#SDK，打开编译，生成一个dll。</p>
<p class="MsoNormal">3， &nbsp;有了dll程序集后，就可以开始写自己的程序了，建立一个新的项目。添加上面生成的dll，接下来就可以很简单地调用sina开放的API了。</p>
<p class="MsoNormal">现在尝试的不多，就调用了上传状态和上传图片两个功能，我发现登录的过程会阻塞很久，于是把登录的过程写到了backgroundworker里去。本想加入一些显示信息，但对抓取得信息，还是不知放在哪个控件比较合适，而且需要对xml进行信息处理。接下来可能的话，会慢慢把功能完善。学习是目的，想要源码的话可以跟我要。邮箱右上角写着。</p>
<p class="MsoNormal">最后给出程序的下载，欢迎大家<a href="../media/agxtYW5kZWxicm90ODlyDQsSBU1lZGlhGIHlCAw/Debug.rar">下载</a>。</p>

<p>本文网址:<a href="http://mandelbrot89.appspot.com/2010/12/6/2010_12_06.html">http://mandelbrot89.appspot.com/2010/12/6/2010_12_06.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://feeds.feedburner.com/http/mandelbrot89appspotcom/feed/comments</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item><item>
		<title>轮胎如何换</title>
		<link>http://mandelbrot89.appspot.com/2010/11/20/tire.html</link>
		<comments>http://mandelbrot89.appspot.com/2010/11/20/tire.html#comments</comments>
		<pubDate>Sat, 20 Nov 2010 03:32:38 +0000</pubDate>
		<dc:creator>zhengxin.89</dc:creator>
				<category><![CDATA[Coding For Fun ]]></category>


		<guid isPermaLink="false">http://mandelbrot89.appspot.com/?p=125001</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">最近想做一个关于算法方面的训练，听说程序</span><span lang="EN-US">=</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">算法</span><span lang="EN-US">+</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">数据结构，大一的时候数据结构挂了，考了</span><span lang="EN-US">32</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">分，大二的时候，算法差点挂了，考了</span><span lang="EN-US">60</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">分，由此可得出我的程序实在可怜得很。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">前天在一本书上看到一道趣题，试着用代码写了下，代码实现自动输出如何安排轮胎的输出，可能有错误</span><span lang="EN-US">bug</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">，或者有更好的办法，请赐教。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">原题如下：</span><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;"><strong>有一个做长途运输的司机要出发了，他用做运输的车是三轮车，轮胎的寿命是</strong></span><span lang="EN-US"><strong>2</strong></span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;"><strong>万里，现在他要进行</strong></span><span lang="EN-US"><strong>5</strong></span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;"><strong>万里的长途运输，计划用</strong></span><span lang="EN-US"><strong>8</strong></span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;"><strong>个轮胎就完成运输任务，怎样才能做到呢？</strong></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">分析：每个轮胎的值是</span><span lang="EN-US">2</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">万里，每个</span><span lang="EN-US">1</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">万里需要</span><span lang="EN-US">3</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">个轮胎，即是需要</span><span lang="EN-US">3</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">万里的值。总的为</span><span lang="EN-US">3</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">&times;</span><span lang="EN-US">5=15</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">，而总的轮胎的值为</span><span lang="EN-US">2</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">&times;</span><span lang="EN-US">8=16</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">，即是假设合理分配的话，最后还可剩值</span><span lang="EN-US">1</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">万里轮胎没用完。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">代码如下：</span></p>
<p><!--more--></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">&nbsp;</span></p>
<pre class="brush: cpp;fontsize: 100; first-line: 1; ">#include "stdafx.h"
#include &lt;iostream&gt;
#define TIRE 8 //8个轮胎
#define LEN  5 //5万里

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int i, j;
	float sunValue;
	float driveLen;

	float oneMillion[LEN];
	float tire[TIRE];
	for (i = 0; i &lt; LEN; ++i)
	{
		oneMillion[i] = 0;
	}
	for (i = 0; i &lt; TIRE; ++i)
	{
		tire[i] = 2;
	}

	cout&lt;&lt;"几公里换一次胎: ";
	cin&gt;&gt;driveLen;

	i = 0;
	j = 0;
	sunValue = 0.0;

	cout&lt;&lt;"可行的方法如下：";
	while(sunValue &lt; 15)
	{
		if (tire[i%TIRE] &gt;= 0 &amp;&amp; tire[(i+1)%TIRE] &gt;= 0 &amp;&amp; tire[(i+2)%TIRE] &gt;= 0)
		{
			if (oneMillion[j] &lt; 3)
			{
				oneMillion[j]	 += driveLen * 3;
				sunValue	 += driveLen * 3;
				tire[i%TIRE]	 -= driveLen;
				tire[(i+1)%TIRE] -= driveLen;
				tire[(i+2)%TIRE] -= driveLen;
				cout&lt;&lt;i%TIRE &lt;&lt;(i+1)%TIRE &lt;&lt;(i+2)%TIRE&lt;&lt;";";
			}
			else
			{
				++j;
			}
		}
		else
		{
			++i;
		}
		++i;
	}

	if (sunValue == 15)
	{
		cout&lt;&lt;"succeed\n";
	}
	else
	{
		cout&lt;&lt;"fail\n";
	}
	system("pause");
	return 0;
}</pre>
<p>总结下曾哥所传授的写代码规范，1，一些写得好的代码是不需要注释的; &nbsp;2，一个函数，控制在一页之内写完，一页大概20至30行左右，便于调试阅读。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

<p>本文网址:<a href="http://mandelbrot89.appspot.com/2010/11/20/tire.html">http://mandelbrot89.appspot.com/2010/11/20/tire.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://feeds.feedburner.com/http/mandelbrot89appspotcom/feed/comments</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item><item>
		<title>关于缓冲区溢出笔记</title>
		<link>http://mandelbrot89.appspot.com/2010/09/25/2010_0926.html</link>
		<comments>http://mandelbrot89.appspot.com/2010/09/25/2010_0926.html#comments</comments>
		<pubDate>Sat, 25 Sep 2010 18:19:12 +0000</pubDate>
		<dc:creator>zhengxin.89</dc:creator>
				<category><![CDATA[c++笔记 ]]></category>


		<guid isPermaLink="false">http://mandelbrot89.appspot.com/?p=122001</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><strong><em>&mdash;&mdash;利用指针篡改返回地址。</em></strong></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">开始先说下内存的一点内容，你的电脑系统是几位系统，有没想过，这个几位是什么意思？位数跟内存有什么关系？内存是不是越大越好？很明显，内存并不是越大越好，系统寻址功能是有限的，拿</span><span lang="EN-US">32</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">位系统来说，内存的最大寻址范围是</span><span lang="EN-US">2</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">的</span><span lang="EN-US">32</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">次方，即</span><span lang="EN-US">2^10*2^10*2^10*4,</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">即</span><span lang="EN-US">4</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">个</span><span lang="EN-US">G</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">，对</span><span lang="EN-US">32</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">位系统来说，超过</span><span lang="EN-US">4G</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">的内存，不好意思，没用，系统是无法找到多出的部分的。再多余地问一下，所谓的寻址，这个址，指的是什么地址呢？当你用</span><span lang="EN-US">&amp;</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">来输出地址的时候，你看到的地址，并不是真正的物理地址，看到输出的地址如</span><span lang="EN-US">FFFFFFFF</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">，实际上是虚地址，是虚空间的一个地址，跟物理地址是不一样的。</span><span lang="EN-US">(</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">想看更多的关于虚地址和实际物理地址转换的算法，可以看《嵌入式开发》</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">回到</span><span lang="EN-US">32</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">位系统中来，这</span><span lang="EN-US">4G</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">确切的说，并不是</span><span lang="EN-US">4G</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">，因为这</span><span lang="EN-US">4G</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">的内容开端部分，跟末端部分的</span><span lang="EN-US">64k</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">，是不能使用的，这</span><span lang="EN-US">2</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">个</span><span lang="EN-US">64k</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">是干嘛用的？</span><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">这是给程序员调试用的，操作系统一般是从高地址端开始入栈，所以栈底是高地址端，栈顶是低地址端。所以说，程序员在操作系统里，才算得上是真正的用户，上帝在哪里？程序员在操作系统里，就跟上帝一般。</span><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">一旦操作系统启动的时候，正常版本的话，操作系统运行时要使用</span><span lang="EN-US">2G</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">内存，自己的应用程序占</span><span lang="EN-US">2G</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">，现在微软有个新版本，操作系统只占</span><span lang="EN-US">1G</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">，自己的应用程序提高到</span><span lang="EN-US">3G</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">。</span><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">呵，想深点，其实很有趣，你想，现在一般人的内存，差不多都是</span><span lang="EN-US">1G</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">到</span><span lang="EN-US">2G</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">，你的操作系统差不多就把你的内存用光了，那么你一开机，马上死机，操作系统究竟是怎样避免这样的问题的。等我学完《操作系统》，有时间再来补充下。</span><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">接下来说下内存管理机制，可执行程序被执行时，操作系统会为程序创建一个进程</span><span lang="EN-US">(process)</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">，每一个进程可以访问的虚地址空间也是</span><span lang="EN-US">2G</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">。</span><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">了解完基本的操作系统知识，接下来开始主题&mdash;&mdash;缓冲区溢出。</span><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">先写一段简单的程序</span></p>
<p><!--more--></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">&nbsp;</span></p>
<pre class="brush: cpp;fontsize: 100; first-line: 1; ">#include "stdafx.h"

// 这是一个普通C++函数，有一个参数
// 加上一个局部变量
void foo(int param = 0xAABBAABB)
{
	int local = 0;
	local = 0xCCDDCCDD;
}

int _tmain(int argc, _TCHAR* argv[])
{
	printf("&amp;main = %p\n", &amp;_tmain);
	foo();
	return 0;
}</pre>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">结果输出为：</span><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;main = 00401050</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">我们得到了</span><span lang="EN-US">main</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">的地址为</span><span lang="EN-US">00401050</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">接下来修改程序：</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">&nbsp;</span></p>
<pre class="brush: cpp;fontsize: 100; first-line: 1; ">#include "stdafx.h"

// 这是一个普通C++函数，有一个参数
// 加上一个局部变量
void foo(int param = 0xAABBAABB)
{
	int  local = 0;
	char pChar[1];
	local = 0xCCDDCCDD;

	printf("&amp;local = %p\n",&amp;local);
	printf("&amp;pChar = %p\n",&amp;pChar);
	//猜想一下，输出的结果，按前面高地址端是栈底
	//那结果应该是local先进栈，值应该比pChar大
}

int _tmain(int argc, _TCHAR* argv[])
{
	printf("&amp;main = %p\n", &amp;_tmain);
	foo();
	return 0;
}</pre>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">结果输出为：</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;main = 00401050</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;local = 0013FF68</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;pChar = 0013FF6F</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">很明显，我们得到跟猜想的结果完全相反，原因在哪里？</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">这涉及到编译器，编译为了防止</span><span lang="EN-US">pChar</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">数组溢出而修改栈帧，偷偷做了手脚，</span><span lang="EN-US">c++</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">编译器经常在背后偷偷做了很多东西，把地址给换了。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">这里，我们得先把编译的优化给取消掉，然后继续实验。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">曾哥教我们一个很好的办法，一般的</span><span lang="EN-US">vs</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">编译都有这样的功能，但官方并没有明说，曾哥说这是微软程序员告诉他的。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">就是在程序里加入一段简单的</span><span lang="EN-US">printf</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">语句。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">接下来继续修改</span><span lang="EN-US">foo</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<pre class="brush: cpp;fontsize: 100; first-line: 1; ">void foo(int param = 0xAABBAABB)
{
	int  local = 0;
	char pChar[1];
	local = 0xCCDDCCDD;

	printf("&amp;local = %p\n",&amp;local);
	printf("&amp;pChar = %p\n",&amp;pChar);
	//猜想一下，输出的结果，按前面高地址端是栈底
	//那结果应该是local先进栈，值应该比pChar大

	printf("%p\n%p\n%p\n%p\n%p\n%p\n");
	//这里会把栈帧的内容打印出来
}</pre>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">继续输出程序：</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;main = 00401050</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;local = 0013FF68</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;pChar = 0013FF6F</span></p>
<p class="MsoNormal"><span lang="EN-US">CCDDCCDD</span></p>
<p class="MsoNormal"><span lang="EN-US">7855215C</span></p>
<p class="MsoNormal"><span lang="EN-US">0013FF7C</span></p>
<p class="MsoNormal"><span lang="EN-US">00401070</span></p>
<p class="MsoNormal"><span lang="EN-US">AABBAABB</span></p>
<p class="MsoNormal"><span lang="EN-US">0013FFC0</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">这里输出的就是栈帧里的东西了，什么是栈帧？</span><span lang="EN-US">c/c++</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">里，有函数这个概念，那么</span><span lang="EN-US">c/c++</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">是如何让程序找到函数的位置呢？编译器会在编译的时候，往栈帧里加进函数的返回地址，也就是说，如</span><span lang="EN-US">foo</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">函数，首先会是</span><span lang="EN-US">param</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">进栈，接着，编译器暗暗把函数的返回地址，即该返回</span><span lang="EN-US">main</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">的地址和其他一些东西也压进栈，这部分就称为栈帧，在这里，我们知道，</span><span lang="EN-US">main</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">的地址是</span><span lang="EN-US">00401050</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">，由此，可以猜想，</span><span lang="EN-US">foo</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">的返回地址，应该是这里的</span><span lang="EN-US">00401070</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">这样的话，我们就可以做一些黑客方面的技术了，即是很出名的缓冲区溢出。也是</span><span lang="EN-US">c/c++</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">语言几乎很难避免的一个缺陷。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">我们只需修改这个地址，返回一个我们想要他返回的地址，就可以成功地做一些坏事。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">顺便说明下，程序的必须在</span><span lang="EN-US">Release</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">模式下，具体为什么我也还没搞清。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">接下来继续修改程序</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">&nbsp;</span></p>
<pre class="brush: cpp;fontsize: 100; first-line: 1; ">void foo(int param = 0xAABBAABB)
{
	int  local = 0;
	int* pInt  = 0;
	local = 0xCCDDCCDD;

	pInt = &amp;param;//这里只实验param，local的话也可以，
		      //但local的话会涉及到计算代码长度的问题，
		      //具体需要学习《编译原理》

	pInt -= 1;    //因为AABBAABB处于高地址端，减1到逻辑的低地址端。

	printf("&amp;local = %p\n",&amp;local);
	printf("*pInt = %p\n",*pInt);
	printf("&amp;pInt = %p\n",&amp;pInt);
	printf("&amp;param = %p\n",&amp;param);
	//猜想一下，输出的结果，按前面高地址端是栈底
	//那结果应该是local先进栈，值应该比pChar大

	printf("%p\n%p\n%p\n%p\n%p\n%p\n");
	//这里会把栈帧的内容打印出来
}</pre>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">输出为</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;main = 00401090</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;local = 0013FF68</span></p>
<p class="MsoNormal"><span lang="EN-US">*pInt = 004010B0</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;pInt = 0013FF6C</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;param = 0013FF78</span></p>
<p class="MsoNormal"><span lang="EN-US">CCDDCCDD</span></p>
<p class="MsoNormal"><span lang="EN-US">0013FF74</span></p>
<p class="MsoNormal"><span lang="EN-US">0013FF7C</span></p>
<p class="MsoNormal"><span lang="EN-US">004010B0</span></p>
<p class="MsoNormal"><span lang="EN-US">AABBAABB</span></p>
<p class="MsoNormal"><span lang="EN-US">0013FFC0</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">注意，</span><span lang="EN-US">main</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">的地址会发生改变</span></p>
<p class="MsoNormal"><span lang="EN-US">*pInt = 00401080</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">，我们已经成功让指针指向我们想要的地址，接下来，我们修改</span><span lang="EN-US">pInt</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">里的内容。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">重新写一个函数</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">&nbsp;</span></p>
<pre class="brush: cpp;fontsize: 100; first-line: 1; ">void HelloWorld()
{
	printf("哈哈，想不到吧！");
}</pre>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">写到</span><span lang="EN-US">foo</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">上面</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">我们开始修改</span><span lang="EN-US">pInt</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">的内容</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">&nbsp;</span></p>
<pre class="brush: cpp;fontsize: 100; first-line: 1; ">#include "stdafx.h"

void HelloWorld()
{
	printf("哈哈，想不到吧！\n");
}

void foo(int param = 0xAABBAABB)
{
	int  local = 0;
	int* pInt  = 0;
	local = 0xCCDDCCDD;

	pInt = &amp;param;//这里只实验param，local的话也可以，
		      //但local的话会涉及到计算代码长度的问题，
		      //具体需要学习《编译原理》

	pInt -= 1;    //因为AABBAABB处于高地址端，减1到逻辑的低地址端。

	printf("&amp;local = %p\n",&amp;local);
	printf("*pInt = %p\n",*pInt);

	*pInt = reinterpret_cast&lt;int&gt;(&amp;HelloWorld);//修改pInt的内容，把返回地址改为HelloWorld

	printf("&amp;helloWorld = %p\n",&amp;HelloWorld);

	printf("&amp;pInt = %p\n",&amp;pInt);
	printf("&amp;param = %p\n",&amp;param);
	//猜想一下，输出的结果，按前面高地址端是栈底
	//那结果应该是local先进栈，值应该比pChar大

	printf("%p\n%p\n%p\n%p\n%p\n%p\n");
	//这里会把栈帧的内容打印出来
}</pre>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">接下来输出，</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;main = 004010D0</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;local = 0013FF68</span></p>
<p class="MsoNormal"><span lang="EN-US">*pInt = 004010F0</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;helloWorld = 00401000</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;pInt = 0013FF6C</span></p>
<p class="MsoNormal"><span lang="EN-US">&amp;param = 0013FF78</span></p>
<p class="MsoNormal"><span lang="EN-US">CCDDCCDD</span></p>
<p class="MsoNormal"><span lang="EN-US">0013FF74</span></p>
<p class="MsoNormal"><span lang="EN-US">0013FF7C</span></p>
<p class="MsoNormal"><span lang="EN-US">00401000</span></p>
<p class="MsoNormal"><span lang="EN-US">AABBAABB</span></p>
<p class="MsoNormal"><span lang="EN-US">0013FFC0</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">哈哈，想不到吧！</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">哈哈，我们成功达到我们想要的目的。但带来一个问题，我们并没完全成功，因为程序在这里崩溃了，为什么？因为</span><span lang="EN-US">HelloWorld</span><span style="font-family: 宋体; mso-ascii-font-family: &amp;amp;amp; mso-hansi-font-family: &amp;amp;amp;">根本没进栈，所以程序无法返回到一个正常值，要使得成为一个完整的程序，我们还需要继续深入。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

<p>本文网址:<a href="http://mandelbrot89.appspot.com/2010/09/25/2010_0926.html">http://mandelbrot89.appspot.com/2010/09/25/2010_0926.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://feeds.feedburner.com/http/mandelbrot89appspotcom/feed/comments</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
