当前位置:文档之家› IDA反汇编学习心得

IDA反汇编学习心得

IDA反汇编学习心得
IDA反汇编学习心得

用IDA反汇编动态库

最近,一直在学习如何利用IDA来反汇编动态库,这里把我的学习心得写下来。为简单起见,这里就自己所写的一个动态库里的一个简单函数进行一下反汇编,给出如何写出其C代码的详细过程,希望对新手有点帮助。废话少说,先给出其动态连接库的C代码如下_declspec(dllexport) int add(char a, int b, int c[2])

{

int d = a + b + c[0] + c[1];

return d;

}

至于为什么要设置这样的参数,待会在反汇编时进行说明。下面给出其详细的反汇编过程,并补充相关的经验总结。

第一步、装载动态库文件” first .dll”,装载之后得到下面的截图:

通过在Functions一栏中双击add函数,我们来到add()函数的地方(同上图),我们看到”text:10001010 add proc near ; CODE XREF: add(char,int,int * const) j”这样一栏显示了add函数的参数,虽然有点出入,但大体正确。可能是因为add函数本身比较简单,所以IDA很容易就识别出了其参数,一般地,IDA是识别不出来的,网上有一个插件

为”Flair.v5.20”据说可以部分地解决函数的参数识别问题,但这个软件我没有下载到,就不说这个了。

第二步、我们看到”.text:10001010”这些栏有很多标示,在下面的汇编语句中会用到。我们看接下来的三行代码:

.text:10001010 push ebp

.text:10001011 mov ebp, esp

.text:10001013 sub esp, 44h

这三行代码模式基本上是固定的,(至少我遇到的都是这样)首先是保存ebp, 然后用ebp来保存esp的原始指向,再将esp的指向向上移动44h个字节,(当然这里44h不是固定的)为什么会有这样固定的代码呢?就代码“sub esp 44h”而言,在原esp的基础上向上移动44h 的字节空间,而esp ----- esp-44h这个44h的空间是为了存放一般变量的。其他两行相信读者很容易理解其理由。

第三步、看下面三行代码.

.text:10001016 push ebx

.text:10001017 push esi

.text:10001018 push edi

当我们在函数的开头看到这样的代码时,而后面又没有紧跟着”call + function”时,我们大可不用理解,因为这些push语句目的都是为了不破坏原始ebx,esi,edi的值而将他们保存起来,并且这里我们可以看到,是保存在esp-44h之上的。也就是说,如果我们看到函数的开头出现将寄存器push进esp-x之上的空间(我们将”esp-x 至esp”的堆栈空间成为“一般变量栈空间”),这里就是指push进esp-44h之上的堆栈空间,我们不用去关心,在函数末尾肯定会有相应的代码将他们还原的。(待会我们会看到)

第四步、继续向下看,进入关键代码段。在做进一步解释之前我先画一幅堆栈图。如下:

好了,有了上一幅图,说明起来会容易些。看接下来的四条代码:

.text:10001019 lea edi, [ebp+var_44]

.text:1000101C mov ecx, 11h

.text:10001021 mov eax, 0CCCCCCCCh

.text:10001026 rep stosd

这四条代码和上面的三条代码一样,其模式一般是固定不变的。其作用就是实现了“一般变量栈空间”的初始化。这里将图中所示的“一般变量栈空间“初始化为0xCCCCCCCC.其具体的代码解释如下:

lea edi, [ebp+var_44] : edi = ebp + vat_44

mov ecx, 11h :ecx = 0x11h

mov eax, 0CCCCCCCCh : eax = 0xCCCCCCCC;

