突然发现ollyDBG 可以用来学习汇编
闲的蛋疼没事的时候搞搞
生活是灰色的,编程工作是蛋疼的!!
只能找点东西去填补心里的阴暗!!
这里仅仅作为参考,跟狗屎一样的东西!没人能看懂写的什么,所以千万不要看,自己去拿ollyDbg去测试这些汇编指令到底是个什么玩意!!
push 指令将 某个值或 某个地址的内容存储到堆栈中去
eip = 00401000 此处的指令 push 0x0
堆栈顶部指针的位置 esp = 0018f8c 内容74b633ca
也就是0018f8c 74
001878d b6
001838e 33
001838f ca
执行这条指令过后
eip = 00401002
esp = 0018ff88 此时指针位置减少了4 相当于4个字节 每一个地址指向的是八位 1个字节
0018ff88 的内容 00000000 0018ff88 - 0018ffc 存储的是00000000
0018ff88 00
0018ff89 00
0018ff8a 00
0018ff8b 00
push eax
esp = 0018ff8c
eax 74b633b8
执行push eax指令过后
esp = 0018ff88
0018ff88 处的内容 74b633b8
push [401008]这个内存单元指向了4个字节的内容 push [地址]将这个地址里的三十二个字节的内容保存到栈里
也可以在字节码区域 选择goto expressiion 输入内存地址 查看这个地址保存的内容 基本上都是三十二个字节的数据
401008 的内容004020ca odb显示的时候ca204000
esp = 0018ff88
执行完后
esp =0018ff84
内容为004020ac
push[地址]相当于
push dword ptr ds:[401008]默认为4个字节的的内容
现在push word ptr ds:[40101c]看看会发生什么事情
0040101c内容 c3 c7 05 64
执行之前
esp = 0018ff8c 内容74b633ca 0018ff8c ca 0018ff8d 33
esp = 0018ff8a 内容33cac7c3 0018ff8a c3 0018ff8b c7 0018ff8c ca 0018ff8d 33
妈蛋前面搞错了 地址是他妈这么搞的我操 esp地址 每个地址执行一个自己的内容 从后向前数的坑爹 前面我不想改了
加深印象吧!!!十六进制窗口里的地址从左向右数 堆栈地址里的内容是从右向左搞的,真鸡巴坑爹!!!
POP指令是出栈:它会取出堆栈顶部的第一个字母或者第一个值,然后存放到指定的目标地址内存单元中。
例如,POP EAX从栈顶中取出第一个值存放到EAX中,随后的一个值随即变成栈顶
现在搞个例子来验证下
eax = 74b633b8
esp = 0018ff8c 内容74b633ca
执行完pop eax
eax = 74b633ca
esp = 0018ff90
PUSHAD指令把所有通用寄存器的内容按一定顺序压入到堆栈中,PUSHAD也就相当于’PUSH EAX,PUSH ECX,PUSH EDX,PUSH EBX,PUSH ESP,PUSH EBP,PUSH ESI,
PUSH EDI’。
这个指令牛逼,
eax= 74b6ccb8
ecx = 00000000
edx = 00401000
ebx = 7efde000
esp = 0018ff8c
ebp = 0018ff94
esi = 00000000
edi = 00000000
先来推测一下结果
这个八个寄存器 就相当于 32个字节
执行完指令过后
esp = 0018ff8c -32 = 0018ff6c
不知道对不对哦
改一下当前eip 的指令内容 pushad
执行看看!
呵呵没什么问题
esp = 0018ff6c 内容00000000
0018ff70 00000000
0018ff74 0018ff94
..
0018ff88 74b6ccb8
谁他妈能记住入栈的顺序呢?不按套路出牌啊??
应该a b c d 排的
怎么入栈顺序是eax ecx edx ebx esp ebp esi edi
搞不懂??这个世界搞不懂的何止这些呢??
满满的负能量!!听说负能量可以宣泄心里的那不值一提的悲哀!!!
有了pushad 就该有popad
这个世界就是这样必须有个对应的,男的就该和女的相配对!!
当然现在有好多男男!!这个世界越来越没办法懂了!!
POPAD
该指令与PUSHAD正好相反,它从堆栈中取值,并将它们放到相应的寄存器中。POPAD等价于“POP EDI,POP ESI,POP EBP,POP ESP,POP EBX,POP EDX,POP
ECX,POP EAX”。
试试吧,还能怎样
esp = 0018ff8c
执行pop指令 esp 的地址是递增的
八个通用寄存器 三十二个字节
也就是 0018ff8c - 0018ffac的内容
0018ff8c 74b633ca
0018ff90 7efde000
0018ff94 0018ffd4
0018ff98 76f99ed2
0018ff9c 7efde000
0018ffa0 7763bfd5
0018ffa4 00000000
0018ffa8 00000000
好累
esp地址 esp内容
执行该死的popadd
试试
edi 74b633ca
esi 7efde000
…
eax 0000000
ecx 0000000
真是这样 没意思!!!