<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="http://feeds.qzone.qq.com/rss.xsl" version="1.0"?>
<rss version="2.0" xmlns:qz="http://qzone.qq.com">
<channel>
<title><![CDATA[无忧网盟]]></title>
<description><![CDATA[无忧空间]]></description>
<link>http://611125567.qzone.qq.com</link>
<lastBuildDate>Sat, 28 Nov 2009 22:11:00 GMT</lastBuildDate>
<generator>Qzone</generator>
<language>zh-cn</language>
<copyright>Copyright (C), 2005-2008, Tencent Tech. Co., Ltd.</copyright>
<pubDate>Sat, 09 May 2009 07:29:56 GMT</pubDate>

<item>
<title><![CDATA[本Q空间已不再更新]]></title>
<link>http://611125567.qzone.qq.com/blog/1241854196</link>
<description><![CDATA[QQ空间不再更新，留言请至博客空间<a href="http://www.wyspace.cn/qzone" target="_blank">http://www.wyspace.cn/qzone</a><wbr /><br><embed invokeURLs="false" allowNetworking="internal" allowscriptaccess="never" menu="false" id="flash0" width="823" height="560" src="http://www.wyspace.cn/qzone/index.swf" /> <!--v:3.2--> ]]></description>
<category><![CDATA[天下杂侃]]></category>
<author><![CDATA[611125567@qq.com(无忧网盟)]]></author>
<comments>http://611125567.qzone.qq.com/blog/1241854196#comment</comments>
<qz:effect>134746112</qz:effect>
<pubDate>Sat, 09 May 2009 07:29:56 GMT</pubDate>
<guid>http://611125567.qzone.qq.com/blog/1241854196</guid>
</item>

<item>
<title><![CDATA[java三大问题]]></title>
<link>http://611125567.qzone.qq.com/blog/1240156890</link>
<description><![CDATA[<span style="font-weight:bold"><wbr />问题一：我声明了什么！<br></span><wbr />　　String s = &quot;Hello world!&quot;;<br>　　许多人都做过这样的事情，但是，我们到底声明了什么？回答通常是：一个String，内容是“Hello world！”。这样模糊的回答通常是概念不清的根源。如果要准确的回答，一半的人大概会回答错误。<br>　　这个语句声明的是一个指向对象的引用，名为“s”，可以指向类型为String的任何对象，目前指向&quot;Hello world！&quot;这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象，我们只是声明了一个只能指向String对象的引用变量。所以，如果在刚才那句语句后面，如果再运行一句：<br>　　String string = s;<br>　　我们是声明了另外一个只能指向String对象的引用，名为string，并没有第二个对象产生，string还是指向原来那个对象，也就是，和s指向同一个对象。<br>　　<span style="font-weight:bold"><wbr />问题二：&quot;==&quot;和equals方法究竟有什么区别？</span><wbr /><br>　　==操作符专门用来比较变量的值是否相等。比较好理解的一点是：<br>　　int a=10;<br>　　int b=10;<br>　　则a==b将是true。<br>　　但不好理解的地方是：<br>　　String a=new String(&quot;foo&quot;);<br>　　String b=new String(&quot;foo&quot;);<br>　　则a==b将返回false。<br>　　对象变量其实是一个引用，它们的值是指向对象所在的内存地址，而不是对象本身。a和b都使用了new操作符，意味着将在内存中产生两个内容为&quot;foo&quot;的字符串，既然是“两个”，它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值，所以使用&quot;==&quot;操作符，结果会是false.诚然，a 和b所指的对象，它们的内容都是&quot;foo&quot;，应该是“相等”，但是==操作符并不涉及到对象内容的比较。<br>　　对象内容的比较，正是equals方法做的事。<br>　　看一下Object对象的equals方法是如何实现的：<br>　　boolean equals(Object o){<br>　　return this==o;<br>　　}<br>　　Object对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法，那你的类使用equals和使用==会得到同样的结果。同样也可以看出，Object的equals方法没有达到equals方法应该达到的目标：比较两个对象内容是否相等。因为答案应该由类的创建者决定，所以Object把这个任务留给了类的创建者。<br>　　看一下一个极端的类：<br>　　Class Monster{<br>　　private String content;<br>　　...<br>　　boolean equals(Object another){ return true;}<br>　　}<br>　　我覆盖了equals方法。这个实现会导致无论Monster实例内容如何，它们之间的比较永远返回true。<br>　　所以当你是用equals方法判断对象的内容是否相等，请不要想当然。因为可能你认为相等，而这个类的作者不这样认为，而类的equals方法的实现是由他掌握的。如果你需要使用equals方法，或者使用任何基于散列码的集合（HashSet,HashMap,HashTable），请察看一下java doc以确认这个类的equals逻辑是如何实现的。<br>　　<span style="font-weight:bold"><wbr />问题三：String到底变了没有？</span><wbr /><br>　　没有。因为String被设计成不可变(immutable)类，所以它的所有对象都是不可变对象。请看下列代码：<br>　　String s = &quot;Hello&quot;;<br>　　s = s + &quot; world!&quot;;<br>　　s所指向的对象是否改变了呢？从本系列第一篇的结论很容易导出这个结论。我们来看看发生了什么事情。在这段代码中，s原先指向一个String 对象，内容是&quot;Hello&quot;，然后我们对s进行了+操作，那么s所指向的那个对象是否发生了改变呢？答案是没有。这时，s不指向原来那个对象了，而指向了另一个String对象，内容为&quot;Hello world!&quot;，原来那个对象还存在于内存之中，只是s这个引用变量不再指向它了。<br>　　通过上面的说明，我们很容易导出另一个结论，如果经常对字符串进行各种各样的修改，或者说，不可预见的修改，那么使用String来代表字符串的话会引起很大的内存开销。因为String对象建立之后不能再改变，所以对于每一个不同的字符串，都需要一个String对象来表示。这时，应该考虑使用StringBuffer类，它允许修改，而不是每个不同的字符串都要生成一个新的对象。并且，这两种类的对象转换十分容易。<br>　　同时，我们还可以知道，如果要使用内容相同的字符串，不必每次都new一个String。例如我们要在构造器中对一个名叫s的String引用变量进行初始化，把它设置为初始值，应当这样做：<br>　　public class Demo {<br>　　private String s;<br>　　...<br>　　public Demo {<br>　　s = &quot;Initial Value&quot;;<br>　　}<br>　　...<br>　　}<br>　　而非<br>　　s = new String(&quot;Initial Value&quot;);<br>　　后者每次都会调用构造器，生成新对象，性能低下且内存开销大，并且没有意义，因为String对象不可改变，所以对于内容相同的字符串，只要一个String对象来表示就可以了。也就说，多次调用上面的构造器创建多个对象，他们的String类型属性s都指向同一个对象。<br>　　上面的结论还基于这样一个事实：对于字符串常量，如果内容相同，Java认为它们代表同一个String对象。而用关键字new调用构造器，总是会创建一个新的对象，无论内容是否相同。<br>　　至于为什么要把String类设计成不可变类，是它的用途决定的。其实不只String，很多Java标准类库中的类都是不可变的。在开发一个系统的时候，我们有时候也需要设计不可变类，来传递一组相关的值，这也是面向对象思想的体现。不可变类有一些优点，比如因为它的对象是只读的，所以多线程并发访问也不会有任何问题。当然也有一些缺点，比如每个不同的状态都要一个对象来代表，可能会造成性能上的问题。所以Java标准类库还提供了一个可变版本，即StringBuffer。<br> <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[611125567@qq.com(无忧网盟)]]></author>
<comments>http://611125567.qzone.qq.com/blog/1240156890#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Sun, 19 Apr 2009 16:01:30 GMT</pubDate>
<guid>http://611125567.qzone.qq.com/blog/1240156890</guid>
</item>

<item>
<title><![CDATA[一个汇编教程]]></title>
<link>http://611125567.qzone.qq.com/blog/1239815955</link>
<description><![CDATA[大多数人认为汇编很难学，但事实上它很简单，在这个教程我将试图解释一些基本的汇编语言如何工作。<br><br>处理器以内存和寄存器来工作，寄存器类似内存但比内存快得多，寄存器有EAX，EBX，ECX，EDX，ESP，EBP，ESI，EDI，还有段寄存器，(还有一个叫EIP，这个是指令指针，它指示下一条将要执行的指令)<br><br>一些例子：<br><br>sub ebx,eax (ebx=00000005,eax=00000002)<br>让我们把它分成更基本的成分：<br>操作码，参数1，参数2<br><br>操作码是一个指令告诉处理器做什么，在这个例子里是让储存在EBX里面的数值，减少储存在EAX中的这个数。<br><br>在这个例子中EBX=5而EAX=2，所以这个指令执行后EBX的值应该是3(5-2)<br><br>还有请注意：当你看到操作码和两个参数的时候，第一个参数是指令的目标，而第二个参数则是来源。<br><br>sub [esi+13],ebx(ebx=00000003,esi=008AB100)<br>在这个例子里，你可看到第一个参数有一个方括号，这意思是说用一个内存的位置来代替寄存器，内存的位置由方括号中的内容指定，在这个例子里是esi+13(注意13是十六进制数)<br><br>因为ESI=008AB100，所以所指的地址是008AB113。<br>这条指令让保存在008AB113这个地址上的数值，减少保存在EBX上的数量，即3。<br><br>如果在008AB113位置上的数值是100，那么执行这个指令后，008AB113位置上的数值将会是97。<br><br>sub [esi+13],63 (esi=008AB100)<br>这个几乎和上一个完全一样，只不过是用直接数值取代寄存器。<br><br>记住了63实际上是99，因为指令中写的永远都是十六进制。<br><br>假设008AB113这个位置上的数值是100(用十六进制表示是64)，执行这个指令后008AB113位置上的数值将会是1(100-99)。<br><br>sub ebx,[esi+13] (ebx=00000064 esi=008ab100)<br>这个指令让储存在EBX上的数值，减少在008AB113里面储存的数值(ESI+13=008AB100+13=008AB113，你没忘记吧)<br><br>上面直到这里都只使用SUB这个指令，但处理器能理解的指令其实很多很多。<br><br>让我们来看看MOV这个最常用的指令吧，虽然它的名字是MOVE(移动)数据，但它其实只是把数据从一个位置复制到另一个位置罢了。<br><br>MOV工作起来也和SUB完全一样，第一个参数是目标，第二个参数是来源。<br><br>举例：<br>MOV eax,ebx(eax=5,ebx=12)<br>把储存在EBX的数值复制到EAX里面<br><br>所以，如果这条指令被执行，那么EAX里面的数值会是12(并且EBX里面仍然是12)<br><br>MOV [edi+16],eax (eax=00000064, edi=008cd200)<br>这个指令把保存在EAX里面的数值(十六进制数64，也即十进制的100)放到EDI+16(008CD200+16=008CD216)这个位置。<br>所以执行这个指令之后，储存在008CD216这个位置上的数值将会是100(十六进制数64)<br><br>就象你看到的，它工作起来也和SUB指令一样。<br><br>然后，还有一些指令只有一个参数，例如INC和DEC。<br>举例：<br>inc eax :EAX中的数值加1<br>dec ecx :ECX中的数值减1<br>dec [ebp]: 将EBP所指的内存地址处的数值减1<br><br>现在我只讲32位寄存器(EAX，EBX，ECX......)，但其实还有16位寄存器和8位寄存器可以使用的，16位寄存器是：AX，BX，CX，DX，SP，BP，SI，DI；8位寄存器是：AH，AL，BH，BL，CH，CL，DH，DL。<br><br>请注意当你改变了AH或AL寄存器时你也同时改变了AX寄存器，并且如果你改变了AX寄存器你也同时改变了EAX，其他的BL+BH+BX+EBX，CH+CL+CX+ECX，DH+DL+DX+EDX也一样。<br><br>(CCB注：以AX为例，AX是一个十六位寄存器，而AH是八位寄存器，它是指AX寄存器的高八位，而AL则是指AX的低八位。而32位的CPU增加了32位的寄存器，即EAX是在AX的基础上再加十六位，举例说明：<br>如果EAX的数值是(二进制)：<br>EAX 00000000000000001101000100100111<br>那么<br>AX 1101000100100111<br>而AH，AL则分别是：<br>AH 11010001<br>AL 00100111<br>即AX包含AH和AL，而EAX包含AX，当然也包含AH和AL，不过WINDOWS上的程序一般比较少使用8位和16位寄存器)<br><br>你可以几乎完全一样地使用这些不同的寄存器，但它们只改变1(8位寄存器)或2(16位寄存器)字节，而不是改变4(32位寄存器)字节。<br><br>举例<br>dec al:8位寄存器AL减1<br>sub [esi+12],al:将储存在[ESI+13]所指位置上的一个1字节数值，减少AL寄存器中的数值<br>mov al,[esi+13]:将[ESI+13]所指的位置上的1字节数值，放到AL寄存器中<br><br>请注意，将16位和8位寄存器用来指示内存地址这是完全不可能的，例如：mov [al+12],0 是错误的。<br><br>其实还有64位和128位寄存器，但我不想讨论它们，因为它们比较难于使用，并且不能用于那些可以用于32位寄存器的指令。<br><br>那么，还有JUMP(跳转)，LOOP(循环)和CALL(调用)<br>JMP：<br>JMP指令简单地修改指令指针(EIP)到JMP所指的位置并且继续执行下去。<br><br>跳转里面还有条件跳转，它只在特定的条件成立时才改变指令指针。(例如根据比较指令(CMP)的结果来设置跳转)<br><br>JA=大于则跳转<br>JNA=不大于则跳转<br>JB=小于则跳转<br>JE=如果相等刚跳转<br>JC=如果进位(进位标志置位)刚跳转<br>还有好多其他的条件跳转<br><br>LOOP：<br>循环指令和跳转指令差不多都是跳转到内存的其他位置去执行，不同的是它只有在ECX寄存器非0时才跳转。<br><br>(CCB注：也就是说，ECX是个循环的计数器，比如当循环开始时，ECX里面的数值是3，那么执行一次循环后，ECX会自动减1，并且跳到前面重复循环，第二次执行后ECX又再减1，当ECX为0的，不再跳回去执行)<br><br>当然，循环也有条件循环：<br>LOOPE：当ECX非0，并且“零标志”没有置位时循环<br>LOOPZ：和LOOPE相同<br>LOOPNE：当ECX非0，并且“零标志”被置位时循环<br>LOOPNZ：的LOOPNZ相同<br><br>(CCB 注：CPU中有另一个特有的寄存器，零标志是这个特殊的寄存器中的一个“位(BIT)”，很多转向指令例如跳转，循环等都会根据这个特殊的寄存器中的某些位来做为条件，例如这里的零标志位和上面的进位标志，一般一个标志位上是1时即被置位，而该位为0时为没有置位)<br><br>我想我还得解释一下什么是标志，它是处理器中的一些位，可以用来检查前一指令的一些条件，好象“cmp al,12”如果AL=12那么零标志位被设置为TURE(真)，否则零标志位被设置为FALSE(假)。<br><br>CALL：<br>调用其实和跳转一样，除了它使用堆栈来返回(即返回原处继续执行)。<br><br>解释一下堆栈：<br>堆栈是由ESP寄存器为指针所指的内存位置，你可以使用PUSH命令把数值压进堆栈，并且使用POP指令将数值弹出。当你使用PUSH时ESP寄存器会减少，并且把数值放置到ESP所指的位置。当你使用POP时会把数值弹出到POP指令的参数所指的位置，并且ESP寄存器数值增加。简言之，就是最后压堆栈的数据最先出来，倒数第二个压进去的，第二个出来。<br><br>(CCB：堆栈的特点就是“后进先出”，想象一下，一个单车道的停车场，第一辆车停到最里面，第二辆车又停进去，然后第三辆车再开进去停在最外面，要出来的时候，是不是第三辆车要开出来之后，第二辆才能出来？要第二辆车开出来之后，第一辆开进去的才能出来？)<br><br>RET：<br>当CALL调用时会把(返回后要执行的)下一条指令的地址压进堆栈，RET(返回)就跳转到这个位置执行(即把指令指针设置到这个位置)。<br><br>(CALL调用时)执行到一定地方会遇到RET指令，就会跳转到储存在堆栈中的位置中去执行。(CALL把下一条指令的位置压进堆栈，而RET就把这个位置弹出来并跳到那里执行)<br><br>这就是最基本的汇编教程，如果你有什么有关汇编的问题，请提问，我会尽量回答。<br><br>如果你想得到更详细的信息，这里有个很好的文件：<br><a href="http://podgoretsky.com/ftp/Docs/Hardware/Processors/Intel/24547111.pdf" target="_blank"><span style="font-size:16px;line-height:1.8em;">http://podgoretsky.com/ftp/Docs/Hardware/Processors/Intel/24547111.pdf</span><wbr /></a><wbr /><br><br><span style="font-size:16px;line-height:1.8em;">注：理解括号中的数值的用法这一点非常有用，因为以后在使用CE时要用到指针(它可以解决大多数游戏的DMA(动态内存定位)的问题，如果你能看得懂什么汇编指令在修改你找到的数值的话)。<br>----------------------------------------------------------<br><br>“标志位”是保存在一个特殊寄存器中的一些BIT的集合，如果某个BIT是1，即是说这个标志被“置位”，如果是0即是说它被“清除”，正确地说，标志位告诉你处理器中所有的内部状态并给你更多关于前一指令执行的信息。<br><br>标志位有三种：状态标志告诉你最后一条指令执行的结果，控制标志告诉你处理器将会怎样，而系统标志告诉你，你的程序执行时的内部环境。<br><br>标志寄存器有32个位：(S=状态标志，C=控制标志，X=系统标志)<br><br>代码：<br>0 S 进位标志<br>1 (保留)<br>2 S 奇偶标志<br>3 (保留)<br>4 S 辅助进位标志<br>5 (保留)<br>6 S 零标志<br>7 S 符号标志<br>8 X 陷阱标志<br>9 X 允许中断标<br>10 C 方向标志<br>11 S 溢出标志<br>12 X I/O特权标志(12及13位)<br>13 X<br>14 X 嵌套任务标志<br>15 (保留)<br>16 X 复原标志<br>17 X 虚拟8086标志<br>18 X 对齐检验标志<br>19 X 虚拟中断标志<br>20 X 虚拟中断未决标志<br>21-31 (保留)<br><br>让我们看看状态标志，因为这些比较经常用到。<br><br>溢出(进位)：<br>当一个操作(加、减、乘等)产生的结果太大，不能存进寄存器或内存位置时，进位标志置位(否则的话，则自动清除该标志位)。例如你使用一个16位寄存器，而你的指令产生的结果数值大于16位，则进位标志被置位。<br><br>符号：<br>当结果为负数时被置位，如果是正数则清除。这个是一个数值的符号位的镜像。(CCB注：就是与结果数值的最高位相同)<br><br>零标志：<br>如果操作结果为0则此位被置位。<br><br>辅助进位：<br>与进位标志相同，但它对待寄存器或内存是以3-BITS(位)而不是普通的8，16或32位，这个用于BCD(二进制编码的十进制数)方面的东西，其他地方根本没什么用。<br><br>进位标志：<br>当第一个BIT超过寄存器/内存的限制时，进位标志被置位。举例来说，mov al, 0xFF，然后add al,1 将会导致进位，因为第九个BIT被设置，而且要注意，溢出标志和零标志也会被设置，而符号标志会被清除。</span><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[611125567@qq.com(无忧网盟)]]></author>
<comments>http://611125567.qzone.qq.com/blog/1239815955#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Wed, 15 Apr 2009 17:19:15 GMT</pubDate>
<guid>http://611125567.qzone.qq.com/blog/1239815955</guid>
</item>

<item>
<title><![CDATA[程序人生－－一个程序员对学弟学妹建议]]></title>
<link>http://611125567.qzone.qq.com/blog/1239815778</link>
<description><![CDATA[我始终认为，对一个初学者来说，IT界的技术风潮是不可追赶。我时常看见自己的DDMM们把课本扔了，去卖些价格不菲的诸如C#, VB.Net 这样的大部头，这让我感到非常痛心。而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可以不用指针等等则让我觉得好笑。C#就象当年的ASP 一样，“忽如一夜春风来，千树万树梨花开”，结果许多学校的信息学院成了“Web 学院”。96,97级的不少大学生都去做Web 了。当然我没有任何歧视某一行业的意识。我只是觉得如果他们把追赶这些时髦技术的时间多花一点在基础的课程上应该是可以走得更远的。 <br><span style="font-weight:bold"><wbr />几个误区<br></span><wbr />     初学者对C#风潮的追赶其实也只是学习过程中经常遇到的几个误区之一。我将用一些实际的例子来说明这些现象，你可以按部就班的看看自己是不是属于其中的一种或者几种：<br> <br><span style="font-weight:bold"><wbr />认为计算机技术等于编程技术:</span><wbr /><br>     有些人即使没有这个想法，在潜意识中也有这样的冲动。让我奇怪的是，许多信息学院的学生也有这样的念头。认为计算机专业就是编程专业，与编程无关的，或者不太相关课程他统统都不管，极端的学生只要书上没带“编程”两个字他就不看。<br> <br>    其实编程只是计算机技术应用过程中一种复杂性最低的劳动，这就是为什么IT业最底层的人是程序员（CODER）。计算机技术包括了多媒体，计算机网络，人工智能，模式识别，管理信息系统等等这些方面。编程工作只是在这些具体技术在理论研究或者工程实践的过程中表达算法的过程。编程的人不一定对计算机技术的了解就一定很高。而一个有趣的现象是，不少大师级的计算机技术研究者是不懂编程的。网上的炒作和现实中良好的工作待遇把编程这种劳动神秘化了。其实每一个程序员心里都明白，自己这些东西，学的时候并不比其它专业难，所以自然也不会高档到哪里去。<br> <br><span style="font-weight:bold"><wbr />咬文嚼字的孔已己作风:</span><wbr /><br>    我见过一本女生的《计算机网络原理》教材，这个女生像小学生一样在书上划满了横杠杠，笔记做得满满的，打印出来一定比教材还厚。我不明白的是，像计算机网络原理这样的课程有必要做笔记？我们的应试教育的确害了不少学生，在上《原理》这一类课程的时候许多学生像学《马列原理》一样逐字背诵记忆。这乃是我见过的最愚蠢的行为。所谓《原理》，即是需要掌握它为什么这样做，学习why，而不是how（怎样做）。极端认真的学生背下以太网的网线最大长度，数据帧的长度，每个字段的意义，IP报头的格式等等，但是忘了路由的原则，忘了TCP/IP协议设计的宗旨。总之许多人花了大量的时间把书背得滚瓜烂熟却等于什么也没学。<br> <br>    在学习编程的时候这些学生也是这样，他们确切的记得C++语法的各个细节。看完了C++ 教程后看《Thinking in C++》（确实是好书），《Inside C++》，《C++ reference》，this C++, that C++……，然后是网上各种各样的关于C++语法的奇闻逸事，然后发现自己又忘了C++的一些语法，最后回头继续恶补…。有个师弟就跟我说：“C++ 太难了，学了这里忘了那里，学了继承忘了模板。”我的回答道：“你不去学就容易了”。我并没有教坏他，只是告诉他，死抠C++的语法就和孔已己炫耀茴香豆的茴字有几种写法一样毫无意义。你根本不需要对的C++语法太关心，动手编程就是了，有不记得的地方一查MSDN就立马搞定。我有个结论就是，实际的开发过程中对程序语法的了解是最微不足道的知识。这是为什么我在为同学用Basic（我以前从没有学过它）写一个小程序的时候，只花了半个小时看了看语法，然后再用半个小时完成了程序，而一个小时后我又完全忘记了Basic 的所有关键字。<br> <br><span style="font-weight:bold"><wbr />不顾基础，盲目追赶时髦技术：</span><wbr /><br>    终于点到题目上来了。大多数的人都希望自己的东西能够马上跑起来，变成钱。这种想法对一个已经进入职业领域的程序员或者项目经理来说是合理的，而且 IT技术进步是如此的快，不跟进就是失业。但是对于初学者来说（尤其是时间充裕的大中专在校生），这种想法是另人费解的。一个并未进入到行业竞争中来的初学者最大的资本便是他有足够的时间沉下心来学习基础性的东西，学习why 而不是how。时髦的技术往往容易掌握，而且越来越容易掌握，这是商业利益的驱使，为了最大化的降低软件开发的成本。但在IT领域内的现实就是这样，越容易掌握的东西，学习的人越多，而且淘汰得越快。每一次新的技术出来，都有许多初学者跟进，这些初学者由于缺乏必要的基础而使得自己在跟进的过程中花费大量的时间，而等他学会了，这种技术也快淘汰了。基础的课程，比方数据结构，操作系统原理等等虽然不能让你立马就实现一个linux（这是许多人嘲笑理论课程无用的原因），但它们能够显著的减少你在学习新技术时学习曲线的坡度。而且对于许多关键的技术（比方Win32 SDK 程序的设计，DDK的编程）来说甚至是不可或缺的。<br> <br>    一个活生生的例子是我和我的一个同学，在大一时我还找不到开机按纽，他已经会写些简单的汇编程序了。我把大二的所有时间花在了汇编，计算机体系结构，数据结构，操作系统原理等等这些课程的学习上，而他则开始学习HTML和VB，并追赶ASP的潮流。大三的时候我开始学习Windows 操作系统原理，学习SDK编程，时间是漫长的，这时我才能够用VC开发出象模象样的应用程序。我曾一度因为同学的程序已经能够运行而自己还在学习如何创建对话框而懊恼不已，但临到毕业才发现自己的选择是何等的正确。和我谈判的公司开出的薪水是他的两倍还多。下面有一个不很恰当的比方：假设学习VB编程需要 4个月，学习基础课程和VC的程序设计需要1年。那么如果你先学VB，再来学习后者，时间不会减少，还是1年，而反过来，如果先学习后者，再来学VB，也许你只需要1个星期就能学得非常熟练。<br><span style="font-weight:bold"><wbr />几个重要的基础课程</span><wbr /><br>    如果你是学生，或者如果你有充足的时间。我建议你仔细的掌握下面的知识。我的建议是针对那些希望在IT技术上有所成就的初学者。同时我还列出了一些书目，这些书应该都还可以在书店买到。说实在的，我在读其他人的文章时最大的心愿就是希望作者列出一个书单。<br> <br>    大学英语－不要觉得好笑。我极力推荐这门课程是因为没有专业文档的阅读能力是不可想象的。中文的翻译往往在猴年马月才会出来，而现在的许多出版社干脆就直接把E文印刷上去。学习的方法是强迫自己看原版的教材，开始会看不懂，用多了自然熟练。吃得苦下得狠心绝对是任何行业都需要的品质。<br> <br>    计算机体系结构和汇编语言－关于体系结构的书遍地都是，而且也大同小异，倒是汇编有一本非常好的书《80x86汇编语言程序设计教程》（清华大学出版社，黑色封面，杨季文著）。你需要着重学习386后保护模式的程序设计。否则你在学习现代操作系统底层的一些东西的时候会觉得是在看天书。<br> <br>    计算机操作系统原理－我们的开发总是在特定的操作系统上进行，如果不是，只有一种可能：你在自己实现一个操作系统。无论如何，操作系统原理是必读的。这就象我们为一个芯片制作外围设备时，芯片基本的工作时序是必需了解的。这一类书也很多，我没有发现哪一本书非常出众。只是觉得在看完了这些书后如果有空就应该看看《Inside Windows 2000》(微软出版社，我看的是E文版的，中文的书名想必是Windows 2000 技术内幕之类吧)。关于学习它的必要性，ZDNET上的另一篇文章已经有过论述。<br> <br>    数据结构和算法－这门课程能够决定一个人程序设计水平的高低，是一门核心课程。我首选的是清华版的（朱战立，刘天时）。很多人喜欢买C++版的，但我觉得没有必要。C++的语法让算法实现过程变得复杂多了，而且许多老师喜欢用模块这一东西让算法变得更复杂。倒是在学完了C版的书以后再来浏览一下 C++的版的书是最好的。<br> <br>    软件工程－这门课程是越到后来就越发现它的重要，虽然刚开始看时就象看马哲一样不知所云。我的建议是看《实用软件工程》（黄色，清华）。不要花太多的时间去记条条框框，看不懂就跳过去。在每次自己完成了一个软件设计任务（不管是练习还是工作）以后再来回顾回顾，每次都会有收获。<br> <br>    Windows 程序设计－《北京大学出版社，Petzold著》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。而且前面的那本《Inside Windows 2000》也最好放到这本书的后面读。在这本书中，没有C++，没有GUI，没有控件。有的就是如何用原始的C语言来完成Windows 程序设计。在学完了它以后，你才会发现VC其实是很容易学的。千万不要在没有看完这本书以前提前学习VC，你最好碰都不要碰。我知道的许多名校甚至都已经用它作为教材进行授课。可见其重要。<br> <br><span style="font-weight:bold"><wbr />上面的几门课程我认为是必学的重要课程（如果你想做Windows 程序员）。</span><wbr /><br>    对于其它的课程有这样简单的选择方法：如果你是计算机系的，请学好你所有的专业基础课。如果不是，请参照计算机系的课程表。如果你发现自己看一本书时无法看下去了，请翻到书的最后，看看它的参考文献，找到它们并学习它们，再回头看这本书。如果一本书的书名中带有“原理”两个字，你一定不要去记忆它其中的细节，你应该以一天至少50页的速度掌握其要领。尽可能多的在计算机上实践一种理论或者算法。<br> <br><span style="font-weight:bold"><wbr />日三省乎己　　</span><wbr />　　<br>    每天读的书太多，容易让人迷失方向。一定要在每天晚上想想自己学了些什么，还有些什么相关的东西需要掌握，自己对什么最感兴趣，在一本书上花的时间太长还是不够等等。同时也应该多想想未来最有可能出现的应用，这样能够让你不是追赶技术潮流而是引领技术潮流。同时，努力使用现在已经掌握的技术和理论去制作具有一定新意的东西。坚持这样做能够让你真正成为一个软件“研发者”而不仅仅是一个CODER。<br> <br><span style="font-weight:bold"><wbr />把最多的时间花在学习上</span><wbr /><br>    这是对初学者最后的忠告。把每个星期玩CS或者CS的时间压缩到最少，不玩它们是最好的。同时，如果你的ASP技术已经能够来钱，甚至有公司请你兼职的话，这就证明你的天分能够保证你在努力的学习之后取得更好的收益，你应该去做更复杂的东西。眼光放长远一些，这无论是对谁都是适用的。 <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[611125567@qq.com(无忧网盟)]]></author>
<comments>http://611125567.qzone.qq.com/blog/1239815778#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Wed, 15 Apr 2009 17:16:18 GMT</pubDate>
<guid>http://611125567.qzone.qq.com/blog/1239815778</guid>
</item>

<item>
<title><![CDATA[汇编]]></title>
<link>http://611125567.qzone.qq.com/blog/1239815455</link>
<description><![CDATA[1.0 关于汇编语言<br>   汇编语言是创造出来代替原始的只能由处理器理解的二进制代码的,也就是在OD中常见的机器码!用机器码来写程序,可以想象其难度吧,所以汇编语言就出现了,汇编代码是直接描述处理器可以执行的代码,也就是在OD中最常见的反汇编代码了!(当然,有点不一样),而汇编语言是和cpu相关的,和机器语言是一一对应的!<br><br>2.0 关于cpu<br>   CPU的任务就是执行存放在存储器里的指令序列。为此，除要完成算术逻辑操作外，还需要担负CPU和存储器以及I/O之间的<a href="http://www.3800hk.com/" target="_blank">数据</a><wbr />传送任务。早期的CPU芯片只包括运算器和控制器两大部分。到了近几年，为了使存储器速度能更好地与运算器的速度相匹配，又在芯片中引入了高速缓冲存储器（知道为什么P4比P4赛扬贵那么多了吧?）。<br>   看主要的部件:<br>   1.算术逻辑部件ALU（arithmetic logic unit）用来进行算术和逻辑运算。这部分与我们的关系不太大，我们没必要管它。 <br>   2.控制逻辑。同样与我们的关系不大。 <br>   3.工作寄存器。意识了吧,寄存器呀!喂,,寄存器呀!~<br><br>3.0 寄存器<br>   所要了解的是8个32位的寄存器,分别是eax,ebx,ecx,edx,esp,ebp,edi,esi<br>   eax-edx这四个是通用寄存器,虽然各个都有各自的用途,不过你可以用它们来做任何事!是32位的,自然有低位和高位,我们又可以通过ax,bx,cx,dx来访问其低十六位,但高十六位是无法访问的!比如eax=12345678h,那么低十六位ax=5678h!而十六位的自然也有低位和高位,不过高八位是可以访问的,如ax可以分为ah和al,看字面就知道,ah(high)高八位,al就为低八位了!前面的例子,ax=5678h,那么ah=56h,al=78h!这四个寄存器主要是用来暂放计算结果或什么什么的!<br>   esp-esi这四个主要是寻址时用来存放偏移或指针,所以,也就称为指针寄存器或变址寄存器了~如在OD中看到的[eax],其实eax中存放的是一个内存地址,而实际要访问的是那个内存地址里的内容!<br>   esp(堆栈指针寄存器):<br>      很重要的一个概论,堆栈有着先进后出的特点，就好像有一个圆柱形的筒子,该直径刚好是一个乒乓球的直径,所以最先放进去的球当然会最后出来.而esp呢,永远是指着最顶的那个球的,也就是永远都指向栈顶!在od中也很常见了,比如push和pop就是对栈的操作,push把一个<a href="http://www.3800hk.com/" target="_blank">数据</a><wbr />压入栈中,也就是把一个球放进去,再去调用push时就再放进一个,而esp则指向第二个放进去的那个球了!使用pop呢就从栈中弹出一个<a href="http://www.3800hk.com/" target="_blank">数据</a><wbr />,前面说了,堆栈有着先进后出的特点,所以用pop呢就从最后放进去的那个球先出了(除非你破坏筒子(破坏堆栈?那是不可能的,程序马上死给你看))!而esp还是指向栈顶!<br>   取个代码例子:<br>   (1) mov ecx, 100&lt;---------100传入ecx<br>   (2) mov eax, 200&lt;---------200传入eax<br>   (3) push eax &lt;------------ecx先进了<br>   (4) push ecx&lt;-------------再来是eax<br>   (5) pop ebx&lt;--------------从栈顶取出一个,也是最后进去的那一个,结果存到ebx<br>   (6) pop ecx&lt;--------------从栈顶取出一个,也就是刚刚先进去的那个了,结果存到ecx<br>最后ebx=200,ecx=100<br>   到了win32的平台下,api大家都知道了吧!api的参数都是靠堆栈来传递的,比如说一个FindWindow,在C里我这样调用<br>-&gt;::FindWindow(NULL,&quot;a&quot;)-&gt;而反汇编之后在系统底层反汇编代码就象这个样子:<br>   push xxxxxxxx-&gt;xxxxxxxx为&quot;a&quot;的内存地址<br>   push yyyyyyyy-&gt;yyyyyyyy为空中止字符串的指针<br>   call zzzzzzzz-&gt;调用FindWindow<br>   而在call里面先使用pop弹出先前压入栈的参数再使用<br><br>   ebp(基址指针寄存器):<br>   它称为基址指针寄存器，它们都可以与堆栈段寄存器SS(堆栈段)联用来确定堆栈中的某一存储单元的地址，ESP用来指示段顶的偏移地址，而EBP可作为堆栈区中的一个基地址以便访问堆栈中的信息。<br><br>   ESI（源变址寄存器）和EDI（目的变址寄存器）一般与<a href="http://www.3800hk.com/" target="_blank">数据</a><wbr />段寄存器DS联用，用来确定<a href="http://www.3800hk.com/" target="_blank">数据</a><wbr />段中某一存储单元的地址。这两个变址寄存器有<a href="http://www.3800hk.com/" target="_blank">自动</a><wbr />增量和<a href="http://www.3800hk.com/" target="_blank">自动</a><wbr />减量的功能，可以很方便地用于变址。<br><br>   还有两个专用寄存器,分别是eip和flags<br>   flags:<br>      这个是标志寄存器了,存放条件标志码、控制标志和系统标志的寄存器!在od中也见很多了,比如zf(零标志),用cmp比较时,把两个操作数相减,为0就置zf为1,否则zf为0。而jnz就是看zf是否为0,为0就跳!这样说起来似乎更乱了,建议大家去记那些大于就跳,小于就跳的,比较简单(jnz就是不相等就跳)``哦呵呵!!至于其它标志,这里不再阐述了,可以去参看汇编速查!<br>      cmp eax,ebx&lt;-比较eax和ebx,两个相减,为0的话zf就为一,否则zf为0<br>      jnz xxxxxxx&lt;-判断zf是否为0,为0就跳到xxxxxxx处,也就是所谓的不相等就跳<br><br>   eip(指令指针寄存器):<br>      这个很好理解,根据od来说,载入一个程序后,比如代码像这样:<br>      0043C412 &gt;/$Content$nbsp;  55             push     ebp          &lt;-载入后停在这,看寄存器窗口eip这时为43c412<br>      0043C413   |.   8BEC           mov      ebp, esp     &lt;-f8运行一步之后,eip为43c413<br>      0043C415   |.   6A FF          push     -1           &lt;-eip为43c415<br>      0043C417   |.   68 C8B64800    push     0048B6C8     &lt;-eip为43c417<br>      有人会说&quot;原来eip是指示当前执行到代码处的地址的!&quot;   ,这不对!!因为f8运行还没通过那条代码,所以还不算已经执行了,没错,eip指向的就是下一条将要执行的指令的指针! 段寄存器:<br>     cs代码段,ds<a href="http://www.3800hk.com/" target="_blank">数据</a><wbr />段,ss堆栈段,es附加段<br>     在Win32<a href="http://www.3800hk.com/" target="_blank">编程</a><wbr />中段的概念已经不重要了!而在Crack时你总不会是在调是dos时代的程序吧!-!<br><br>4.0 常用汇编指令<br>   mov ax,cx   &lt;-很常用了,把cx的值送入ax中,cx值保持不变<br>   cmp eax,ecx&lt;-很常见了吧,比较eax和ecx,置标志位!方法前面说过了<br>   xor eax,eax&lt;-看这个,eax与自己异或,是清零的操作!<br>   lea eax,str&lt;-并不传送<a href="http://www.3800hk.com/" target="_blank">数据</a><wbr />,只传送该<a href="http://www.3800hk.com/" target="_blank">数据</a><wbr />的地址,将str字符串的地址传到eax<br>   push eax    &lt;-进栈操作,前面说过了,eax进栈<br>   pop   ebx    &lt;-出栈操作,前面也说了,弹出位于栈顶的<a href="http://www.3800hk.com/" target="_blank">数据</a><wbr />存入ebx<br>   ADD 加法指令 格式:ADD DST，SRC 执行的操作：(DST)&lt;-(SRC)+(DST) <br>   SUB 减法指令 格式:SUB DST，SRC 执行的操作：(DST)&lt;-(DST)-(SRC) <br>   MUL 无符号乘法指令 格式: MUL SRC   执行的操作：字节操作(AX)&lt;-(AL)*(SRC)；字操作(DX,AX)&lt;-(AX)*(SRC)；双字操作：(EDX,EAX)&lt;-        (EAX)*(SRC) <br>   DIV 无符号除法指令 格式:DIV SRC   执行的操作:字节操作：16们被除数在AX中，8位除数为源操作数，结果的8位商在AL中，8位余数在AH中        。表示为： <br>        (AL)&lt;-(AX)/(SRC)的商，(AH)&lt;-(AX)/(SRC)的余数。字操作:32位被除数在DX,AX中。其中DX为高位字，16位除数为源操作数，结果的16        位商   在AX中，16位余数在DX中。表示为：(AX)&lt;-(DX,AX)/(SRC)的商，(DX)&lt;-(DX,AX)/(SRC)的余数。<br>   nop         &lt;-   无操作,去掉指令用的吧!去掉一个跳转,让程序直接往下走,就到注册成功处啦(扯远了````)<br>   call        &lt;- 调用子程序或函数用的<br><br>   关于跳转指令，可以查看汇编速查手册,别强迫自己把所有的都一下记住,浪费精力,不懂时再查一下，久了就记住了!<br>   <br>5.0 高级语言程序的汇编浅解析<br>   汇编语言要和硬件直接打交道,写病毒是方便点啦!!而在高级语言中,如C中我们要面向的是问题的解决,对于硬件资源操作,编译器搞定了!在这里稍微讲一下高级语言中与反汇编代码相应的一些地方:<br>   1、定义变量<br>     int a;<br>     一个变量其实是存放在一个内存地址里,如果对a进行赋值&quot;a=10&quot;,在反汇编中就有可能表现为:<br>     mov word ptr[007e58c2],A<br>     像这个样子,而a所对应的内存地址就是0x007e58c2了,当然是乱写的一个地址而已,系统怎样分配?(天知道...)<br><br>2、比如一个数组<br>     char str[]=&quot;hello&quot;;<br>     占用了6个字节,最后一个是以0结尾的空字节,数组名可以当做数组的指针!str[0]='h',str[0]相应一个变量地址,比如为[0040e123],那么[0040e124]就为'e',[0040e125]就为'l'....了`<br><br>3、指针<br>    char *p;<br>    指针也是一个变量,所以它也对应一个内存地址!但访问时应该是访问其指向的内存地址的内容,而不是这个指针变量的内容,其内容只是一个地址而已!假如该指针变量地址为007e1000,那么语句p=a,这句在高级语言里是让指针p指向a这个内存单元!p里的内容是a的地址,*p实际上是a的内容了!而反汇编有可能表现成这样:<br>   mov [007e1000],007e2000&lt;-假如007e2000为变量a的地址,那么就是把a的地址传到007e1000这个内容里了!<br><br>4、函数调用<br>   sub(a,b);<br>   假如sub是自定义的一个减法函数,作用为参数一减去参数二,上面语句为在C中调中时传递参数!前面有说过了,Win32平台下函数调用的参数是通过堆栈来传递的,那么反汇编就是:<br>   (假如a=2,b=1)<br>   mov eax,2<br>   mov ebx,1<br>   push eax<br>   push ebx<br>   call 取地址(sub)<br>   .......<br>-----------------------------------------------------------------------------------------------<br><br>   好了,最后感谢大家能看完这篇了了草草的东西,我也回顾了不少知识!在本人能力范围内的事不知道对新手们有没有帮助,还有一点要提醒各位新手,如果真想学好Crack学通Crack这门知识的话,不完全了解汇编是不行的！所以在看了我这篇之后如果能激起你学汇编的信心是最好的！要不等到Crack遇到什么问题时才再想回过头学汇编，那很难!~<br><br>   注:本文有讲错的地方请批评指正（偶大菜一个）,另外我参考了很多的文章,因为比较懒,所以``有的都是直接复制过来了~不过也根据我自已的理解努力为新手们讲解了！！<br> <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[611125567@qq.com(无忧网盟)]]></author>
<comments>http://611125567.qzone.qq.com/blog/1239815455#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Wed, 15 Apr 2009 17:10:55 GMT</pubDate>
<guid>http://611125567.qzone.qq.com/blog/1239815455</guid>
</item>

<item>
<title><![CDATA[常见各种语言编写的程序的入口点代码]]></title>
<link>http://611125567.qzone.qq.com/blog/1237357055</link>
<description><![CDATA[常见各种语言编写的程序的入口点代码Borland Delphi 6.0 - 7.0 复制内容到剪贴板 代码:<span style="line-height:1.8em;">00509CB0 &gt; $ 55 PUSH EBP</span><wbr /><br><span style="line-height:1.8em;">00509CB1 . 8BEC MOV EBP,ESP</span><wbr /><br><span style="line-height:1.8em;">00509CB3 . 83C4 EC ADD ESP,-14</span><wbr /><br><span style="line-height:1.8em;">00509CB6 . 53 PUSH EBX</span><wbr /><br><span style="line-height:1.8em;">00509CB7 . 56 PUSH ESI</span><wbr /><br><span style="line-height:1.8em;">00509CB8 . 57 PUSH EDI</span><wbr /><br><span style="line-height:1.8em;">00509CB9 . 33C0 XOR EAX,EAX</span><wbr /><br><span style="line-height:1.8em;">00509CBB . 8945 EC MOV DWORD PTR SS:[EBP-14],EAX</span><wbr /><br><span style="line-height:1.8em;">00509CBE . B8 20975000 MOV EAX,unpack.00509720</span><wbr /><br><span style="line-height:1.8em;">00509CC3 . E8 84CCEFFF CALL unpack.0040694C</span><wbr /><br>Microsoft Visual C++ 6.0 复制内容到剪贴板 代码:<span style="line-height:1.8em;">00496EB8 &gt;/$ 55 PUSH EBP ; (初始 cpu 选择)</span><wbr /><br><span style="line-height:1.8em;">00496EB9 |. 8BEC MOV EBP,ESP</span><wbr /><br><span style="line-height:1.8em;">00496EBB |. 6A FF PUSH -1</span><wbr /><br><span style="line-height:1.8em;">00496EBD |. 68 40375600 PUSH Screensh.00563740</span><wbr /><br><span style="line-height:1.8em;">00496EC2 |. 68 8CC74900 PUSH Screensh.0049C78C ; SE 处理程序安装</span><wbr /><br><span style="line-height:1.8em;">00496EC7 |. 64:A1 0000000&gt;MOV EAX,DWORD PTR FS:[0]</span><wbr /><br><span style="line-height:1.8em;">00496ECD |. 50 PUSH EAX</span><wbr /><br><span style="line-height:1.8em;">00496ECE |. 64:8925 00000&gt;MOV DWORD PTR FS:[0],ESP</span><wbr /><br><span style="line-height:1.8em;">00496ED5 |. 83EC 58 SUB ESP,58</span><wbr /><br>Microsoft Visual C++ 6.0 [Overlay] E语言 复制内容到剪贴板 代码:<span style="line-height:1.8em;">00403831 &gt;/$ 55 PUSH EBP</span><wbr /><br><span style="line-height:1.8em;">00403832 |. 8BEC MOV EBP,ESP</span><wbr /><br><span style="line-height:1.8em;">00403834 |. 6A FF PUSH -1</span><wbr /><br><span style="line-height:1.8em;">00403836 |. 68 F0624000 PUSH Nisy521.004062F0</span><wbr /><br><span style="line-height:1.8em;">0040383B |. 68 A44C4000 PUSH Nisy521.00404CA4 ; SE 处理程序安装</span><wbr /><br><span style="line-height:1.8em;">00403840 |. 64:A1 0000000&gt;MOV EAX,DWORD PTR FS:[0]</span><wbr /><br><span style="line-height:1.8em;">00403846 |. 50 PUSH EAX</span><wbr /><br><span style="line-height:1.8em;">00403847 |. 64:8925 00000&gt;MOV DWORD PTR FS:[0],ESP</span><wbr /><br>Microsoft Visual Basic 5.0 / 6.0 复制内容到剪贴板 代码:<span style="line-height:1.8em;">00401166 - FF25 6C104000 JMP DWORD PTR DS:[] ; MSVBVM60.ThunRTMain</span><wbr /><br><span style="line-height:1.8em;">0040116C &gt; 68 147C4000 PUSH PACKME.00407C14</span><wbr /><br><span style="line-height:1.8em;">00401171 E8 F0FFFFFF CALL </span><wbr /><br><span style="line-height:1.8em;">00401176 0000 ADD BYTE PTR DS:[EAX],AL</span><wbr /><br><span style="line-height:1.8em;">00401178 0000 ADD BYTE PTR DS:[EAX],AL</span><wbr /><br><span style="line-height:1.8em;">0040117A 0000 ADD BYTE PTR DS:[EAX],AL</span><wbr /><br><span style="line-height:1.8em;">0040117C 3000 XOR BYTE PTR DS:[EAX],AL</span><wbr /><br><span style="line-height:1.8em;">或省略第一行的JMP</span><wbr /><br><span style="line-height:1.8em;">00401FBC &gt; 68 D0D44000 push dumped_.0040D4D0</span><wbr /><br><span style="line-height:1.8em;">00401FC1 E8 EEFFFFFF call </span><wbr /><br><span style="line-height:1.8em;">00401FC6 0000 add byte ptr ds:[eax],al</span><wbr /><br><span style="line-height:1.8em;">00401FC8 0000 add byte ptr ds:[eax],al</span><wbr /><br><span style="line-height:1.8em;">00401FCA 0000 add byte ptr ds:[eax],al</span><wbr /><br><span style="line-height:1.8em;">00401FCC 3000 xor byte ptr ds:[eax],al</span><wbr /><br><span style="line-height:1.8em;">00401FCE 0000 add byte ptr ds:[eax],al</span><wbr /><br>BC++ 复制内容到剪贴板 代码:<span style="line-height:1.8em;">0040163C &gt; $ /EB 10 JMP SHORT BCLOCK.0040164E</span><wbr /><br><span style="line-height:1.8em;">0040163E |66 DB 66 ; CHAR 'f'</span><wbr /><br><span style="line-height:1.8em;">0040163F |62 DB 62 ; CHAR 'b'</span><wbr /><br><span style="line-height:1.8em;">00401640 |3A DB 3A ; CHAR ':'</span><wbr /><br><span style="line-height:1.8em;">00401641 |43 DB 43 ; CHAR 'C'</span><wbr /><br><span style="line-height:1.8em;">00401642 |2B DB 2B ; CHAR '+'</span><wbr /><br><span style="line-height:1.8em;">00401643 |2B DB 2B ; CHAR '+'</span><wbr /><br><span style="line-height:1.8em;">00401644 |48 DB 48 ; CHAR 'H'</span><wbr /><br><span style="line-height:1.8em;">00401645 |4F DB 4F ; CHAR 'O'</span><wbr /><br><span style="line-height:1.8em;">00401646 |4F DB 4F ; CHAR 'O'</span><wbr /><br><span style="line-height:1.8em;">00401647 |4B DB 4B ; CHAR 'K'</span><wbr /><br><span style="line-height:1.8em;">00401648 |90 NOP</span><wbr /><br><span style="line-height:1.8em;">00401649 |E9 DB E9</span><wbr /><br><span style="line-height:1.8em;">0040164A . |98E04E00 DD OFFSET BCLOCK.___CPPdebugHook</span><wbr /><br><span style="line-height:1.8em;">0040164E &gt; \A1 8BE04E00 MOV EAX,DWORD PTR DS:[4EE08B]</span><wbr /><br><span style="line-height:1.8em;">00401653 . C1E0 02 SHL EAX,2</span><wbr /><br><span style="line-height:1.8em;">00401656 . A3 8FE04E00 MOV DWORD PTR DS:[4EE08F],EAX</span><wbr /><br><span style="line-height:1.8em;">0040165B . 52 PUSH EDX</span><wbr /><br><span style="line-height:1.8em;">0040165C . 6A 00 PUSH 0 ; /pModule = NULL</span><wbr /><br><span style="line-height:1.8em;">0040165E . E8 DFBC0E00 CALL   ; \GetModuleHandleA</span><wbr /><br><span style="line-height:1.8em;">00401663 . 8BD0 MOV EDX,EAX</span><wbr /><br>Dasm: 复制内容到剪贴板 代码:<span style="line-height:1.8em;">00401000 &gt;/$ 6A 00 PUSH 0 ; /pModule = NULL</span><wbr /><br><span style="line-height:1.8em;">00401002 |. E8 C50A0000 CALL   ; \GetModuleHandleA</span><wbr /><br><span style="line-height:1.8em;">00401007 |. A3 0C354000 MOV DWORD PTR DS:[40350C],EAX</span><wbr /><br><span style="line-height:1.8em;">0040100C |. E8 B50A0000 CALL   ; [GetCommandLineA</span><wbr /><br><span style="line-height:1.8em;">00401011 |. A3 10354000 MOV DWORD PTR DS:[403510],EAX</span><wbr /><br><span style="line-height:1.8em;">00401016 |. 6A 0A PUSH 0A ; /Arg4 = 0000000A</span><wbr /><br><span style="line-height:1.8em;">00401018 |. FF35 10354000 PUSH DWORD PTR DS:[403510] ; |Arg3 = 00000000</span><wbr /><br><span style="line-height:1.8em;">0040101E |. 6A 00 PUSH 0 ; |Arg2 = 00000000</span><wbr /><br><span style="line-height:1.8em;">00401020 |. FF35 0C354000 PUSH DWORD PTR DS:[40350C] ; |Arg1 = 00000000</span><wbr /><br>VC8 -&gt; Microsoft Corporation 复制内容到剪贴板 代码:<span style="line-height:1.8em;">0043DEE1 Q&gt;   E8 2D8D0000        call QQRecord.00446C13                   ; (Initial CPU selection)</span><wbr /><br><span style="line-height:1.8em;">0043DEE6 ^ E9 16FEFFFF        jmp QQRecord.0043DD01</span><wbr /><br><span style="line-height:1.8em;">0043DEEB     55                 push ebp</span><wbr /><br><span style="line-height:1.8em;">0043DEEC     8BEC             mov ebp,esp</span><wbr /><br><span style="line-height:1.8em;">0043DEEE     51                 push ecx</span><wbr /><br><span style="line-height:1.8em;">0043DEEF     53                 push ebx</span><wbr /><br><span style="line-height:1.8em;">0043DEF0     8B45 0C          mov eax,dword ptr ss:[ebp+C]</span><wbr /><br><span style="line-height:1.8em;">0043DEF3     83C0 0C          add eax,0C</span><wbr /><br><span style="line-height:1.8em;">0043DEF6     8945 FC          mov dword ptr ss:[ebp-4],eax</span><wbr /><br><span style="line-height:1.8em;">0043DEF9     64:8B1D 00000000 mov ebx,dword ptr fs:[0]</span><wbr /><br><span style="line-height:1.8em;">0043DF00     8B03             mov eax,dword ptr ds:[ebx]</span><wbr /><br><span style="line-height:1.8em;">0043DF02     64:A3 00000000     mov dword ptr fs:[0],eax</span><wbr /><br><span style="line-height:1.8em;">0043DF08     8B45 08          mov eax,dword ptr ss:[ebp+8]</span><wbr /><br><span style="line-height:1.8em;">0043DF0B     8B5D 0C          mov ebx,dword ptr ss:[ebp+C]</span><wbr /><br><span style="line-height:1.8em;">0043DF0E     8B6D FC          mov ebp,dword ptr ss:[ebp-4]</span><wbr /><br><span style="line-height:1.8em;">0043DF11     8B63 FC          mov esp,dword ptr ds:[ebx-4]</span><wbr /><br><span style="line-height:1.8em;">0043DF14     FFE0             jmp eax</span><wbr /><br><span style="line-height:1.8em;">0043DF16     5B                 pop ebx</span><wbr /><br><span style="line-height:1.8em;">0043DF17     C9                 leave</span><wbr /><br><span style="line-height:1.8em;">0043DF18     C2 0800          retn 8</span><wbr /><br>PB 复制内容到剪贴板 代码:<span style="line-height:1.8em;">00410D50: 55                       PUSH EBP</span><wbr /><br><span style="line-height:1.8em;">00410D51: 8BEC                   MOV EBP, ESP</span><wbr /><br><span style="line-height:1.8em;">00410D53: 53                       PUSH EBX</span><wbr /><br><span style="line-height:1.8em;">00410D54: 56                       PUSH ESI</span><wbr /><br><span style="line-height:1.8em;">00410D55: 57                       PUSH EDI</span><wbr /><br><span style="line-height:1.8em;">00410D56: BB00604100             MOV EBX, 00416000</span><wbr /><br><span style="line-height:1.8em;">00410D5B: 662EF705D213410004000F85 TEST WORD PTR CS:[004113D2], 850F0004</span><wbr /><br><span style="line-height:1.8em;">00410D67: DB00                   FILD DWORD PTR [EAX]</span><wbr /><br><span style="line-height:1.8em;">00410D69: 0000                   ADD [EAX], AL</span><wbr /><br><span style="line-height:1.8em;">00410D6B: 6A00                   PUSH 00000000</span><wbr /><br><span style="line-height:1.8em;">00410D6D: FF1554844100          CALL [00418454] ; CoInitialize</span><wbr /><br><span style="line-height:1.8em;">00410D73: E892020000             CALL 0041100A</span><wbr /><br><span style="line-height:1.8em;">00410D78: C7830801000001000000     MOV [EBX+00000108], 00000001</span><wbr /><br><span style="line-height:1.8em;">00410D82: 8D8390020000          LEA EAX, [EBX+00000290]</span><wbr /><br><span style="line-height:1.8em;">00410D88: 50                       PUSH EAX</span><wbr /><br><span style="line-height:1.8em;">00410D89: FF15DC834100          CALL [004183DC] ; GetVersionExA</span><wbr /><br><span style="line-height:1.8em;">00410D8F: 83EC44                SUB ESP, 00000044</span><wbr /><br><span style="line-height:1.8em;">00410D92: C7042444000000           MOV [ESP], 00000044</span><wbr /><br><span style="line-height:1.8em;">00410D99: C744242C00000000       MOV [ESP+2C], 00000000</span><wbr /><br><span style="line-height:1.8em;">00410DA1: 54                       PUSH ESP</span><wbr /><br><span style="line-height:1.8em;">00410DA2: FF15D4834100          CALL [004183D4] ; GetStartupInfoA</span><wbr /><br><span style="line-height:1.8em;">00410DA8: B80A000000             MOV EAX, 0000000A</span><wbr /><br><span style="line-height:1.8em;">00410DAD: F744242C01000000       TEST [ESP+2C], 00000001</span><wbr /><br><span style="line-height:1.8em;">00410DB5: 7405                   JZ 410DBC</span><wbr /><br><span style="line-height:1.8em;">00410DB7: 0FB7442430             MOVZX EAX, WORD PTR [ESP+30]</span><wbr /><br><span style="line-height:1.8em;">00410DBC: 83C444                ADD ESP, 00000044</span><wbr /><br><span style="line-height:1.8em;">00410DBF: 8983FE000000          MOV [EBX+000000FE], EAX</span><wbr /><br><span style="line-height:1.8em;">00410DC5: FF15B0834100          CALL [004183B0] ; GetCommandLineA</span><wbr /><br>Borland C++ 1999 复制内容到剪贴板 代码:<span style="line-height:1.8em;">004014D0 VB&gt; /EB 10     jmp short VBto_UNP.004014E2</span><wbr /><br><span style="line-height:1.8em;">004014D2     |66:623A bound di,dword ptr ds:[edx]</span><wbr /><br><span style="line-height:1.8em;">004014D5     |43        inc ebx</span><wbr /><br><span style="line-height:1.8em;">004014D6     |2B2B    sub ebp,dword ptr ds:[ebx]</span><wbr /><br><span style="line-height:1.8em;">004014D8     |48        dec eax</span><wbr /><br><span style="line-height:1.8em;">004014D9     |4F        dec edi</span><wbr /><br><span style="line-height:1.8em;">004014DA     |4F        dec edi</span><wbr /><br><span style="line-height:1.8em;">004014DB     |4B        dec ebx</span><wbr /><br><span style="line-height:1.8em;">004014DC     |90        nop</span><wbr /><br><span style="line-height:1.8em;">004014DD -|E9 980057&gt;jmp 0097157A</span><wbr /><br><span style="line-height:1.8em;">004014E2     \A1 8B0057&gt;mov eax,dword ptr ds:[57008B]</span><wbr /><br><span style="line-height:1.8em;">004014E7    C1E0 02 shl eax,2</span><wbr /><br><span style="line-height:1.8em;">004014EA    A3 8F0057&gt;mov dword ptr ds:[57008F],eax</span><wbr /><br><span style="line-height:1.8em;">004014EF    52        push edx</span><wbr /><br><span style="line-height:1.8em;">004014F0    6A 00     push 0</span><wbr /><br><span style="line-height:1.8em;">004014F2    E8 C7D116&gt;call &lt;jmp.&amp;kernel32.GetModuleHandleA&gt;</span><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[611125567@qq.com(无忧网盟)]]></author>
<comments>http://611125567.qzone.qq.com/blog/1237357055#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Wed, 18 Mar 2009 06:17:35 GMT</pubDate>
<guid>http://611125567.qzone.qq.com/blog/1237357055</guid>
</item>

<item>
<title><![CDATA[个人珍藏——破解软件，免费软件整理专题（长期更新）]]></title>
<link>http://611125567.qzone.qq.com/blog/1235361422</link>
<description><![CDATA[以下软件为个人平时收集，所有软件本人都已测试，现发出来，因Q空间字数限制，如要查看软件祥细简介 <br>请到我的博客空间查看 <a href="http://www.wyspace.cn/catalog.asp?cate=5" target="_blank">http://www.wyspace.cn/catalog.asp?cate=5</a><wbr /><br>有些因为软件过大所以只上传了破解补丁，需要原版的可和我联系，下载后只需覆盖原文件即可破解 <br>大家转贴，请说明出处  谢谢！ 如有无法下载请直接和我联系 QQ：611125567（24小时在线） <br>1. PTC注册助手V1.2 （带近300数据）<a href="http://cn.ziddu.com/download/271561/PTC" target="_blank">http://cn.ziddu.com/download/271561/PTC注册助手V1.2.rar.html </a><wbr /><br>2.聚生网管21破解版：<a href="http://cn.ziddu.com/download/271986/聚生网管21破解版.rar.html" target="_blank">http://cn.ziddu.com/download/271986/聚生网管21破解版.rar.html </a><wbr /><br>3.eastFax6.3企业破解版，原文件有点大，这里只上传了补丁<a href="http://cn.ziddu.com/download/272191/EastFax" target="_blank">http://cn.ziddu.com/download/272191/EastFax破解补丁.rar.html </a><wbr /><br>4. 影子系统2008（82M）完美破解原文件太大，这里只上传了补丁 <br>5.FoxitReader2.0绿色破解版<a href="http://cn.ziddu.com/download/272216/FoxitReader.rar.html" target="_blank"><span style="font-weight:bold"><wbr />http://cn.ziddu.com/download/272216/FoxitReader.rar.html</span><wbr /></a><wbr /> <br>6.金山词霸2007破解补丁 <a href="http://cn.ziddu.com/download/272218/金山词霸2007破解补丁.rar.html" target="_blank">http://cn.ziddu.com/download/272218/金山词霸2007破解补丁.rar.html </a><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[611125567@qq.com(无忧网盟)]]></author>
<comments>http://611125567.qzone.qq.com/blog/1235361422#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Mon, 23 Feb 2009 03:57:02 GMT</pubDate>
<guid>http://611125567.qzone.qq.com/blog/1235361422</guid>
</item>

<item>
<title><![CDATA[PTC挂机资源整理 长期更新]]></title>
<link>http://611125567.qzone.qq.com/blog/1235295229</link>
<description><![CDATA[因Q空间字数限制只能发这么多了，更多最新挂机资源<br>大家可以到这里去看  <a href="http://www.wuyounet.com" target="_blank">http://www.wuyounet.com</a><wbr />  另自动注册软件，挂机软件分享<br><a href="http://www.monkeyclicks.info/index.php?ref=hrb880" target="_blank">http://www.monkeyclicks.info/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.bigkahunaclicks.com/index.php?ref=hrb880" target="_blank">http://www.bigkahunaclicks.com/index.php?ref=hrb880</a><wbr />      $0.04<br><a href="http://www.railroadclicks.com/index.php?ref=hrb880" target="_blank">http://www.railroadclicks.com/index.php?ref=hrb880</a><wbr />      $10<br><a href="http://www.passionpetals.info/index.php?ref=hrb880" target="_blank">http://www.passionpetals.info/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.illusiveclicks.info/index.php?ref=hrb880" target="_blank">http://www.illusiveclicks.info/index.php?ref=hrb880</a><wbr />      $5<br><a href="http://www.bugonptc.com/index.php?ref=hrb880" target="_blank">http://www.bugonptc.com/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.newleadsdaily.com/index.php?ref=hrb880" target="_blank">http://www.newleadsdaily.com/index.php?ref=hrb880</a><wbr />      $0.1<br><a href="http://www.earneasycash.info/index.php?ref=hrb880" target="_blank">http://www.earneasycash.info/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.ClicksSite.com/index.php?ref=hrb880" target="_blank">http://www.ClicksSite.com/index.php?ref=hrb880</a><wbr />      $0.01<br><a href="http://www.goldengooseptc.info/index.php?ref=hrb880" target="_blank">http://www.goldengooseptc.info/index.php?ref=hrb880</a><wbr />      $0.5<br><a href="http://www.doggoneclicks.com/index.php?ref=hrb880" target="_blank">http://www.doggoneclicks.com/index.php?ref=hrb880</a><wbr />      $0.05<br><a href="http://www.jrptc.net/index.php?ref=hrb880" target="_blank">http://www.jrptc.net/index.php?ref=hrb880</a><wbr />      $2<br><a href="http://www.vincentclix.com/index.php?ref=hrb880" target="_blank">http://www.vincentclix.com/index.php?ref=hrb880</a><wbr />      $2<br><a href="http://www.creativeptc.com/index.php?ref=hrb880" target="_blank">http://www.creativeptc.com/index.php?ref=hrb880</a><wbr />      $0.25<br><a href="http://www.Paradiseclicks.com/index.php?ref=hrb880" target="_blank">http://www.Paradiseclicks.com/index.php?ref=hrb880</a><wbr />      $20<br><a href="http://www.KingClix.com/index.php?ref=hrb880" target="_blank">http://www.KingClix.com/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.MyPTC.info/index.php?ref=hrb880" target="_blank">http://www.MyPTC.info/index.php?ref=hrb880</a><wbr />      $2<br><a href="http://www.clicknpay.info/index.php?ref=hrb880" target="_blank">http://www.clicknpay.info/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.incentria.com/index.php?ref=hrb880" target="_blank">http://www.incentria.com/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.twinkleclicks.com/index.php?ref=hrb880" target="_blank">http://www.twinkleclicks.com/index.php?ref=hrb880</a><wbr />      $2.5<br><a href="http://www.hasen-cash.dns25.org/index.php?ref=hrb880" target="_blank">http://www.hasen-cash.dns25.org/index.php?ref=hrb880</a><wbr />      $0.1<br><a href="http://www.gotbux.com/index.php?ref=hrb880" target="_blank">http://www.gotbux.com/index.php?ref=hrb880</a><wbr />      $0.02<br><a href="http://www.englandclicks.net/index.php?ref=hrb880" target="_blank">http://www.englandclicks.net/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.downline4all.net/index.php?ref=hrb880" target="_blank">http://www.downline4all.net/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.latinoclicks.info/index.php?ref=hrb880" target="_blank">http://www.latinoclicks.info/index.php?ref=hrb880</a><wbr />      $0.02<br><a href="http://www.kooplinks.com/index.php?ref=hrb880" target="_blank">http://www.kooplinks.com/index.php?ref=hrb880</a><wbr />      $0.1<br><a href="http://www.vegas-clicks.com/index.php?ref=hrb880" target="_blank">http://www.vegas-clicks.com/index.php?ref=hrb880</a><wbr />      $0.05<br><a href="http://www.clickmybux.info/index.php?ref=hrb880" target="_blank">http://www.clickmybux.info/index.php?ref=hrb880</a><wbr />      $0.5<br><a href="http://www.piggylinks.net/index.php?ref=hrb880" target="_blank">http://www.piggylinks.net/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.angelptc.info/index.php?ref=hrb880" target="_blank">http://www.angelptc.info/index.php?ref=hrb880</a><wbr />      $0.4<br><a href="http://www.stormofcash.com/index.php?ref=hrb880" target="_blank">http://www.stormofcash.com/index.php?ref=hrb880</a><wbr />      $0.5<br><a href="http://www.grammasptr.info/index.php?ref=hrb880" target="_blank">http://www.grammasptr.info/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.asifptc.com/index.php?ref=hrb880" target="_blank">http://www.asifptc.com/index.php?ref=hrb880</a><wbr />      $0.5<br><a href="http://www.pioneerclicks.info/index.php?ref=hrb880" target="_blank">http://www.pioneerclicks.info/index.php?ref=hrb880</a><wbr />      $2<br><a href="http://www.boydawgptc.info/index.php?ref=hrb880" target="_blank">http://www.boydawgptc.info/index.php?ref=hrb880</a><wbr />      $2<br><a href="http://www.freebiereferralsptc.com/index.php?ref=hrb880" target="_blank">http://www.freebiereferralsptc.com/index.php?ref=hrb880</a><wbr />      $1.99<br><a href="http://www.atomixclicks.com/index.php?ref=hrb880" target="_blank">http://www.atomixclicks.com/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.pirateclicks.info/index.php?ref=hrb880" target="_blank">http://www.pirateclicks.info/index.php?ref=hrb880</a><wbr />      $2<br><a href="http://www.wizzardsptc.info/index.php?ref=hrb880" target="_blank">http://www.wizzardsptc.info/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.littlemermaidptc.info/index.php?ref=hrb880" target="_blank">http://www.littlemermaidptc.info/index.php?ref=hrb880</a><wbr />      $0.01<br><a href="http://www.clix-club.com/index.php?ref=hrb880" target="_blank">http://www.clix-club.com/index.php?ref=hrb880</a><wbr />      $0.5<br><a href="http://www.performancebux.com/index.php?ref=hrb880" target="_blank">http://www.performancebux.com/index.php?ref=hrb880</a><wbr />      $2<br><a href="http://www.clixofchange.com/index.php?ref=hrb880" target="_blank">http://www.clixofchange.com/index.php?ref=hrb880</a><wbr />      $0.5<br><a href="http://www.ladylibertyptc.info/index.php?ref=hrb880" target="_blank">http://www.ladylibertyptc.info/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.scotlandclicks.info/index.php?ref=hrb880" target="_blank">http://www.scotlandclicks.info/index.php?ref=hrb880</a><wbr />      $10<br><a href="http://www.shyptc.info/index.php?ref=hrb880" target="_blank">http://www.shyptc.info/index.php?ref=hrb880</a><wbr />      $1<br><a href="http://www.lemonaideclickers.info/index.php?ref=hrb880" target="_blank">http://www.lemonaideclickers.info/index.php?ref=hrb880</a><wbr />      $2<br><a href="http://www.lolsy.com/index.php?ref=hrb880" target="_blank">http://www.lolsy.com/index.php?ref=hrb880</a><wbr />      $0.5<br> <!--v:3.2--> ]]></description>
<category><![CDATA[网赚推荐]]></category>
<author><![CDATA[611125567@qq.com(无忧网盟)]]></author>
<comments>http://611125567.qzone.qq.com/blog/1235295229#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Sun, 22 Feb 2009 09:33:49 GMT</pubDate>
<guid>http://611125567.qzone.qq.com/blog/1235295229</guid>
</item>

<item>
<title><![CDATA[网站一夜之间被百度收录88页]]></title>
<link>http://611125567.qzone.qq.com/blog/1234402038</link>
<description><![CDATA[网站运行四十多天了，百度一直从未收录过，可今早上一site，百度居然一下子收录了88页，真是个吉祥数呀，呵呵 <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[611125567@qq.com(无忧网盟)]]></author>
<comments>http://611125567.qzone.qq.com/blog/1234402038#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Thu, 12 Feb 2009 01:27:18 GMT</pubDate>
<guid>http://611125567.qzone.qq.com/blog/1234402038</guid>
</item>

<item>
<title><![CDATA[网页设计中文本输入框的一些参数说明]]></title>
<link>http://611125567.qzone.qq.com/blog/1228541222</link>
<description><![CDATA[<span style="font-family:'Verdana';line-height:1.8em;"><span style="font-weight:bold"><wbr />文本输入框</span><wbr />一般在留言本，论坛等地方都要用到，也就是html语言中的textarea,textare包含有众多的参数，学会运用这些参数，就可以随意修改文本输入框的大小和外观，达到想要的效果，下面就来介绍这些参数，以及如何使用这些参数。 </span><wbr /><span style="font-family:'Verdana';line-height:1.8em;">      <span style="font-weight:bold"><wbr />1、cols，垂直列。</span><wbr />在没有做样式表设置的情况下，它表示一行中可容纳下的字节数。例如cols=60，表示一行中最多可容纳60个字节，也就是30个汉字。另外要注意的是，文本框的宽度就是通过这个来调整，输入好cols的数值，然后再定义输入文字字体的大小（不定义的话，会采用默认值），那么文本框的宽度就确定了。 </span><wbr /><br><span style="font-family:'Verdana';line-height:1.8em;"><span style="font-weight:bold"><wbr />2、rows，水平列。</span><wbr />表示可显示的行数，例如rows=10，表示可显示10行。超过10行，则需要拖动滚动条来浏览了。（同上，文本框的高度就是通过这个来控制的。） </span><wbr /><br><span style="font-family:'Verdana';line-height:1.8em;"><span style="font-weight:bold"><wbr />3、name，文本框的名称，这项必不可省，因为存储文本的时候必须用到。</span><wbr /> <br></span><wbr /><span style="font-family:'Verdana';line-height:1.8em;"><br><span style="font-weight:bold"><wbr />4、warp，当warp=&quot;off&quot;表示该文本区域中不自动换行，当然不写默认是自动换行的。</span><wbr />这个参数一般用得比较少。 <br><span style="font-weight:bold"><wbr />5、style，这是个非常实用的参数，可以用来设置文本框的背景色，滚动条颜色及形式，边框色，输入字体的大小颜色等等。</span><wbr /> <br><span style="font-weight:bold"><wbr />6、class，一般用来调用外部css里边的设置。 <br></span><wbr /><br>例1：设置文本框的行数为40，列数为10。名称为text。表达形式 &lt;textarea cols=40 rows=10 name=text&gt;&lt;/textarea&gt; <br>例2：取消文本框右边的滚动条。表达形式&lt;textarea cols=40 rows=10 name=text style=&quot;overflow:auto&quot;&gt;&lt;/textarea&gt;。style=&quot;overflow:auto&quot;的意思就是当输入的文本超出设置的行数时才自动显示滚动条。<br><br>例3：设置文本框的背景色。&lt;textarea cols=40 rows=10 name=text style=&quot;background-color:BFCEDC&quot;&gt;&lt;/textarea&gt;。 <br>例4：另外设置文本框的滚动条颜色，边框色，以及字体大小，颜色，行距等，都可以直接在style里设置。不过这些一般都习惯在CSS里设置，直接调用就好了。下面是一段CSS设置代码：应该比较容易看懂，textbox里边依次设置的是文本框的背景色，上下左右边框色和厚度，以及输入字体的大小等。 <br><span style="line-height:1.8em;">以下是引用片段：</span><wbr /><br>&lt;style&gt; <br>.textbox { BACKGROUND: #BFCEDC; BORDER-TOP: #7F9DB9 1px solid; BORDER-LEFT: #7F9DB9 1px solid; BORDER-RIGHT: #7F9DB9 1px solid; BORDER-BOTTOM: #7F9DB9 1px solid; FONT-FAMILY: &quot;宋体&quot;, &quot;Verdana&quot;, &quot;Arial&quot;, &quot;Helvetica&quot;; FONT-SIZE: 12px; TEXT-ALIGN: LIFT;} <br>&lt;/style&gt; <br>把上面一段代码插到页面的&lt;head&gt;与&lt;/head&gt;之间。调用方式：&lt;textarea cols=40 rows=10 name=text class=&quot;textbox&quot;&gt;&lt;/textarea&gt;。 class=&quot;&quot;中的名字对应css里边要用到的设置的名字。熟悉了这些参数，修改和美化文本输入框就很方便了。 <br></span><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[611125567@qq.com(无忧网盟)]]></author>
<comments>http://611125567.qzone.qq.com/blog/1228541222#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Sat, 06 Dec 2008 05:27:02 GMT</pubDate>
<guid>http://611125567.qzone.qq.com/blog/1228541222</guid>
</item>

</channel>
</rss>