rep stosd : for(int i1=0; i1

这里因为ecx=0x11(44h/4),所以将整个“一般变量栈空间”全部初始化为eax=0xCCCCCCCC; 这下就清楚了为什么上面的四条代码一般模式是固定的,原因就是对将要用到的“一般变量栈空间”进行初始化。

第五步、进入核心代码段

.text:10001028 movsx eax, [ebp+arg_0]

.text:1000102C add eax, [ebp+arg_4]

.text:1000102F mov ecx, [ebp+arg_8]

.text:10001032 add eax, [ecx]

.text:10001034 mov edx, [ebp+arg_8]

.text:10001037 add eax, [edx+4]

.text:1000103A mov [ebp+var_4], eax

.text:1000103D mov eax, [ebp+var_4]

从图上我们可以知道arg_0,arg_4,arg_8分别是0x8,0xc,0x10。(要是从图上看不清,请参考文件”first.txt”)代码”movsx eax, [ebp+arg_0]”表示将[ebp+arg_0]的值进行有符号扩展后传给eax。但是这里的[ebp+arg_0]究竟是什么呢?我们假设[ebp+arg_0]=can1,如图,那么”movsx eax, [ebp+arg_0]”就表示”eax = (char)can1”。因为我们有源代码,我们知道函数add()的参数为int add(char a, int b, int c[2]),这样我们有理由怀疑(char)can1就是char a,即add的第一个参数。我们接着看下一条代码:”add eax, [ebp+arg_4]”,有了上面的猜想,我们不无理由认为[ebp+arg_4]就是can2,这样就实现了eax = can1+can2;再看代码”mov ecx, [ebp+arg_8]”和”add eax, [ecx]”,我们可以猜想得到[ebp+arg_8]其实是一个地址,因为后面有” add eax, [ecx]”这样的代码,表示为将ecx所指向的地址的值传给eax。所以肯定这就是can3,即一个int型的地址参数。”add eax, [ecx]”之后,eax = can1+can2+can3[0]。接下来的两行代码”mov edx, [ebp+arg_8”和”add eax, [edx+4]”与上面的相似,实现了eax = can1+can2+can3[0]+can3[1]。再看剩下的两行代码,”mov [ebp+var_4], eax”,” mov eax, [ebp+var_4]”,这两行代码是先将eax的值赋给[ebp+var_4],再将其值给eax。第一行代码其实是将结果储存在[ebp+var_4],第二行代码是将返回值给eax。(一般地,函数的返回值要是是int型的话,都会将返回值赋给exa,这也

可以看成是一种固定的模式)。到这里,函数基本上完成了,这里可以看出为什么将add函数的参数设置成char,int和int*了,目的就是为了认清楚原来的参数是放在堆栈中具体什么地方就目前可见,函数的第i个参数放在esp+4+i*4所指的堆栈中(i从1开始,esp是指最先的栈顶指针,后来传给了ebp)(一般第一个参数都是从[ebp+arg_0]开始,而arg_0一般为8,其他的参数依次放置)。同时我们也看到了参数返回的值会存放在寄存器eax中。这些到底是不是固定的,由于自己刚入门,不敢随便肯定。

第六步、接下来的代码基本上就是还原先前存储的寄存器,就不做详细解释了。

.text:10001040 pop edi

.text:10001041 pop esi

.text:10001042 pop ebx

.text:10001043 mov esp, ebp

.text:10001045 pop ebp

.text:10001046 retn

.text:10001046 add endp

好了,到这里,我们对用IDA反汇编动态库文件有了一定的认识和经验积累。但是这样反汇编成C语言似乎太慢了,对于这个简单的add()函数还好,遇到难一点的函数那就说不定了。好在我们有”hexray”这个将汇编代码转成C语言代码的插件,下面我们就用试着用这个插件来写C代码。

加载first.dll文件后,同样在”Functions”一栏双击函数add,来到view的add函数区。按F5键,得到如下的截图

int __cdecl add(char a1, int a2, int a3)

{

char v4; // [sp+Ch] [bp-44h]@1

memset(&v4, -858993460, 0x44u);

return *(_DWORD *)(a3 + 4) + *(_DWORD *)a3 + a2 + a1;

}

这里很明显Hexray在做转换时,第三个参数没有分清是地址还是值,没关系,在下面的代码中我们看到*(_DWORD *)(a3 + 4)这样的代码,其实就是a3[4/4] = a3[1],后面的*(_DWORD *)a3就是a3[0]了。很多时候,都会出现上面的强制转换问题,比如遇到代码*(_DWORD *)(str + 4*i)那么一般地,str就是一个地址,代码本身就表示是str[i](要对这些常见的转换做出很快的反应以节省时间)。这样,Hexray就直接帮我们转换得到了源代码。当然,有时候Hexray的转换是不可信的,这时我们就要写程序进行检测了。接续看上面的代码,char v4;和后面紧跟着的memset(&v4, -858993460, 0x44u)其实就是将“一般变量栈空间”初始化为-858993460=0xcccccccc,这两行代码一般是固定模式的,其作用都是将“一般变量栈空间”初始化,一般不用管,接下来的才是真正的代码区。

既然这里我们说到了Hexray的转换问题,这里我们不妨将所见到的几个常见转换问题

规整出来,以便以后我们更快地根据DLL得到C源代码。

1、如果函数的参数中出现int*这样整型指针,Hexray一般会视为int型进行转换,(原因就

是因为地址int*其实也是一个整形,只不过是表示一个地址而已)。怎样看出这样的转换问题呢,很简单,一般出现这样的转换问题,在转换的C代码中都有像“*(_DWORD *)(par + 4*i)”这样的代码,(其中par是函数中的一个整型参数),这时一般地,我们能肯定转化除了问题,直接将“*(_DWORD *)(par + 4*i)”改成par[i]就可以了。更简单的改写,就是直接利用hexray的改写功能进行改写,如上面的那个Dll文件中的add()函数,Hexray转换得到的最初C代码如图:

在add函数上点击右键,选择Set item type Y,如图:

点击之后得到:

将int a3修改成int *strnum,点ok保存,我们发现Hexray转换的C代码也发上了改变,如图:

到这里我们不得不佩服Hexray的智能化。同样地,和上面出现的转换问题相似,hexray 在转换过程中要是函数有参数char *str型,那么hexray一般也会将参数识为int型,其原因不再罗嗦了。那么怎样发现这样的转换问题呢?和上面的原理一样,在C代码中一般会有如下的代码出现:

*(_BYTE *)(str + i)

(注意:这里已经不是4*i了,为什么,因为一个int型占4个字节,而一个char型只占1个字节,所以是i而不是4*i了,类似地我们可以推测,参数要是是short *str,那么C代码中一般就会出现*(_WORD *)(str + 2*i),究竟是不是这样,可以写个Dll 函数尝试一些)

看到这样的代码,我们一般敢肯定Hexray将char *str转换成了一个整型。出现了转换问题,我们用上面的办法将他们修改过来就行了。

要是不是参数,而是在函数体内部我们定义了一个int *str类型或者char *str类型的数组,那么这时Hexray会不会将他们转换成int 型呢?未必,Hexray有的时候能认出来,有的时候又分不出来,但我们怎么才能看出来呢。第一、看代码中也没有如上所说强制转换问题,要是有的话我们照葫芦画瓢就可以了。第二、也有看不出来的,比如我们在代码中定义了int *str[100]。但是我们只用到其中的前3个数字,那么hexray一般不会出现强制转换,直接就在”一般变量栈空间”的一块连续地址空间存放了要用的前三个数字,这可能是Hexray的一种优化吧。(注意:可以从转换得到的C代码后面的注释看出是不是连续的,如:int v6// [sp+5Ch] [bp-188h]@1,int v7; // [sp+58h] [bp-18Ch]@1,int v8; // [sp+54h] [bp-190h]@1就能很明显地根据后面的注释看出是一个连续空间。)2、总结起来,要确定在转换中是否出现了转换问题,最主要的是看代码中是不是有强制转

换的代码,如:*(_DWORD *)(str + 4*i),*(_BYTE *)(str + i)等。要是有。我们可以认为出现了转换问题,没有那更好了。

说明:上面所说的一切都不是绝对的,只是我的一个经验总结。毕竟插件是人家的,并不清楚插件中的代码是如何处理,所以具体的情况我们还需具体对待。

int v6// [sp+5Ch] [bp-188h]@1

int v7; // [sp+58h] [bp-18Ch]@1

int v8; // [sp+54h] [bp-190h]@1

利用上面的一些经验,我们来看下面的一个dll文件”second.dll”,同样我们也对里面的一个函数char* initstr(int n, char *str, int len)进行跟踪得到C代码。同样先给出真正的C代码如下:

_declspec(dllexport) char* initstr(int n, char *str, int len)

{

if(len < n) return NULL;

for(int i1 = 0; i1 < n; i1 ++)

{

str[i1] = i1+1;

}

return str;

}

尽管我们用Hexray能很容易地得到上面的C 代码,但是我们这里还是一步步先来看一下汇编代码,一是看看我们上面所获取的经验是不是可以用上,二是我们进一步熟悉汇编代码。好了,在加载second.dll文件之后,我们得到如下的截图:

具体的代码可以参考文件“second.txt”。这个代码比上面的代码稍微复杂些。没事,看代码:.text:10001010 push ebp

.text:10001011 mov ebp, esp

.text:10001013 sub esp, 44h

.text:10001016 push ebx

.text:10001017 push esi

.text:10001018 push edi

.text:10001019 lea edi, [ebp+var_44]

.text:1000101C mov ecx, 11h

.text:10001021 mov eax, 0CCCCCCCCh

.text:10001026 rep stosd

上面列出的代码我们再熟悉不过了,都是些固定的模块,不用去细看了。接下来看下面的代码:

.text:10001028 mov eax, [ebp+arg_8]

.text:1000102B cmp eax, [ebp+arg_0]

.text:1000102E jge short loc_10001034

.text:10001030 xor eax, eax

.text:10001032 jmp short loc_10001061

根据上面的经验,我们知道[ebp+arg_0]里面放的就是第一个参数。代码意思大体如下:.text:10001028 :将参数3传给eax

.text:1000102B :eax与参数1比较,即第三个参数与第一个参数比较

.text:1000102E :if(eax>=[ebp+arg_0]) goto loc_10001034;else do nothing

.text:10001030 :eax = 0;。

.text:10001032 :goto loc_10001061

继续看接下来的代码:

.text:10001034 loc_10001034: ; CODE XREF: initstr_0+1E j .text:10001034 mov [ebp+var_4], 0

.text:1000103B jmp short loc_10001046

(以上的代码其实就是for(i = 0; ……) 的模式)

上面的代码没什么好说的,我们继续往下看:

.text:1000103D loc_1000103D: ; CODE XREF: initstr_0+4C j .text:1000103D mov ecx, [ebp+var_4]

.text:10001040 add ecx, 1

.text:10001043 mov [ebp+var_4], ecx

上面的代码相当于[ebp+var_4]++; for(i=0; i??; i ++)

继续向下:

.text:10001046 loc_10001046:; CODE XREF: initstr_0+2B j .text:10001046 mov edx, [ebp+var_4]

.text:10001049 cmp edx, [ebp+arg_0]

.text:1000104C jge short loc_1000105E

(for(i=0;i

.text:1000104E mov eax, [ebp+var_4]

.text:10001051 add eax, 1

.text:10001054 mov ecx, [ebp+arg_4]

.text:10001057 add ecx, [ebp+var_4]

.text:1000105A mov [ecx], al

.text:1000105C jmp short loc_1000103D

.text:1000105E loc_1000105E:; CODE XREF: initstr_0+3C j .text:1000105E mov eax, [ebp+arg_4]

.text:10001061

.text:10001061 loc_10001061:; CODE XREF: initstr_0+22 j

.text:10001061 pop edi

.text:10001062 pop esi

.text:10001063 pop ebx

.text:10001064 mov esp, ebp

.text:10001066 pop ebp

.text:10001067 retn

.text:10001067 initstr_0 endp

跳转到loc_10001061:就意味着函数体的结束,我们看到在代码

.text:10001032 jmp short loc_10001061

中,就直接跳转到结束处,即if(can3

所以有”if(can3

下面的代码构成了一个循环,

.text:1000103D loc_1000103D: ; CODE XREF: initstr_0+4C j

.text:1000105C jmp short loc_1000103D

从夹在中的代码

.text:10001049 cmp edx, [ebp+arg_0]

.text:1000104C jge short loc_1000105E

从这段循环代码我们看到IDA是怎样反汇编一个for循环的:

1、出现如下的代码模块(对计数器i的初始化)

.text:1000103D loc_1000103D: ; CODE XREF: initstr_0+4C j

.text:1000103D mov ecx, [ebp+var_4]

.text:10001040 add ecx, 1

.text:10001043 mov [ebp+var_4], ecx

这就相当于for(i=0; ……)

2、接下俩的代码模块相当于实现for(i=0;i???; i ++)中的i++功能。

.text:1000103D loc_1000103D: ; CODE XREF: initstr_0+4C j

.text:1000103D mov ecx, [ebp+var_4]

.text:10001040 add ecx, 1

.text:10001043 mov [ebp+var_4], ecx

3、接下来的模块就实现了for(i=0;i

可见,IDA在实现一个for循环时,首先初始化i=num; 然后i+=n; 最后是for循环中间判定功能的实现。

剩下的代码就说其中几条吧

.text:1000105E mov eax, [ebp+arg_4]

这条代码实际上是将返回的char的指针放在了eax里面当做返回。这和我们上面的经验猜想符合。从代码

.text:10001057 add ecx, [ebp+var_4]

.text:1000105A mov [ecx], al

我们很容易看出[ebp+var_4]是一个指针(因为有[ecx]),而且很可能还是一个char型的指针(因为传给[ecx]的是一个字节al)

其他的代码这里就不说了。突然发先一个问题:在函数刚开始的时候都会有相应的标示,这个函数的标示如下:

.text:10001010 initstr_0 proc near ; CODE XREF: initstr j

.text:10001010

.text:10001010 var_44 = byte ptr -44h

.text:10001010 var_4 = dword ptr -4

.text:10001010 arg_0 = dword ptr 8

.text:10001010 arg_4 = dword ptr 0Ch

.text:10001010 arg_8 = dword ptr 10h

这些标示有什么用呢?我的猜想如下:

.text:10001010 var_44 = byte ptr -44h

这一条标示表明“一般变量栈空间”的大小为44h.

.text:10001010 var_4 = dword ptr -4这一条表明什么呢?暂时不清楚

剩下的三行

.text:10001010 arg_0 = dword ptr 8

.text:10001010 arg_4 = dword ptr 0Ch

.text:10001010 arg_8 = dword ptr 10h

表明参数有三个,依次放在[ebp+arg_0],[ebp+arg_4],[ebp+arg_8]里面。(ebp就是最初的esp)

也不知道上面的猜测对不对。仅当一种猜测吧!

接下来我们看看hexray给我们转换的C代码

int __cdecl initstr_0(int a1, int a2, int a3)

{

int result; // eax@2

int v4; // [sp+4Ch] [bp-4h]@3

if ( a3 >= a1 )

{

v4 = 0;

while ( v4 < a1 )

{

*(_BYTE *)(v4 + a2) = (_BYTE)v4 + 1;

++v4;

}

result = a2;

}

else

{

result = 0;

}

return result;

}

利用上面的经验,我们很容易将参数int a2改写成char *a2,其他的就不说多说了,注意一点,原来的初始化代码,如第一个例子中的“memset(&v4, -858993460, 0x44u)“这次并没有出来,不过这关系不大。暂且就到这里吧!技术含量很低,但愿对初学者有点用处,就倍感欣慰了

这里附上一句从名叫Boxer的作者所写的一片文章中摘抄下来的话

一般而言,ss:[ebp+4]处为返回地址

ss:[ebp+8]处为第一个参数值(这里是a),ss:[ebp+0Ch]处为第二个参数(这里是b,这里8+4=12=0Ch)

ss:[ebp-4]处为第一个局部变量(这里是c),ss:[ebp]处为上一层EBP值

ebp和函数返回值是32位,所以占4个字节

做幸福教师心得体会

《做一个幸福的教师》有感 陶老师在报告中常说:?读书破万卷,教学如有神。?作为教育者的陶老师,足迹遍及大江南北,他用自己的所见之事所闻之人告诉听众:教师的生命成长靠读书,教师的终生幸福靠读书。他在报告里讲了全国各地的老师们的故事,取例之广,让每一个听众都能产生共鸣:无论你是大学教授还是小学老师,无论你身处繁华闹市还是偏僻乡村,无论你是语文老师还是数理化老师,你都能从这些人物身上找到自己的榜样,让每一个听众产生?心向往之?的怦然心动:?如果我也能象他们一样读书写作,是否也能体验到‘教学如有神’的快乐??是的,陶老师说,任何一个老师,只要你愿意摒弃浮躁之气,静心读书,你就能触摸到?幸福?,与?幸福?亲密接触。 知识和文化修养是感受和创造幸福的关键,教师是培养祖国人才的核心力量,因此学习就显得更为重要,诸如现在所倡导的?把终身学习看作是生存的需要和实现幸福的重要途径。?有人说,当老师太没劲了,也确实,人生大部分时间呆在学校里,就捧着几本书教来教去,活得无色无味。但我觉得我们既然选择了教师这职业就应该去感受它的快乐与幸福,并创造幸福,虽然教材不变,但是孩子却是每天都在改变,每一届的学生都不同,都在渐渐的成长,和孩子们在一起本身就是一种幸福。 我们教师要每天坚持理论学习,不断给自己充电,很好地解决教学中遇到的问题。我们不要把学习看成一种负担,而应把它当成一种乐趣。久而久之,你便会感受到学习的乐趣,自然就会在学习中感到幸福。应该把学习视为一项重要的工作,这样才能获得更多的幸福,才能用知识创造出更高层次的幸福。通过学习才能形成一种积极的、向上的、对人类生活充满爱的心态。现在我周末经常去书店或图书馆阅读书刊,来丰富自己的知识面,我现在感觉自己精神上,知识上都是充实的。 教师的幸福是一种通融、豁达、敞亮、满足和感激,是智慧之上的智慧。教师的教育生命便是满足和宽容、感恩与和谐。相对安静、安宁、安心才能打开心障,体察自我,寻找和发现教育的幸福。幸福既在心灵深处,也在我 们眼前手边,所以我们要满足于学生的点滴进步,感激生活中的每一点理解、宽容、信任,甚至是压力、埋怨和怨愤。 带着幸福感做教师,正如揣着理想上路,不仅在做的过程中使幸福变成目的,而且必然会带来一个副产品,使教育教学变得精彩。为了祖国的下一代,为了民族的未来,我就要勇担责任,就要去感动自己,感动学生,感动社会,就要去体验教育的快乐,感受教育的幸福,就要?衣带渐宽终不悔,为伊消得人憔悴。?这才是教师的人生的至高境界!这才是教师完美的人生! 做一名幸福的教师,必定是拥有爱心的教师,师爱是师德的核心,师爱也是师魂!读懂了这种爱,我们便能更好地诠释我身边平凡事例中那炽热的爱心,做一名幸福的教师,必定肩负着无限责任,充满着坚定的信念。文人们歌颂:教师是太阳底下最光辉的职业。确实,教师是引领孩子们成长的导师,有着绝对的主导作用。但是同样,教师为人师表的特点决定了它崇高的责任感。一个没有责任心的人不论其职位高低,是无法在其所处的岗位上敬业奉献的。有了强烈的责任感与事业心,教师才会乐业、敬业。责任感也就成为了优秀教师的重要条件。教师的责任感源于对教育事业的热爱及愿意献身教育事业的坚定信念。唯有这样的坚定信念,才能为我们的内心带来满足与幸福。尼采曾说过一句话:?假如上帝不给我欢乐,我就为自己创造欢乐。?尼采为自己执着追求的哲学理念献出了近乎完整的一生,他是个孤独的盗火者,他的行为不是人人能够效仿得了的,但是,他的这样的执着的追求快乐与幸福的精神却是永远值得我们学习的,相信纵使平凡的我们也能凭着这样的信念和追求抵达幸福的彼岸。篇二:幸福教育心得体会 幸福教育心得体会

汇编语言 快速入门

“哎哟,哥们儿,还捣鼓汇编呢?那东西没用,兄弟用VB"钓"一个API就够你忙活个十天半月的,还不一定搞出来。”此君之言倒也不虚,那吾等还有无必要研他一究呢?(废话,当然有啦!要不然你写这篇文章干嘛。)别急,别急,让我把这个中原委慢慢道来:一、所有电脑语言写出的程序运行时在内存中都以机器码方式存储,机器码可以被比较准确的翻译成汇编语言,这是因为汇编语言兼容性最好,故几乎所有跟踪、调试工具(包括WIN95/98下)都是以汇编示人的,如果阁下对CRACK颇感兴趣……;二、汇编直接与硬件打交道,如果你想搞通程序在执行时在电脑中的来龙去脉,也就是搞清电脑每个组成部分究竟在干什么、究竟怎么干?一个真正的硬件发烧友,不懂这些可不行。三、如今玩DOS的多是“高手”,如能像吾一样混入(我不是高手)“高手”内部,不仅可以从“高手”朋友那儿套些黑客级“机密”,还可以自诩“高手”尽情享受强烈的虚荣感--#$%&“醒醒!” 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指

李阳疯狂英语〈高考作文成功之路〉全文-(省纸打印版)

李阳疯狂英语 高考英语作文成功之路 目录 Content 成功之路第一篇:暑假打工 Summer Holiday Part-time Job 成功之路第二篇:广告与现代生活 Advertisements in Our Life 成功之路第三篇:口头通知—欢迎美国代表团 American Student’s Visit 成功之路第四篇:写好英语作文的秘密 Secrets to Write a Beautiful Article 成功之路第五篇:经典求职信 Job Hunting 成功之路第六篇:学生是否应该参加体育锻炼 Whether Students should Take Physical Exercise 成功之路第七篇:因特网的作用 On the Internet 成功之路第八篇:经典图表描述 The Red Star Television Factory 成功之路第九篇:农村儿童失学问题 Rural Education 成功之路第十篇:网络学校 New Century Net-school 成功之路第十一篇:北京奥运 Beijing Olympic Games 成功之路第十二篇:学生是否有必要带手机去学校 Mobile Phones at School 李阳老师特别奉献:英语是我最喜欢的科目 English Is My Favorite Subject 秘诀一:背诵一篇经典范文胜过自己写十篇文章。 秘诀二:背诵最好的方法就是随身携带!利用每天大量的 零碎时间疯狂操练,你一定能成功! 秘诀三:记不住和智商没有任何关系,每个人都是伟大的 天才!记不住的唯一原因就是:重复得远远不够! 秘诀四:天才的秘诀就是:通过反复的练习,把一件事情做到炉火纯青的境界! 成功之路第一篇:暑假打工 文体:记叙文 【题目要求】 暑假过后,你的外籍教师要同学们汇报自己假期所从事的社会活动和自己的感想。请写一书面材料交给外教: 你在2005年暑假到一家肯德基(KFC)快餐店做保洁员(cleaner)在新学期开始之前,你终于坚持完成了这项工作,并且认识到了劳动(labor)的意义,你认为这是一次成功的体验。 注意: 1.必须用第一人称 2.字数100个左右 【李阳疯狂英语经典范文】 [1] During the summer holiday of 2005, I thought I should do something meaningful instead of staying at home and watching TV. So I got a job at a KFC fast food restaurant and worked there as a cleaner. Every day I went to work early in the morning and got home late in the evening. I worked 7 hours a day for three weeks. [2] The job was hard, boring and seemed endless, which made me so tired that I almost quit half way. After all, I stuck to it with my determination. [3] Finally, I finished the job before the new school term began. [4] Now, I understand what labor means. I think it was really a successful experience. 成功之路第二篇:广告与现代生活 文体:议论文 【题目要求】 请根据以下提供的要点写一篇议论文,阐述一下广告业已经成为当今社会很重要的一种行业,词数100字左右。 (1)生活中充斥着各种各样的广告,广播、电视及电脑使广告成为我们日常生活中的一个重要部分。 (2)广告不仅能促销,还能提供我们需要的各种最新消息。(3)广告行业还创造了很多的就业机会。 【李阳疯狂英语经典范文】 [1] We live in a world of advertisements. We see and hear them everywhere. No one can avoid being influenced by advertisements. Radio, television and computers have made it possible for advertisements to attract the attention of millions of people. Therefore, it has become an important part of our daily life. [2] On one hand, advertising greatly promotes sales,on the other hand, in their efforts to tell people about products and events, advertisements provide us with a large amount of the latest information. Meanwhile, to make an advertisement, a lot of people will have to work together. So with the development of advertising a lot of jobs are being created. [3] In a word, advertising is an important business. 成功之路第三篇:口头通知——欢迎美国代表团 文体:口头通知 【题目要求】

汇编语言基础实验

实验1 DEBUG调试命令的练习(验证性实验) 一、实验目的 熟悉DEBUG环境、练习DEBUG调试程序的主要命令。二、实验内容 利用DEBUG调试程序练习编写和调试小程序段。 三、实验步骤 1.进入DEBUG调试环境; ①首先,点击开始--运行;(也可采用其他方式进入) ②在运行窗口下,输入cmd; ③点击确定之后,转到命令窗口,输入DEBUG并回车; 2.用R 命令查看并记录各寄存器内容及有关标志位的状态。 ①输入R 命令并回车; ②查看并记录有关寄存器内容。

3.用R 命令按表3的要求修改AX,BX,CX,DX等寄存器内容;用R命令查看结果是否正确并采用屏幕截图的方法记录结果。 4.用D查看ds:2000开始内存单元的内容,并采用屏幕截图的方法记录结果。 5.用E命令将‘ ABCDEFGHIJKLMN’, 0D , 0A , ‘ $ ’ 的ASCII码填入内存ds:2000处。 方法1:ASCII码输入; 方法2:字符串输入; 6.用D命令观察内存ds:2000处的16进制码及屏幕右边的ASCII字符是否正确,并采用屏幕截图的方法记录结果。 7.将所有的字符变为小写,重复5、6两步,注意对比大、小写英文字母ASCII码间关系。 8.Q命令退出DEBUG,重新进入DEBUG,用A命令在内存cs:100处键入下列内容: MOV AX,4321 MOV BX,5678 XCHG AX ,BX MOV AH,35 MOV AL,48 MOV DX,75AB XCHG AX,DX 9.用U cs:100命令检查键入的程序并记录,特别注意屏幕左边的机器码。

10.用R 命令对IP寄存器赋初值100; 11.用T命令逐条运行上述指令,每执行一次T命令检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。(用R 命令检查各寄存器内容,特别注意AX、BX、DX、IP的内容。) 说明:每按一次T命令,按序执行第8步中输入的一条指令,显示执行本条指令后有关寄存器的内容及下一次要执行的指令。 12.用E 命令T执行。 ①用E CS:200命令写入B8 01 00 B9 02 00 01 C8; ②用U CS:200命令对其反汇编,记录汇编指令; 结果:对应的汇编指令为: 13.用R命令先对IP赋初值200,再用T单步命令逐条执行步骤12中的指令,用R命令查看并记录AX、CX寄存器中的内容,并观察IP寄存器中内容的变化。 14.用命令D 观察内存FFFF0H~FFFFFH的内容,查看你所用电脑中的BIOS的生产日期。

教师心得体会 做最好的教师心得体会

做最好的教师心得体会 做最好的教师,,是因为这份工作让我感到光荣,一个个学生的进步让我感到喜悦,让我体现人生价值与意义,做老师,是因为天真无邪孩子熏陶影响着我保持着一颗珍贵的童心,在此分享心得体会。下面是为大家收集整理的做最好的教师心得体会,欢迎大家阅读。 做最好的教师心得体会篇1 读书的氛围已不知不觉围绕在我们每个人身边。闲暇之余,我静静学习了李镇西老师的《做最好的老师》。在阅读中,时时会被李镇西老师充满智慧和哲理的语言所打动。 阅读李镇西老师的《做最好的老师》一书,我的收获很多。李老师是苏霍姆林斯基的追随者,他在书中极力强调"没有爱,便没有教育","在教师素质的诸多因素中,对学生的奉献之心,理解之心,平等之心,责任之心等教师非智力因素是第一位的"。他说我们教育对象的心灵绝不是一块不毛之地,而是一片已经生长着美好思想道德萌芽的肥沃的田地。因此,教师的责任首先在于发现并扶正学生心灵土壤中的每一株幼芽,让它不断壮大,使缺点的杂草最后无立足之地。如果我们用成人的冷漠去对待孩子的真诚,那么一切"语重心长"的教育都无济于事。对于那些让人头疼的孩子李老师用"科研"的眼光去看,把教育上遇到的每一个难题,如班集体建设呀!"后进生"转化呀,早恋呀,作弊呀等等,都当作科研课题来对待,把每一个"难教儿童"都当作研究对象,心态就平静了,教育也从容了。当然,李老师也认为教育并不是有了爱就有了一切,教育之爱绝不是迁就纵容学生,绝不是放弃

严格要求和严肃的纪律。教育中真正的爱,意味着对学生的成长以至未来一生的负责。因此这种爱必然包含着对学生的严格要求,乃至必要的合理惩罚。总之,"爱","理解","尊重","平等"与"责任"在李老师身上体现得淋漓尽致,这正是教师的气度,教师的魅力。 最好的老师,他们的人格,学识,能力乃至天赋,我是永远无法比的,但我可以和自己比,也就是用今天的工作与昨天的工作相比,一日三省――我今天备课是不是比昨天更认真,更贴近学生,更适合我的学生,我今天在课堂上的发挥是不是比昨天更精彩,我今天处理突发事件是不是比昨天更机智,今天我组织的活动是不是比昨天更有趣,我今天帮助"后进生"是不是比昨天更细心,我今天驾驭课堂的智慧是不是比昨天更灵活,我今天所进行的教育反思是不是比昨天更深刻,今天我面对学生的教育教学建议或意见是不是比昨天更虚心,我今天听到各种"不理解"后是不是比昨天更冷静每天都不是最好,甚至每天都有遗憾,但每天都这样自己和自己比,坚持不懈,我就不断地向"最好的老师"的境界靠近。 "不是槌的打击,乃是水的载歌载舞,使鹅卵石臻于完美。" 做最好的教师心得体会篇2 教师的天职是育人,肩负着民族兴衰的重任,被广泛誉为园丁、春蚕、蜡烛、人梯、灵魂工程师、太阳底下最光辉的职业……怎样才能不辜负这些美称呢?我认为关键是心中要有"爱"。我国现代教育家夏沔尊曾说:"教育之没有情感,没有爱,如同池塘没有水一样,没有水,就不能称其为池塘,没有爱就没有教育。"是的,要成为一名

软件破解入门教程

先教大家一些基础知识,学习破解其实是要和程序打交道的,汇编是破解程序的必备知识,但有可能部分朋友都没有学习过汇编语言,所以我就在这里叫大家一些简单实用的破解语句吧! ---------------------------------------------------------------------------------------------------------------- 语句:cmp a,b //cmp是比较的意思!在这里假如a=1,b=2 那么就是a与b比较大小. mov a,b //mov是赋值语句,把b的值赋给a. je/jz //就是相等就到指定位置(也叫跳转). jne/jnz //不相等就到指定位置. jmp //无条件跳转. jl/jb //若小于就跳. ja/jg //若大于就跳. jge //若大于等于就跳. 这里以一款LRC傻瓜编辑器为例,讲解一下软件的初步破解过程。大家只要认真看我的操作一定会!假如还是不明白的话提出难点帮你解决,还不行的话直接找我!有时间给你补节课!呵呵! 目标:LRC傻瓜编辑器杀杀杀~~~~~~~~~ 简介:本软件可以让你听完一首MP3歌曲,便可编辑完成一首LRC歌词。并且本软件自身还带有MP3音乐播放和LRC歌词播放功能,没注册的软件只能使用15天。 工具/原料 我们破解或给软件脱壳最常用的软件就是OD全名叫Ollydbg,界面如图: 它是一个功能很强大的工具,左上角是cpu窗口,分别是地址,机器码,汇编代码,注释;注释添加方便,而且还能即时显示函数的调用结果,返回值. 右上角是寄存器窗口,但不仅仅反映寄存器的状况,还有好多东东;双击即可改变Eflag的值,对于寄存器,指令执行后发生改变的寄存器会用红色突出显示. cpu窗口下面还有一个小窗口,显示当前操作改变的寄存器状态. 左下角是内存窗口.可以ascii或者unicode两种方式显示内存信息. 右下角的是当前堆栈情况,还有注释啊. 步骤/方法 1. 我们要想破解一个软件就是修改它的代码,我们要想在这代码的海洋里找到我们破解关键的代码确实很棘 手,所以我们必须找到一定的线索,一便我们顺藤摸瓜的找到我们想要的东东,现在的关键问题就是什么

《作文成功之路》卢慧娟

浅谈小学语文阅读教学 河南省滑县城关镇育红小学卢慧娟 小学语文教学的根本目的是培养学生的阅读、写作能力。可见培养阅读能力是极其重要的。阅读教学中普遍存在着教师讲学生听,教师问学生答的现象。这样,不能从实质上提高学生的阅读能力,学生的词汇、说话、朗读、概括、思维能力都得不到真正的提高。那么,怎样培养小学生的阅读能力呢?下面谈谈我的几点浅见。 一、培养阅读能力,首先要加强词句训练。 读课文要理解其中的词语和句子,才能更好地了解文章的主要内容和基本思想;要会自觉地使用学过的词语和组织出所需要的句子,才能更好地准确地表达出真情实感。掌握一定的词语知识和句子知识,是发展阅读和写作的重要基础。因此,引导学生理解词语、积累词语和引导学生运用词语十分重要,是培养阅读能力的重要内容。词语训练要注意两点:一是既要重视理解又要重视运用,把学和用结合起来;二是要与阅读课文与理解文章结合起来。一些常用的词语,要引导学生在说话和作文中学习使用。一些基本句子形式,要引导学生加深认识,并让他们口头或书面造句子,学会使用。在引导学生理解词语时应让学生了解这些词语和句子在具体语言环境中的意 思和用法。有的词语一读就懂,不需要讲解。有的词语稍作比较;学生就理解了。教学的重点应放在哪里?重点应引导学生说,也就口头

运用。为了是学生更好地理解运用祖国丰富的语言,有时教师可以让学生把课文中词语、句式变换说法。 二、教给阅读方法,培养阅读能力 1.指导预习,教方法 预习是培养学生自学能力的一个重要方法,是提高课堂教学质量的重要一环。 学生刚上三年级,不会预习,我就把预习拿入课堂,集中上好预习指导课,教给学生预习方法:①读熟课文,要求达到正确、流利地朗读课文;②边读边想,读后能比较准确地回答出课文的主要内容;③要借助字典认字,理解词语。如在教学《孔子拜师》一课时,让学生按上述预习方法,学习课文,当学生熟读课文,说出课文主要内容,并借助字典认字,理解词语,把不理解的句子划上记号以后,再让学生回顾刚才的学习过程,让学生自己归纳出预习的方法和步骤。这样,在课堂上指导三、四篇课文,学生就基本掌握了预习方法和步骤。 随着阅读训练项目的进行,预习要求也相应提高,在上述训练的基础上,再给学生布置方向性预习提纲,让学生有所遵循,使预习由扶向放过渡。学生课前做了充分预习,不仅提高了教效果,为大量阅读创造了条件,而且学生通过预习,掌握了预习方法和步骤,提高了自学能力,使阅读起步训练有了一个很好的开端。

objdump命令

objdump命令 objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具。选项 --archive-headers -a 显示档案库的成员信息,类似ls -l将lib*.a的信息列出。 -b bfdname --target=bfdname 指定目标码格式。这不是必须的,objdump能自动识别许多格式,比如: objdump -b oasys -m vax -h fu.o 显示fu.o的头部摘要信息,明确指出该文件是Vax系统下用Oasys编译器生成的目标文件。objdump -i将给出这里可以指定的目标码格式列表。 -C --demangle 将底层的符号名解码成用户级名字,除了去掉所开头的下划线之外,还使得C++函数名以可理解的方式显示出来。

--debugging -g 显示调试信息。企图解析保存在文件中的调试信息并以C语言的语法显示出来。仅仅支持某些类型的调试信息。有些其他的格式被readelf -w支持。 -e --debugging-tags 类似-g选项,但是生成的信息是和ctags工具相兼容的格式。 --disassemble -d 从objfile中反汇编那些特定指令机器码的section。 -D --disassemble-all 与-d 类似,但反汇编所有section. --prefix-addresses 反汇编的时候,显示每一行的完整地址。这是一种比较老的反汇编格式。

-EB -EL --endian={big|little} 指定目标文件的小端。这个项将影响反汇编出来的指令。在反汇编的文件没描述小端信息的时候用。例如S-records. -f --file-headers 显示objfile中每个文件的整体头部摘要信息。 -h --section-headers --headers 显示目标文件各个section的头部摘要信息。 -H --help 简短的帮助信息。 -i --info

怎样做个好老师心得体会

[怎样做个好老师心得体会]在现在社会,怎样做个好老师是我们每个教师心中所想,可从以下几点入手: 一、作为教师要爱岗敬业、尽职尽责 作为一名教师,必须要有良好的职业道德,具有较高的人格魅力,教育家陶行知曾说过,“德者师之魂。”教师是学生崇拜和模仿的对象,教师只有以身作则,才能有效引导学生怎样去做人和学习。学高为师,身正为范,这是对教师职业特征的概括,也是对现代教师人格塑造的要求。 做一名好老师应该有职业之爱。干一行,爱一行,既然自己选择了教师这一职业,就要把自己的这份职业当成一种事业来对待,从而会产生一种对事业的执着和热爱,并且具有着一种强烈的责任感。只有有了对事业的执着和热爱,崇高的使命感和责任心才会油然而生;只有有了对事业的执着和热爱,才会热爱学生;在工作过程中高标准要求自己,时刻规范自己的言行。为人师表,以身立教,乐于奉献,不计个人得失,一切服从工作需要,自觉地积极地为每一位学生的健康成长尽心尽力,尽职尽责。 做一名好教师,还要具有爱岗敬业的精神,而敬业与爱学生是分不开的。要爱学生,要让学生喜欢你。春雨能温暖冰封的泥土,朝阳能抚慰心灵的湖水,生命的歌声能唤醒一粒粒沉睡的种子。爱学生,就要像春风化雨般无声,让他成为莘莘学子心目中的一种看得见,摸得着的最为催人奋进的有效情愫,让他成为人的一生中一道最赏心悦目的亮丽景致。师爱应该是每个学生都能充分享受的权利,充分沐浴爱的霞光。留有死角的师爱是一种不公平的师爱,不成熟的师爱,因此我特别关注那些有“问题”的特殊孩子,我用心去体会孩子的心情,孩子的感受。所以我从来没有因为他们学习或行为习惯差而放弃他们,因为他们就像是一颗蒙着尘埃的珠子,作为教师的我有责任去发现他们,重视他们,为他们擦拭,帮他们发亮。也许他们的光是微弱的,但是我们要相信有光就会有希望。他们的接受能力差,我们要不厌其烦地一遍又一遍地为他们讲解。让这些孩子不断地取得进步,慢慢跟上班集体前进的脚步。

一个简单的C程序反汇编解析.

一个简单的 C++程序反汇编解析 本系列主要从汇编角度研究 c++语言机制和汇编的对应关系。第一篇自然应该从最简单的开始。 c++的源代码如下: class my_class { public : my_class( { m_member = 1; } void method(int n { m_member = n; } ~my_class( { m_member = 0; } private :

int m_member; }; int _tmain(int argc, _tchar* argv[] { my_class a_class; a_class.method(10; return 0; } 可以直接 debug 的时候看到 assembly 代码,不过这样获得的代码注释比较少。比较理想的方法是利用 vc 编译器的一个选项 /fas来生成对应的汇编代码。 /fas还会在汇编代码中加入注释注明和 c++代码的对应关系,十分有助于分析。 build 代码便可以在输出目录下发现对应的 .asm 文件。本文将逐句分析汇编代码和 c++的对应关系。 首先是 winmain : _text segment _wmain proc push ebp ; 保存旧的 ebp mov ebp, esp ; ebp保存当前栈的位置 push -1 ; 建立 seh(structured exception handler链 ; -1表示表头 , 没有 prev

push __ehhandler$_wmain ; seh异常处理程序的地址 mov eax, dword ptr fs:0 ; fs:0指向 teb 的内容,头 4个字节是当前 seh 链的地址 push eax ; 保存起来 sub esp, d8h ; 分配 d8h 字节的空间 push ebx push esi push edi lea edi, dword ptr [ebp-e4h] ; e4h = d8h + 4 * 3,跳过中间 ebx, esi, edi mov ecx, 36h ; 36h*4h=d8h,也就是用 36h 个 cccccccch 填满刚才分配的 d8h 字节空间 mov eax, cccccccch rep stosd mov eax, dword ptr ___security_cookie xor eax, ebp push eax ; ebp ^ __security_cookie压栈保存 lea eax, dword ptr [ebp-0ch] ; ebp-0ch 是新的 seh 链的结构地址(刚压入栈中的栈地址 mov dword ptr fs:0, eax ; 设置到 teb 中作为当前 active 的 seh 链表末尾 到此为止栈的内容是这样的: 低地址 security cookie after xor

IAR -arm 入门教程

IAR 使用说明 关于文档(初版): 1.主要是为了给IAR的绝对新手作参考用 2.emot制件,由Zigbee & IAR 学习小组保持修订权 3.希望用IAR朋友能将它修订完善 4.任何人可无偿转载、传播本文档,无须申请许可,但请保留文档来源及标志 5.如无重大升级,请沿用主版本号 版本 版本号制作时间制定人/修改人说明 1.00 2008/7/27 emot 初版(仅供新手参考) 1.01 2010/8/19 Emot 增加 下载程序(第四章) 在线调试程序(第五章) 序: 其实IAR和keil区别也没有多大,不过很多人就是怕(当初我也怕)。怕什么呢,怕学会了,真的就是害怕学习的心理让新手觉得IAR是个不好用的或者说“还不会用的”一个工具吧。我也是一个刚毕业的小子,如果说得不妥,还请大家来点砖头,好让小组筑高起来。(Zigbee & IAR 学习小组地址是https://www.doczj.com/doc/74171616.html,/673) 初版我将会说明以下3个问题,IAR的安装、第一个IAR工程的建立和工作编译。这是我写的第一个使用说明,不足的以后补充吧。 一、IAR软件安装图解 1.打开IAR软件安装包进入安装界面 打开软件开发包

软件安装界面 2.按照提示步骤执行,一直到授权页面,输入序列号,IAR中有两层序列号,所以要输入两 组序列号。 输入第一组序列号

3.选择安装路径(最好默认,不默认也不影响使用) 路径选择页面

修改路径4.选择全部安装(Full) 选择全部安装5.按提示知道安装完成。

安装完成页面 二、新建第一个IAR工程 用IAR首先要新建的是工作区,而不是工程。在工作区里再建立工程,一个工作区里似乎也不能建多个工程(我试过,但没成功,不知道IAR里提出workspace的概念是为什么?)要不打IAR的help来看,说清楚也是头痛的事,先知道有要在工作空间里建工程就对了。新建IAR工作空间,首先是菜单File里选择Open再选择Workspace,为方便说明再遇到菜 单我就直接说成File-Open-Workspace这样了。看了下面图上的红圈就知道是怎么回事了。 接着就会看到一片空白。这时就是新的“办公区”了。

我的作文成功之路

我的作文成功之路 作文水平的高低就是学生语文综合能力的体现。可谈文色变的学生大有人在,老师往往也会感到无从下手,问题出在哪?我认为主要是学生的生活范围有限,缺乏观察力,感受生活能力没有养成,写作素材有限,心里有话倒不出。对此,我就对于如何提高学生的写作能力谈谈自己的点滴体会。 一、教师必须教给他们观察的方法 苏霍姆林斯基说过:每一个孩子就其天性来说都是诗人,但是要让他心里的诗的琴弦响起来,要打开他的创作的泉源,就必须教给他观察和发觉各种事物之间的众多的关系。教师应鼓励学生走出课堂,走进生活,引导学生自己去观察,去发现,去体验;鼓励学生走进大自然,置身于大自然中去玩赏,在玩赏中观察,玩中感悟,赏中习作。要让学生真正做到四带:带好自己的眼仔细看;带好自己的耳认真听;带好自己的脑边想边体验;带好自己的笔做必要的记录。我在教学中坚持让学生写日记,要学生用自己的火眼金睛发现生活中的精彩镜头,用自己的聪明智慧感悟深刻的一刹那,尽量拓宽学生的活动场所。我往往利用课前五分钟及课外活动课的时间,让学生读自己的日记,师生共同评比,评出具有独特发现、独特体验的好日记。这样学生写日记的积极性大大

提高了,写日记不再流于形式,日记的内容也越来越丰富了。学生也日渐养成了细心观察的好习惯,促使学生真正成为生活的主人,做生活的有心人,为习作积累了丰富的素材。 二、教师让学生亲身经历,感受真实生活 亲身经历对学生来说是一种可贵的写作,有了切身体验才能动于中,发于言。倘若教师命题内容脱离学生的生活实际,学生没有真实的生活体验,又怎能激起学生表达的欲望呢?学生只能在万般无奈下去胡编乱造,写出的文章只能是语无伦次,前后矛盾,缺乏真情实感。因此教师应适当地创设情境,给予学生真实的感受,引导学生用眼、鼻、舌、手去摄取生活素材,让学生眼中有物,方能笔下有文。特别是听了齐白坚教授快乐大作文的观摩课,更是使我大开眼界,受益匪浅。齐白坚教授善于创设原始的情景,让学生运用眼、耳、手、鼻、舌进行深入细致的观察和学生独特的体验,适当指导学生写作的基本要点,放手让学生在兴趣盎然的高涨情绪中学会作文。回到学校,我马上利用两节课时间,组织学生进行《吹气球》比赛,布置了比赛的规则,在三分钟内谁吹得最大,谁就取胜,当然气球吹破的被淘汰。在比赛过程中我适当地引导学生做到眼、耳、脑、笔并用,比赛结束后,我便让学生动手写作,一节课时间学生就把自己的作文写好了,个个同学脸上洋溢着喜悦的笑容,往日写作时的愁眉苦脸已荡然无存。

单片机基础知识1章-单片机基础知识

微机原理与接口技术

第一章单片机基础知识 第一节单片机概况 关于课程名称: 《微机原理及应用》或《微机原理及接口技术》,《单片机基础》讲述有关计算机的概念。 计算机有: 微型计算机小型机大型机 按尺寸大小来分,现在界线已模糊。 或按功能强弱来分(尺寸小不等于是差的计算机) 在工业控制或其他应用领域:适用的就是最好的 当一个设备上应用了计算机就可以称做智能设备。 计算机---功能决定了智能化程序。 主要由产品的要求决定。 计算机包括软件和硬件, 硬件构成:五部分=CPU(运算器,控制器),存储器,输入,输出 计算机硬件 控制器C P U 存 储 器 输 入 输 出 运算器只要在硬件结构上包含上述5项,即可称为计算机。

计算机的功能魅力: 例1 例 2 开关 与门

计算机软件:应用型软件,系统软件(对于通用计算机,这一点区分较清楚) 从结构上讲: 应用软件单片机系统侧重 是一种有特定功能的计算机 操作系统 底层BIOS-basic I/O system 硬件 本课程将侧重于:对于一个测/控目标,如何建立一个基于单片机的计算机系统。因此须了解: 单片机硬件结构 单片机功能 单片机的特性 语言 开发方法 参考书和杂志: 1.张迎新等.《单片机初级教程--单片机基础》北京航空航天大学出版社 2.何立民著《单片机应用系统设计》北京航空航天大学出版社 3.李朝青著.《单片机原理及接口技术》(简明修定版).北京航空航天大学出版社,1999 4.单片机与嵌入式系统应用 5.石文华.单片机原理及应用(面向21世纪高等教育规划教材),中国电力出版社.2005.2

反汇编基础知识

计算机寄存器分类简介: 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。 对低16位数据的存取,不会影响高16位的数据。 这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、除、输入/输出等操作,使用频率很高; 寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器ECX称为计数寄存器(Count Register)。

在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数; 寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址, 在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果, 而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。 2、变址寄存器 32位CPU有2个32位通用寄存器ESI和EDI。 其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。 寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量, 用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。 变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。 3、指针寄存器 其低16位对应先前CPU中的BP和SP,对低16位数据的存取,不影响高16位的数据。 32位CPU有2个32位通用寄存器EBP和ESP。 它们主要用于访问堆栈内的存储单元,并且规定: EBP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;

6、汇编学习从入门到精通(荐书)

汇编学习从入门到精通Step By Step 2007年12月15日星期六00:34 信息来源:https://www.doczj.com/doc/74171616.html,/hkbyest/archive/2007/07/22/1702065.aspx Cracker,一个充满诱惑的词。别误会,我这里说的是软件破解,想做骇客的一边去,这年头没人说骇客,都是“黑客”了,嘎嘎~ 公元1999年的炎热夏季,我捧起我哥留在家的清华黄皮本《IBM-PC汇编语言程序设计》,苦读。一个星期后我那脆弱的小心灵如玻璃般碎裂了,为了弥补伤痛我哭爹求妈弄了8k大洋配了台当时算是主流的PC,要知道那是64M内存!8.4G硬盘啊!还有传说中的Celeon 300A CPU。不过很可惜的是在当时那32k小猫当道的时代,没有宽带网络,没有软件,没有资料,没有论坛,理所当然我对伟大的计算机科学体系的第一步探索就此夭折,此时陪伴我的是那些盗版光盘中的游戏,把CRACK_XXX文件从光盘复制到硬盘成了时常的工作,偶尔看到光盘中的nfo 文件,心里也闪过一丝对破解的憧憬。 上了大学后有网可用了,慢慢地接触到了一些黑客入侵的知识,想当黑客是每一个充满好奇的小青年的神圣愿望,整天看这看那,偷偷改了下别人的网页就欢喜得好像第一次偷到鸡的黄鼠狼。 大一开设的汇编教材就是那不知版了多少次的《IBM-PC汇编语言程序设计》,凭着之前的那星期苦读,考试混了个80分。可惜当时头脑发热,大学60分万岁思想无疑更为主流,现在想想真是可惜了宝贵的学习时间。 不知不觉快毕业了,这时手头上的《黑客防线》,《黑客X档案》积了一大摞,整天注来注去的也厌烦了,校园网上的肉鸡一打一打更不知道拿来干什么。这时兴趣自然转向了crack,看着杂志上天书般的汇编代码,望望手头还算崭新的汇编课本,叹了口气,重新学那已经忘光了的汇编语言吧。咬牙再咬牙,看完寻址方式那章后我还是认输,不认不行啊,头快裂了,第三次努力终告失败。虽然此时也可以爆破一些简单的软件,虽然也知道搞破解不需要很多的汇编知识,但我还是固执地希望能学好这门基础中的基础课程。 毕业了,进入社会了,找工作,上班,换工作成了主流旋律,每天精疲力尽的哪有时间呢?在最初的中国移动到考公务员再到深圳再到家里希望的金融机构,一系列的曲折失败等待耗光了我的热情,我失业了,赋闲在家无所事事,唯一陪伴我的是那些杂志,课本,以及过时的第二台电脑。我不想工作,我对找工作有一种恐惧,我靠酒精麻醉自己,颓废一段日子后也觉得生活太过无聊了,努力看书考了个CCNA想出去,结果还是被现实的就业环境所打败。三年时间,一无所获。 再之后来到女朋友处陪伴她度过刚毕业踏入社会工作的适应时期,这段时间随便找了个电脑技术工作,每月赚那么个几百块做生活费。不过这半年让我收获比较大的就是时间充裕,接触到了不少新东西,我下定决心要把汇编学好,这时我在网上看到了别人推荐的王爽《汇编语言》,没抱什么希望在当当网购了人生中的第一次物,19块6毛,我记得很清楚,呵呵。 废话终于完了,感谢各位能看到这里,下面进入正题吧。

相关主题
文本预览
相关文档 最新文档