﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-我生如山-随笔分类-网文采摘</title><link>http://www.cppblog.com/hugai/category/10540.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 23 May 2009 12:01:30 GMT</lastBuildDate><pubDate>Sat, 23 May 2009 12:01:30 GMT</pubDate><ttl>60</ttl><item><title>[转载]浅析本机API</title><link>http://www.cppblog.com/hugai/archive/2009/05/22/85450.html</link><dc:creator>悟山</dc:creator><author>悟山</author><pubDate>Fri, 22 May 2009 10:43:00 GMT</pubDate><guid>http://www.cppblog.com/hugai/archive/2009/05/22/85450.html</guid><wfw:comment>http://www.cppblog.com/hugai/comments/85450.html</wfw:comment><comments>http://www.cppblog.com/hugai/archive/2009/05/22/85450.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/hugai/comments/commentRss/85450.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/hugai/services/trackbacks/85450.html</trackback:ping><description><![CDATA[原文地址：<a href="http://www.xfocus.net/articles/200503/782.html">http://www.xfocus.net/articles/200503/782.html</a><br><br><br>创建时间：2005-03-09<br>文章属性：转载<br>文章提交：<a href="https://www.xfocus.net/bbs/index.php?lang=cn&amp;act=Profile&amp;do=03&amp;MID=82515"><u><font color=#0066cc>cisocker</font></u></a> (cisocker_at_163.com)<br><br>by sunwear [E.S.T]&nbsp;&nbsp;<br>2004/10/02&nbsp;&nbsp; <br>shellcoder@163.com<br><br>此文只能说是一篇笔记，是关于本机API的.本机API是除了Win32 API，NT平台开放了另一个基本接口。本机API也被很多人所熟悉，因为内核模式模块位于更低的系统级别，在那个级别上环境子系统是不可见的。尽管如此，并不需要驱动级别去访问这个接口，普通的Win32程序可以在任何时候向下调用本机API。并没有任何技术上的限制，只不过微软不支持这种应用开发方法。&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;User32.dll,kernel32.dll,shell32.dll,gdi32.dll,rpcrt4.dll,comctl32.dll,advapi32.dll,version.dll等dll代表了Win32 API的基本提供者。Win32 API中的所有调用最终都转向了ntdll.dll，再由它转发至ntoskrnl.exe。ntdll.dll是本机 API用户模式的终端。真正的接口在ntoskrnl.exe里完成。事实上，内核模式的驱动大部分时间调用这个模块，如果它们请求系统服务。Ntdll.dll的主要作用就是让内核函数的特定子集可以被用户模式下运行的程序调用。Ntdll.dll通过软件中断int 2Eh进入ntoskrnl.exe，就是通过中断门切换CPU特权级。比如kernel32.dll导出的函数DeviceIoControl()实际上调用ntdll.dll中导出的NtDeviceIoControlFile()，反汇编一下这个函数可以看到，EAX载入magic数0x38，实际上是系统调用号，然后EDX指向堆栈。目标地址是当前堆栈指针ESP+4，所以EDX指向返回地址后面一个，也就是指向在进入NtDeviceIoControlFile()之前存入堆栈的东西。事实上就是函数的参数。下一个指令是int 2Eh，转到中断描述符表IDT位置0x2E处的中断处理程序。<br><br>反编汇这个函数得到：<br><br>mov eax, 38h<br><br>lea edx, [esp+4]<br><br>int 2Eh<br><br>ret 28h<br><br>当然int 2E接口不仅仅是简单的API调用调度员，他是从用户模式进入内核模式的main gate。<br><br>W2k Native API由248个这么处理的函数组成，比NT 4.0多了37个。可以从ntdll.dll的导出列表中很容易认出来：前缀Nt。Ntdll.dll中导出了249个，原因在于NtCurrentTeb()为一个纯用户模式函数，所以不需要传给内核。令人惊奇的是，仅仅Native API的一个子集能够从内核模式调用。而另一方面，ntoskrnl.exe导出了两个Nt*符号，它们不存在于ntdll.dll中: NtBuildNumber, NtGlobalFlag。它们不指向函数，事实上，是指向ntoskrnl.exe的变量，可以被使用C编译器extern关键字的驱动模块导入。Ntdll.dll和ntoskrnl.exe中都有两种前缀Nt*,Zw*。事实上ntdll.dll中反汇编结果两者是一样的。而在ntoskrnl.exe中，nt前缀指向真正的代码，而zw还是一个int 2Eh的stub。也就是说zw*函数集通过用户模式到内核模式门传递的，而Nt*符号直接指向模式切换以后的代码。Ntdll.dll中的NtCurrentTeb()没有相对应的zw函数。Ntoskrnl并不导出配对的Nt/zw函数。有些函数只以一种方式出现。<br><br>2Eh中断处理程序把EAX里的值作为查找表中的索引，去找到最终的目标函数。这个表就是系统服务表SST，C的结构SYSTEM_SERVICE_TABLE的定义如下:清单也包含了结构SERVICE_DESCRIPTOR_TABLE中的定义，为SST数组第四个成员，前两个有着特别的用途。<br><br>typedef NTSTATUS (NTAPI *NTPROC) ( ) ；<br><br>typedef NTPROC *PNTPROC；<br><br>#define NTPROC_ sizeof (NTPROC)<br><br>typedef struct _SYSTEM_SERVICE_TABLE<br><br>{ PNTPROC ServiceTable; // 这里是入口指针数组<br><br>PDWORD CounterTable; // 此处是调用次数计数数组<br><br>DWORD ServiceLimit ; // 服务入口的个数<br><br>PBYTE ArgumentTable; // 服务参数字节数的数组<br><br>) SYSTEM_SERVICE_TABLE ,<br><br>* PSYSTEM_SERVICE_TABLE ,<br><br>* * PPSYSTEM_SERVICE_TABLE ;<br><br>/ / _ _ _ _ _ _ _ _ _ _ _ _<br><br>typedef struct _SERVICE_DESCRIPTOR_TABLE<br><br>{ SYSTEM_SERVICE_TABLE ntoskrnl ; // ntoskrnl所实现的系统服务，本机的API}<br><br>SYSTEM_SERVICE_TABLE win32k; // win32k所实现的系统服务<br><br>SYSTEM_SERVICE_TABLE Table3; // 未使用<br><br>SYSTEM_SERVICE_TABLE Table4; // 未使用<br><br>} SERVICE_DESCRIPTOR_TABLE ,<br><br>* PSERVICE_DESCRIPTOR_TABLE,<br><br>* PPSERVICE_DESCRIPTOR_TABLE ；<br><br>ntoskrnl通过KeServiceDescriptorTable符号,导出了主要SDT的一个指针。内核维护另外的一个SDT，就是KeServiceDescriptorTableShadow。但这个符号没有导出。要想在内核模式组件中存取主要SDT很简单，只需两行C语言的代码:<br><br>extern PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable;<br><br>PSERVICE_DESCRIPTOR_TABLE psdt= KeServiceDescriptorTable;<br><br>NTPROC为本机 API的方便的占位符，他类似于Win32编程中的PROC。Native API正常的返回应该是一个NTSTATUS代码，他使用NTAPI调用约定，它和_stdcall一样。ServiceLimit成员有在ServiceTable数组里找到的入口数目。在2000下，默认值是248。ArgumentTable为BYTEs的数组，每一个对应于ServiceTable的位置并显示了在调用者堆栈里的参数比特数。这个信息与EDX结合，这是内核从调用者堆栈copy参数到自己的堆栈所需的。CounterTable成员在free buid的2000中并没有使用到，在debug build中，这个成员指向代表所有函数使用计数的DWORDS数组，这个信息能用于性能分析。<br>&nbsp;&nbsp;&nbsp;&nbsp;可以使用这个命令来显示:dd KeServiceDescriptorTable，调试器把此符号解析为0x8046e0c0。只有前四行是最重要的，对应那四个SDT成员。<br>&nbsp;&nbsp;&nbsp;&nbsp;运行这个命令:ln 8046e100，显示符号是KeServiceDescriptorTableShadow，说明第五个开始确实为内核维护的第二个SDT。主要的区别在于后一个包含了win32k.sys的入口，前一个却没有。在这两个表中，Table3与Table4都是空的。Ntoskrnl.exe提供了一个方便的API函数。这个函数的名字为：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;KeAddSystemServiceTable<br>此函数去填充这些位置。<br><br>2Eh的中断处理标记是KisystemService()。这也是ntoskrnl.exe没有导出的内部的符号，但包含在2k符号文件中。关于KisystemService的操作如下：<br><br>1 从当前的线程控制块检索SDT指针<br><br>2 决定使用SDT中4个SST的其中一个。通过测试EAX中递送ID的第12和13位来决定。ID在0x0000-0x0fff的映射至ntoskrnl表格，ID在<br><br>0x1000与0x1ffff的分配给win32k表格。剩下的0x2000-0x2ffff与<br><br>0x3000-0x3ffff则是Table3和Table4保留。<br><br>3 通过选定SST中的ServiceLimit成员检查EAX的0－11位。如果ID超过了范围，返回错误代码为STATUS_INVALID_SYSTEM_SERVICE。<br><br>4 检查EAX中的参数堆栈指针与MmUserProbeAddress。这是一个ntoskrnl导出的全局变量。通常等于0x7FFF0000，如果参数指针不在这个地址之下，返回STATUS_ACCESS_VIOLATION。<br><br>5 查找ArgumentTable中的参数堆栈的字节数，从调用者的堆栈copy所有的参数至当前内核模式堆栈。<br><br>6 搜索serviceTable中的服务函数指针，并调用这个函数。<br><br>7 控制转到内部的函数KiserviceExit，在此次服务调用返回之后。<br><br>从对SDT的讨论可以看到与本机API一起还有第二个内核模式接口。这个接口把Win32子系统的图形设备接口和窗口管理器和内核模式组件Win32k连接起来。Win32k接口一样是基于int 2eh。本机API的服务号是从0x0000到0x0fff，win32k的服务号是从0x1000到0x1fff。(ddW32pServiceTable认定win32k.sys的符号可用。)win32k总共包含639个系统服务。<br><br><br>2Eh的处理过程没有使用全局SDT KeServiceDescriptorTable。<br><br>而是一个与线程相关的指针。显然，线程可以有不同得SDT相关到自身。线程初试化的时候,KeInitializeThread()把KeServiceDescriptorTable写到线程的控制块。尽管这样，这个默认设置之后可能被改变为其它值，例如KeServiceDescriptorTableShadow。<br><br><br>Windows 2000运行时库<br><br>Ntdll.dll至少导出了不少于1179个符号。其中的249/248是属于Nt*/zw*集合。所以还有682个函数不是通过int 2eh门中转。很显然，这么多的函数不依靠2k的内核。<br><br>其中一些是和c运行时库几乎一样的函数。其实ntoskrnl也实现了一些类似Ｃ运行时库的一些函数。可以通过ddk里的ntdll.lib来链接和使用这些函数。反汇编ntdll.dll与ntoskrnl.exe的Ｃ运行时函数能发现，ntdll.dll并不是依赖ntoskrnl.exe。这两个模块各自实现了这些函数。<br><br>除了Ｃ运行时库外，2000还提供了一个扩展的运行时函数集合。再一次，ntdll.dll与ntoskrnl.exe各自实现了它们。同样，实现集合有重复，但是并不完全匹配。这个集合的函数都是以Rtl开头的。2000运行时库包括一些辅助函数用于Ｃ运行时候无法完成的任务。例如有些处理安全事务，另外的操纵2000专用的数据结构，还有些支持内存管理。微软仅仅在DDK中记录了很有用的406个函数中的115个函数。<br><br>Ntdll.dll还提供了另外一个函数集合，以__e前缀开头。实际上它们用于浮点数模拟器。<br><br>还有很多的函数集合，所有这些函数的前缀如下：<br><br>__e(浮点模拟),Cc(Cache管理),Csr(c/s运行时库),Dbg(调试支持)，Ex(执行支持),FsRtl(文件系统运行时)，Hal(硬件抽象层),Inbv(系统初试化/vga启动驱动程序bootvid.dll),Init(系统初试化),Interlocked(线程安全变量操作),Io(IO管理器),Kd(内核调试器支持),Ke(内核例程),Ki(内核中断处理),Ldr(映象装载器),Lpc(本地过程调用),Lsa(本地安全授权),Mm(内存管理),Nls(国际化语言支持),Nt(NT本机API)，Ob(对象管理器),Pfx(前缀处理)，Po(电源管理),Ps(进程支持),READ_REGISTER_(从寄存器地址读)，Rtl(2k运行时库),Se(安全处理),WRITE_REGISTER_（写寄存器地址）,Zw(本机API的替换叫法)，&lt;其它&gt;(辅助函数和Ｃ运行时库)。<br><br>当编写从用户模式通过ntdll.dll或内核模式通过ntoskrnl.exe和2000内核交互的软件的时候，需要处理很多基本的数据结构，这些结构在Win32世界中很少见到。<br><br>常用数据结构<br><br>l&nbsp;&nbsp;&nbsp;&nbsp; 整数<br><br>ANSI字符是有符号的，而Unicode WCHAR是无符号的<br><br>MASM的TBYTE是80位的浮点数，用于高精度浮点运算单元操作，注意它与Win32的TBYTE（text byte）完全不同。<br><br>TABLE 2-3. Equivalent Integral Data Types<br><br>BITS&nbsp;&nbsp;&nbsp;&nbsp;MASM&nbsp;&nbsp; FUNDAMENTAL&nbsp;&nbsp;&nbsp;&nbsp;ALIAS #1&nbsp;&nbsp;&nbsp;&nbsp;ALIAS #2&nbsp;&nbsp;SIGNED<br><br>8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BYTE&nbsp;&nbsp;&nbsp;&nbsp;unsigned char&nbsp;&nbsp;UCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHAR<br>16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;unsigned short USHORT&nbsp;&nbsp;&nbsp;&nbsp; WCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SHORT<br><br>32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp; unsigned long&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LONG<br><br>32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp; unsigned int&nbsp;&nbsp;&nbsp;&nbsp;UINT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT<br><br>64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QWORD&nbsp;&nbsp; unsigned _int64 ULONGLONG DWORDLONG LONGLONG<br><br>80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TBYTE&nbsp;&nbsp;&nbsp;&nbsp;N/A<br><br>typedef union _LARGE_INTEGER<br><br>{&nbsp;&nbsp;struct{<br><br>ULONG LowPart;<br><br>LONG HighPart；};<br><br>LONGLONG QuadPart;<br><br>}<br><br>LARGE_INTEGER , * PULARGE_INTEGER ;<br><br>typedef union _ULARGE_INTEGER{<br><br>struct{<br><br>ULONG LowPart;<br><br>ULONG HighPart;｝<br><br>ULONGLONG QuadPart;<br><br>}ULARGE_INTEGER, *PULARGE_INTEGER;<br><br>l&nbsp;&nbsp;&nbsp;&nbsp; 字符<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Win32编程中PSTR用户CHAR*，PWSTR用于WCHAR*。取决于是否定义了UNICODE，PTSTR解释为PSTR或者PWSTR。在2k内核模式下，常用的数据类型是UNICODE_STRING，而STRING用来表示ANSI字符串:<br><br>typedef struct _UNICODE_STRING{<br><br>USHORT Length; //当前字节长度，不是字符！！！<br><br>USHORT MaximumLength; //Buffer的最大字节长度<br><br>PWSTR Buffer;}UNICODE_STRING , * PUNICODE_STRING ;<br><br>typedef struct _STRING{<br><br>USHORT Length;<br><br>USHORT MaximumLength;<br><br>PCHAR Buffer;}STRING, *PSTRING;<br><br>typedef STRING ANSI_STRING, *PANSI_STRING;<br><br>typedef STRING OEM_STRING, *POEM_STRING;<br><br>&nbsp;&nbsp;操纵函数:RtlCreatUnicodeString(),RtlInitUnicodeString(),<br><br>RtlCopyUnicodeString()等等<br><br>l&nbsp;&nbsp;&nbsp;&nbsp; 结构<br><br>许多内核API函数需要一个固定大小的OBJECT_ATTRIBUTES结构，比如NtOpenFile()。对象的属性是OBJ_*值的组合，可以从ntdef.h中查到。<br><br>IO_STATUS_BLOCK结构提供了所请求操作结果的信息，很简单，status成员包含一个NTSTATUS代码, 如果操作成功 information成员提供特定请求的信息。<br><br>还有一个结构是LIST_ENTRY，这是一个双向环链表。<br><br>typedef struct _OBJECT_ATTRIBUTES<br><br>{<br><br>ULONG Length;<br><br>HANDLE RootDirectory;<br><br>PUNICODE_STRING ObjectName;<br><br>ULONG Attributes;<br><br>PVOID SecurityDescriptor;<br><br>PVOID SecurityQualityOfService;<br><br>} OBJECT_ATTRIBDTES, *POBJECT_ ATTRIBUTES;<br><br>typedef struct _IO_STATUS_BLOCK<br><br>{<br><br>NTSTATDS Status;<br><br>ULONG Information;<br><br>}IO_STATUS_BLOCK , * PIO_STATUS_BLOCK ;<br><br>typedef struct _LIST_ENTRY<br><br>{<br><br>Struct _LIST_ENTRY *Flink;<br><br>Struct _LIST_ENTRY *Blink;<br><br>}LIST_ENTRY, *PLIST_ENTRY;<br><br>双向链表的典型例子就是进程和线程链。内部变量PsActiveProcessHead是一个LIST_ENTRY结构，在ntoskrnl.exe的数据段中，指定了系统进程列表的第一个成员。<br><br>CLIENT_ID结构由进程和线程ID组成。<br><br>typedef struct _CLIENT_ID<br><br>{ HANDLE UniqueProcess;<br><br>HANDLE UniqueThread;<br><br>)CLIENT_ID, *PCLIENT_ID;<br><br>想要从用户模式调用ntdll.dll中的API函数，必须考虑到以下四点:<br><br>1 SDK头文件没有包括这些函数的原型<br><br>2 这些函数使用的若干基本数据类型没有包括在SDK文件中<br><br>3 SDK和DDK头文件不兼容，不能在win32的c源文件包含ntddk.h中<br><br>4 ntdll.lib没有包括在VC的默认导入库列表中。<br><br>第4个很容易解决：#progma comment(linker,&#8220;/defaultlib:ntdll.lib&#8221;)<br><br>缺失的定义比较难解决，最简单的方法是写一个自定义的头文件，刚刚包含需要调用ntdll.dll中函数的定义。幸运的是，已经在光盘的w2k_def.h文件中做了这个工作。因为这个头文件将用于用户模式和内核模式程序，所以必须在用户模式代码中，#include&lt;w2k_def.h&gt;之前#define _USER_MODE_，使得DDK中出现而SDK中没有的定义可用。<br><br><br>本文部分翻译于一篇电子书&lt;win api about&gt;.也感谢朋友GameHunter这位英语极好的朋友帮忙.与Free的指导 
<img src ="http://www.cppblog.com/hugai/aggbug/85450.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/hugai/" target="_blank">悟山</a> 2009-05-22 18:43 <a href="http://www.cppblog.com/hugai/archive/2009/05/22/85450.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>独角戏</title><link>http://www.cppblog.com/hugai/archive/2009/05/12/82699.html</link><dc:creator>悟山</dc:creator><author>悟山</author><pubDate>Tue, 12 May 2009 08:39:00 GMT</pubDate><guid>http://www.cppblog.com/hugai/archive/2009/05/12/82699.html</guid><wfw:comment>http://www.cppblog.com/hugai/comments/82699.html</wfw:comment><comments>http://www.cppblog.com/hugai/archive/2009/05/12/82699.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/hugai/comments/commentRss/82699.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/hugai/services/trackbacks/82699.html</trackback:ping><description><![CDATA[<font size=2><strong>（作者：</strong><a title=sophia20082007 href="http://www.see2say.com/channel/user/default/?userid=62542"><font size=3>sophia20082007</font></a>原文地址：<strong><a href="http://www.see2say.com/Channel/Group/Detail.aspx?Id=7139">http://www.see2say.com/Channel/Group/Detail.aspx?Id=7139</a></strong><strong>）<br><br>永远，永远都只是我一个人在唱独角戏．没有观众，没有掌声。只有我一个主角，孤单的影子如影随形。不分昼夜，不知疲倦的演绎着，属于我自己的灿烂童话。　　我明白，你外表的冷漠并不带表你内心的空洞，你总是习惯向世人隐藏你自己，你渴望被理解，又害怕被人剖析，我知道你讨厌赤裸裸的感觉．　　　我明白，你无助的时候一定像个不知所措的孩子，你坚强的外表下是柔软而敏感的心。我愿意借给你我隐形的肩膀，虽然不宽阔，但足以成为你的依靠。如果你愿意。　　你要明白，我的独角戏永远只在黑暗中绽放，我不停的在寂寞中旋转跳舞，一连转了九十九个圈，裙摆盛开出迷离的花朵，孤单的我还是没有改变。　　 　　我明白，不是爱的人就可以和他在一起。宿命给我的结局，只是让我摊开掌心，里面是空洞的，我所做的一切都是捕捉的风，手里注定一无所有。没有什么东西能够因为不舍而获得怜悯。 爱情不应当只是一场惘然的轮回。　　我不相信永远，我不拥有期待，也不需要诺言。　　可能彼此陌生，或者不是； 　　只愿你曾记记得一个由我孤独演绎的，爱的轨迹画下的独角戏。 </strong></font>
<h5 id=lblInfoContent>&nbsp;</h5>
<img src ="http://www.cppblog.com/hugai/aggbug/82699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/hugai/" target="_blank">悟山</a> 2009-05-12 16:39 <a href="http://www.cppblog.com/hugai/archive/2009/05/12/82699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>天涯流落思无穷，既相逢，又匆匆</title><link>http://www.cppblog.com/hugai/archive/2009/05/12/82698.html</link><dc:creator>悟山</dc:creator><author>悟山</author><pubDate>Tue, 12 May 2009 08:36:00 GMT</pubDate><guid>http://www.cppblog.com/hugai/archive/2009/05/12/82698.html</guid><wfw:comment>http://www.cppblog.com/hugai/comments/82698.html</wfw:comment><comments>http://www.cppblog.com/hugai/archive/2009/05/12/82698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/hugai/comments/commentRss/82698.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/hugai/services/trackbacks/82698.html</trackback:ping><description><![CDATA[（原文地址：<a href="http://blog.cz001.com.cn/index.php/56821/viewspace-863188.html">http://blog.cz001.com.cn/index.php/56821/viewspace-863188.html</a>）　<br><br>告白<br>　　&#8220;岁月的金黄，一年一次供人分享；生命的金黄，一生一次错过就不再辉煌。&#8221;在这我漫漫的前半生中，也许我还很年少无知，也许此时只是人生的一个小小的开端。所以，总是很努力，很用心地去铺垫这段旅程的基石，希望以后能过得好一点，不要像从前，像现在这样。当然，我并不否认我是个幸运的人，因为起码这一切的一切并没有糟到极点，一路也算平平稳稳地走了过来，纵然不很精彩，也算是充实。我害怕错过，所以我依然很努力地去学更多的东西，去纺织那个将会成真的梦想。<br>　　虽然说&#8220;知足常乐&#8221;，我却不是这样一个人。我很难感到满足，我什么都想要，只要我想要，我就会尽最大努力争取。我总是&#8220;不饱&#8221;， 总也不会&#8220;常乐&#8221;。说穿了就是贪心与欲望占了上风。也许这一开始就是个错误，为什么要那么好胜？为什么要那么紧张地过着每一天？人生苦短，说过就过去了。不论我怎么活，太阳总是会从西边落下，明天依然会从东边升起。而每一个在世的人，就像夹在黎明与黄昏之间的那一堆星星。 是星星都会闪光，但为何一定要去做北极星？我也不清楚。似乎有一种压力，有一种负担，有一种过往的经历硬要我不甘平凡，然而我却依然很平凡，就像沙漠中的一粒小沙子。<br>　　十几年寒窗走了过来，却发现自己什么也不是，什么也不会，什么也没有。所以总是告诫自己：要把握眼前，在茫茫人海中分明地辨认出自己，在世界的角落找一个位置给自己。整天东奔西走，寻寻觅觅，让自己忙得没有时间去懊悔，去回忆，是因为害怕回忆里的酸楚湮没自己。<br>　　情缘<br>　　曾经，我害怕思家的遥远，也害怕陌生的天与地。人总要学着自己长大，学着攀上岁月的肩膀，到达各种陌生的地方。虽然这儿不是天堂，但我却找到了不必担心下雨的星空，找到了大海一样的包容。于是终于相信了&#8220;燃起木柴，关紧门窗，让温暖和你一起来临， 在这个寒冷的冬季。&#8221;这一句曾被遗忘过的话。<br>　　有同学曾对我说：&#8220;我们只是偶然出现在我们终将消失的地方。&#8221;的确如此，但既然冥冥中注定要相逢，我们就该相识、相知、相惜，趁着还没消失，让我们一起珍惜可以共度的每一刻，才不至于在分别的时候突然发现&#8220;我们总有太多的来不及，很多话来不及说，来不及听，来不及问，很多事情来不及做。我们唯一能做的只不过是在还来得及的时候，小心呵护眼前的拥有。&#8221;我们在这个地方相遇，是缘，将来散了，也是缘，只是缘浅了&#8230;&#8230;<br>　　岁月流逝后，这段日子里的相处沉淀下来的，将会是一些刻满回忆和历史的沙粒，那里藏着的有心酸，也有欢愉，有包容，也有叹息。明天的明天，我们面临的将会有许许多多更陌生的人或物，所以不必祈求我们都能记住这份记忆，只希望在还没成为记忆时，好好珍惜。<br>　　相处，害怕沉默；相交，最忌无语。敞开你的胸怀，告诉我你想说的话，让我和你一起分担你的喜与悲。对我而言，我害怕一个人在陌生的角落里作梦，更害怕在充满回音的空洞中哭泣。<br>　　&#8220;终有一天，我们要远走高飞，为了各自的梦想，就像飘落的叶子走向不同的天涯。&#8221;这句话将会在某一天实现，但那又有什么所谓，我们曾是树上的叶子，风声吹响的是你我的过往。<br>　　爱情<br>　　爱情，对于我而言，仍然是一个很遥远的传说。也许这个传说将会绽放着异常美丽的光环，也许会饱含着心酸的泪水，也或许这个传说只是一个平平淡淡的风和影的故事，但这都将会是很久以后的事情。遥远到望断长空也无法极目的某个地方，遥远到望穿秋水也无法期待的某个春秋。也许是因为我手足无措，也许是我害怕而又期待的情愫的缘故，所以在我的心还没有被激起涟漪的现在，在我脑海还没有浮现浪漫晨昏的此刻，我依然固执地认为：这一切只是一个传说，一个不会向我走来却又要我主动靠近的传说。<br>　　有人曾说：&#8220;爱&#8221;和&#8220;死&#8221;是人生中解决不了的两大难题，人在青年时为爱所困惑，在老年时被死所困惑，一生都不得安宁；爱情像一把慢刀，一点一点地刺进人的肌肤，而死则是一把快刀，一下子就结束了所有的痛苦；我不害怕死亡，我却害怕爱情；我能够忍受决绝的快刀，却不能忍受延宕的慢刀。不管他说得对与否，我都相信：这世上没有永远都幸福或痛苦的时刻，自然也没有永远都甜蜜的罗曼史。纵然那些雪中送炭、百般呵护、花前月下的时候总是那么令人神往，但那心灵上的煎熬，那两处闲愁的相思，那害怕失去所拥有的担心，那决裂的心酸又会有多少人能够明白？那不能继续再爱或者不被爱的痛苦，并不是每一个人都能够承受的。我仍相信爱情，但我并不刻意追寻，只是静静地、静静地漂流，直到有一天，在阳光与海滩的岸边，让我的船静静地靠岸。<br>　　年少痴狂，多少情歌被唱得天翻地覆。但我依然记得有一句是：&#8220;我能想到最浪漫的事，就是和你一起慢慢变老。&#8221;也许，大千世界中，这才是真正的爱情，一份不掺杂质、不受污染的感情。但愿，当我的船靠岸的那一剎，当丘比特之箭射穿我心脏的时候，我依然相信这种绝尘的情缘。<br>　　也许由于我祈求的是一种完美人生，所以刀光剑影的小说我是不看的，但琼瑶的小说也看过不少，都是千篇一律。于是我总会说：&#8220;爱情也无非就是这样。&#8221;仿佛我是个过来人一样，所以总觉得自己好像很老。曾经有一个说法是：&#8220;没有经历爱情的人生是不完整的人生。&#8221;我追求完美，我却害怕破碎。所以，在情感方面我很吝啬，我的心跳也不会为了某个人而加速。就目前而言，心如止水地过着每一天不也很好吗？ 起码不用担心风暴来临时，会将我的船儿吹翻。<br>　　&#8220;天涯流落思无穷，既相逢，又匆匆。&#8221;面对今朝明夕，回首往昔。在风雨兼程的路上，我能做的只是边走边收拾，收拾我生命中的每一个瞬间。 <br>
<img src ="http://www.cppblog.com/hugai/aggbug/82698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/hugai/" target="_blank">悟山</a> 2009-05-12 16:36 <a href="http://www.cppblog.com/hugai/archive/2009/05/12/82698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>