今天做公交车去女朋友那,一个来回光车上就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中获取
就先写到这,改天再写点。