能力值:
( LV4,RANK:50 )
|
-
-
2 楼
先占个楼用来汇总日记
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
再站个楼用来补充前两天的日记,我不是从今天开始学习的。
08年03月06号 也没早开始几天。。。。
软件开发语言和我们说的中文一样,而且比中文的逻辑低得多得多,中文你都会,学习语言一定没问题,我经常这么鼓励自己。
学习以OllyDbg 1.10为基础。我用的是英文版。
用OllyDbg打开了一个crackme,左上边的区域里面全都是密密麻麻的代码(汇编代码)。。。。。。看来人家说的是对的,要先学习点汇编了。不过汇编学起来比较枯燥,看看就没兴趣了,还是从这个crackme开始学习汇编吧。
每天都有个主题,这天我复习了一下寄存器。
主要的寄存器有
4个数据寄存器(EAX,EBX,ECX,EDX)都是32位的。
EAX的下16位是AX,AX的上8位是AH,下8位是AL。EBX,ECX,EDX依此类推。
EAX 一般用来做返回值,然后配合CMP,JNZ啥的,玩死人。。。
ECX 经常用于记数。
2个变址和指针寄存器(EDI,ESI)
EDI的下16位是DI,ESI的下16位是SI,DI,SI不可再分割成8位。
EDI 和ESI可以用来进行字符串操作
比如: 将字符串放到 [esi]
然后 inc esi
然后 byte ptr [esi] 就可以。。。。
都是32位的了,用EAX是不是也一样?
2个指针寄存器(EBP,ESP)
EBP的下16位是BP,ESP的下16位是SP,BP,SP不可再分割成8位。
在win32的环境下EBP寄存器用与存放在进入call以后的ESP的值,便于退出的时候回复ESP的值,达到堆栈平衡的目的。
这也就是为什么call函数中经常有如下结果的原因。
push ebp
mov ebp, esp
leave 等同于 pop ebp
retn
对于上面的这种情况,如果有[ebp+n]的处理,那就是在调用堆栈中的数据了。
push ebp ;保存当前ebp
mov ebp,esp ;EBP设为当前堆栈指针
sub esp, xxx ;预留xxx字节给函数临时变量. 1个指令指针寄存器(EIP) EIP主要用来存放下一步要执行命令的地址。
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
08年03月10号 进展缓慢呀。。。。。
几个简单的汇编命令
MOV上面的图为记了,可以大概明白。
MOV DWORD PTR DS:[402004],12345678 该地址的数据:78 56 34 12
ADD,SUB 加减算
INC,DEC 自加自减 相当于 i++, i--
00401000 MOV EAX,3 把3放到EAX
00401005 MOV EBX,5 把5放到EBX
0040100A ADD EAX,EBX EAX+EBX 结果放到EAX
0040100C SUB EAX,2 EAX-2 结果放到EAX
0040100F SUB EBX,EAX EBX-EAX 结果放到EBX
00401011 INC EAX EAX-1 结果放到EAX
00401012 DEC EBX EBX-1 结果放到EBX
MUL, IMUL
MUL src
src的位数不同,结果存放位置不同
src 位数 8 16 32
AL*src AX*src EAX*src
结果存放 AX DX,AX EDX,EAX
IMUL src 和MUL src一样
IMUL desc, src desc*src 结果放在desc,desc必须是寄存器,src可以是寄存器,内存参照和数值
IMUL desc, src1, src2 src1*src2结果放在desc, desc必须是寄存器,src1可以是寄存器,内存参照, src2是数值
DIV src
srvc位数 实行的计算 商 余数
BYTE AH:AL/src AL AH
WORD DX:AX/src AX DX
DWORD EDX:EAX/src EAX EDX
|
能力值:
(RANK:210 )
|
-
-
5 楼
祝楼主学习愉快,感觉能坚持的人最难能可贵
|
能力值:
(RANK:210 )
|
-
-
6 楼
别抱着这个心理发帖子,火不火都无所谓啊,只要能坚持别人就会很敬佩的,楼主多发收获让我们学习 嘿嘿
|
能力值:
( LV12,RANK:230 )
|
-
-
7 楼
前面你不是说"我在93年学习了汇编",怎么这里又来了一段看上去自相矛盾的话啊,不明白。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
大家一起加油吧,俺也没入门,白天看教程,晚上看汇编。
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
08年03月12号
关于跳转命令
JMP dest 就是直接跳转到dest, 把desc记入EIP。
CMP desc, src 比较desc和src,实际上是根据desc-src的结果设置各个标识位;
JE 比较结果相同就跳转;
JNE 比较结果不同就跳转;
JZ ZF为0跳转;
JNZ ZF不为0跳转;
JB desc < src 跳转;
JNB desc >= src 跳转;
JA desc > src 跳转;
JNA desc <= src 跳转;
汇编语言中两个数比较实现转移时要看这两个是无符号数还是带符号数:
无符号数的高于转移用JA(JMP ABOVE),低于转移用JB(JMP BELOW);
带符号数的大于转移用JG(JMP GREATER),小于转移用JL(JMP LESS)。
TEST 配合 JNZ等 执行两个操作数的逻辑与运算,并更新标志位。该操作只修改标志位,不保留运算结果值。
TEST EAX, EAX 如果TEST的目的和源两个操作数为同一个的时候,就是判断这个操作数是否为零。
JNZ XXXXXXXX
OR Al, AL 判断AL是否为零,只有为零自身或的结果才能为零
JNZ XXXXXXXX
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
同学习,共勉!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
的楼,一起学习.
EDI和ESI是干什么的?经常看见他们,但是对他们还是陌生的很啊
|
能力值:
( LV17,RANK:1820 )
|
-
-
12 楼
写日记啊,有点偷窥他人隐私的感觉,呵呵…
|
能力值:
( LV6,RANK:90 )
|
-
-
13 楼
贵在坚持 坚持看你的日记 呵呵
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
也站一层楼吧,楼主的学习精神可嘉,值得学习,讲到汇编,学习起来是满枯燥的,我每次看 汇编时间最长不会超过15分钟就没兴趣了,怪不的我学习成绩一直不好,呵呵
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
这两个都是计算机里的32位通用寄存器
它的低16位对应以前CPU中的SI和DI
SI 存储器指针、串指令中的源操作数指针
DI 存储器指针、串指令中的目的操作数指针
|
能力值:
( LV4,RANK:50 )
|
-
-
16 楼
08年03月14日
几个函数,先记这
GetModuleHandleA--处理 Ansi 字符串
GetModuleHandleW--处理 Unicode 字符串
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
你的日志我都COPY下来了 有空研究研究 嘿嘿。。。
我新手!
|
能力值:
(RANK:10 )
|
-
-
18 楼
向楼主学习,坚持住
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
太谢谢你了。新手就的有你这样领路的人在啊,!!!!
|
能力值:
( LV4,RANK:50 )
|
-
-
20 楼
08年03月15日
PE是Portable Executable File Format(可移植的执行体)简写,它是目前Windows平台上的主流可执行文件格式。
SEH : SEH("Structured Exception Handling"),即结构化异常处理.是操作系统提供给程序设计者的强有力的处理程序错误或异常的武器.
http://www.pediy.com/bbshtml/bbs4/kanxue310.htm
http://www.pediy.com/bbshtml/BBS4/kanxue370.htm
OEP : 程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳。
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
汇编我也学的七七八八了`~~现在的困难是怎样找入口和出口~~~怎样去断点等等.......楼主有这方面的心得吗??可以分享一下吗??自己摸索了很就,手动脱壳还没有成功过~~~
|
能力值:
( LV4,RANK:50 )
|
-
-
22 楼
都说了我是新兵,而且我的方向和你不一样,我不是学习脱壳。我主要向学习逆向。你手动脱壳还没成功过,我还没开始过,就做了几个crackme。只能同情你。
|
|
|