天书夜读学习笔记一

来源:互联网 发布:java 跨域请求处理 编辑:程序博客网 时间:2024/04/28 17:46

今天做公交车去女朋友那,一个来回光车上就5个小时。拿了袁哥的天书夜读路上看。

 

其实之前看过一遍,不细。

 

我之前总喜欢看电子书,即免费又方便。 直到我前几天看买来的《windows驱动开发详解》。我边看边做笔记,发现效率提高了一些,而且很东西一写出来,总结一下之后就会非常清晰。而这本书其实我也读了一边了。

 

在路上,边看边挑出重点做一些总结性的笔,然后放到这里。或许对知识的有效积累是一个不错的尝试。

 

这本书的知识主要涉及到了反汇编,内核编程 ,内核的研究和修改,病毒反病毒及软件的保护。知识有点杂,但不管以前知不知道,我都会记录。有的我认为对我有帮助或者只是为了加深印象。

 

第一章 汇编指令与C语言

 

 

push esp-4

 

pop esp+4

 

sub a,b a=a-b

 

add a,d a=a+b

 

ret 调回调用的地方,call 的下一条,call在跳转的时候把下一条地址push到堆栈 

 

call 调用函数

 

ret 弹出返回地址

 

   ;call的本质相当于push + jmp  .  ret的本质相当于 pop + jmp

 

mov

 

xor 异或,xor eax,eax  == mov eax,0   但是xor的效率要高于mov

 

lea:取得地址(第二个参数)后放入前面的参数

      lea edi , [ebp-0cch]

 

stos 将eax中的数据放入edi所指的地址中,同时edi会增加4,rep使指令重复执行ecx中填写的次数

       mov ecx , 30h

       mov eax , 0cccccccch

       rep stos dword ptr es:[edi]

-------------------------------------------

jmp

jg

jl

jge...

-------

cmp

 

-------------------------------------------

_cdecl C调用规则的函数结构反汇编

 

esp 堆栈栈顶

返回值保存在eax

ebp总是用来保存函数执行之前的esp值,执行完毕之后,我们用ebp恢复esp

push ebp

mov ebp , esp

;把esp往下移动一个范围,等于在堆栈中放出一篇新的控件来存局部变量

sub esp , 0cch

push ebx

push esi

push edi

lea edi , [edi-0cch]

mov ecx , 33h

mov eax , 0cccccccch

rep stos dword ptr[edi];串写入

;然后做函数里应该做的事,ebp+12是第二个参数,ebp+8是第一个参数,ebp+4是函数返回地址

 

;恢复ebx,esi,edi,esp,ebp,最后返回

pop edi

pop esi

pop ebx

mov esp , ebp

pop ebp

ret

;此函数无返回值,如有返回值,放入eax中,调用者再到eax中获取

 

就先写到这,改天再写点。