crazysky 发表于 2005-3-9 17:56:42

汇编语言问题!

请问基址指针BP一般用来干什么的?我看书里面说它是表示堆栈段中的基地址,但SS不是已经表示堆栈段的基地址了吗?这就是多余了吗?请大哥们帮帮我解释一下!

wzwgp 发表于 2006-1-15 00:49:14

我是小弟,在学汇编还没入门,不知下面的假释对你有用吗?


EBP是"基址指针"(BASE POINTER), 它最经常被用作高级语言函数调用的"框架指针"(frame pointer). 在破解的时候,经常可以看见一个标准的函数起始代码:
   
   push ebp;保存当前ebp
   movebp,esp;EBP设为当前堆栈指针
   sub esp, xxx;预留xxx字节给函数临时变量.
   ...
   
   这样一来,EBP 构成了该函数的一个框架, 在EBP上方分别是原来的EBP, 返回地址和参数. EBP下方则是临时变量. 函数返回时作 mov esp,ebp/pop ebp/ret 即可.

SS(STACK SEGMENT)指定当前堆栈段. ESP 则指出该段中当前的堆栈顶. 所有push/pop 系列指令都只对SS:ESP指出的地址进行操作.

黑夜孤星 发表于 2006-1-15 09:51:04

原帖由 wzwgp 于 2006-1-15 00:49 发表
我是小弟,在学汇编还没入门,不知下面的假释对你有用吗?


EBP是"基址指针"(BASE POINTER), 它最经常被用作高级语言函数调用的"框架指针"(frame pointer). 在破解的时候,经常可以看见一 ...
:D 解释得不错。

bbsky 发表于 2006-1-15 21:41:36

我是没基础的人 根本就没办法理解!~

僧思 发表于 2006-6-12 21:05:52

我学过单片机,但还是看不太懂!!
页: [1]
查看完整版本: 汇编语言问题!