我的一片天

我的一片天
posts - 27, comments - 12, trackbacks - 0, articles - 16
   :: 首页 :: 新随笔 :: 联系 ::  :: 管理

WIN32汇编

汇编的知识
     摘要: 反汇编下找C++的类及成员函数  阅读全文

posted @ 2007-12-08 22:11 xyz 阅读(992) | 评论 (0)  编辑 |

     摘要: Lea是返回偏移地址,对于 Lea EAX,s1 这样很好解释,就是返回变量s1的偏移地址

Lea EAX,[EBX+10]就比较复杂了

[EBX+10]表示EBX+10后作为地址,此地址指向位置的值,取的是EBX+10地址内的内容。

那Lea究竟是把这个内容作为地址存入EAX,还是把这个内容的地址赋给EAX呢?如果是后者,那不是跟MOV EAX,EBX+10的效果一样了?



实际的效果应该是后者,Mov EAX,EBX+10是非法的语句,汇编不允许操作数有2个寄存器和立即数存在。



Lea EAX,[EBX+10]的作用就是把EBX+10作为地址存入EAX。
  阅读全文

posted @ 2007-12-08 21:37 xyz 阅读(920) | 评论 (0)  编辑 |

     摘要: 堆栈指针ESP的变化方法:先ESP=ESP-4,然后把要PUSH的值放入[ESP]里,就是说ESP是先变化到新的地址位置,然后在存入值,接着就停留在那里等待新的PUSH。



WIN32程序在调用函数时的压栈顺序如下:

ESP-4 |___EBP ___| 进入函数的ESP值,一般会执行PUSH EBP MOV EBP,ESP,则EBP就是入函数的堆栈指针,以便通过EBP引用函数内的变量

ESP |___EIP____| 调用函数后,自动压入下一条指令的EIP



以STDCALL方式的函数,参数由右到左分别压入,在处理完后必须恢复ESP的值到指向EIP的栈地址。一般函数可通过retun 4 这样的方式把ESP+4。
  阅读全文

posted @ 2007-12-08 21:23 xyz 阅读(340) | 评论 (0)  编辑 |