Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ESP和EBP之间是什么?

ESP和EBP之间是什么?
EN

Stack Overflow用户
提问于 2013-02-22 09:19:05
回答 2查看 92.8K关注 0票数 38

是的,我相信这个问题已经被含蓄地回答了很多次,但我似乎不能完全理解它。

如果您有一个(x86)堆栈跟踪(例如,在WinDbg中查看它),并且您查看了寄存器,那么eBP值和ESP值相隔x个字节意味着什么?

链接:

举一个我最近的堆栈跟踪的例子:

代码语言:javascript
运行
AI代码解释
复制
0:016> k
ChildEBP RetAddr  
1ac5ee8c 76b831bb ntdll!NtDelayExecution+0x15
1ac5eef4 76b83a8b KERNELBASE!SleepEx+0x65
1ac5ef04 0060e848 KERNELBASE!Sleep+0xf
1ac5ef10 76859d77 MyApp!application_crash::CommonUnhandledExceptionFilter+0x48 [...\applicationcrash.inc.cpp @ 47]
1ac5ef98 775a0df7 kernel32!UnhandledExceptionFilter+0x127
1ac5efa0 775a0cd4 ntdll!__RtlUserThreadStart+0x62
1ac5efb4 775a0b71 ntdll!_EH4_CallFilterFunc+0x12
1ac5efdc 77576ac9 ntdll!_except_handler4+0x8e
1ac5f000 77576a9b ntdll!ExecuteHandler2+0x26
1ac5f0b0 7754010f ntdll!ExecuteHandler+0x24
1ac5f0b0 6e8858bb ntdll!KiUserExceptionDispatcher+0xf
1ac5f400 74e68ed7 mfc80u!ATL::CSimpleStringT<wchar_t,1>::GetString [f:\dd\vctools\vc7libs\ship\atlmfc\include\atlsimpstr.h @ 548]
1ac5fec0 6e8c818e msvcr80!_NLG_Return [F:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\eh\i386\lowhelpr.asm @ 73]
1ac5ff48 74e429bb mfc80u!_AfxThreadEntry+0xf2 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp @ 109]
1ac5ff80 74e42a47 msvcr80!_callthreadstartex+0x1b [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c @ 348]
1ac5ff88 76833677 msvcr80!_threadstartex+0x66 [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c @ 326]
1ac5ff94 77569f02 kernel32!BaseThreadInitThunk+0xe
1ac5ffd4 77569ed5 ntdll!__RtlUserThreadStart+0x70
1ac5ffec 00000000 ntdll!_RtlUserThreadStart+0x1b

0:016> r
eax=00000000 ebx=1ac5efc8 ecx=19850614 edx=00000000 esi=1ac5eed0 edi=00000000
eip=7754fd21 esp=1ac5ee8c ebp=1ac5eef4 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010206

ESP 1ac5ee8c - EBP 1ac5eef4的值=104byte差。那里面是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-22 09:29:59

ESP是当前的堆栈指针。EBP是当前堆栈帧的基指针。

调用函数时,通常会在堆栈上为局部变量保留空间。此空间通常通过EBP引用(在函数调用期间,所有局部变量和函数参数都是此寄存器的已知常量偏移量)。另一方面,ESP将在函数调用期间发生变化,因为其他函数被调用,或者临时堆栈空间用于部分操作结果。

请注意,如今大多数编译器都可以选择通过ESP引用所有局部变量。这释放了EBP,以便用作通用寄存器。

一般来说,当你查看函数顶部的反汇编代码时,你会看到如下所示:

代码语言:javascript
运行
AI代码解释
复制
push EBP
mov  EBP, ESP
sub  ESP, <some_number>

因此,EBP将指向此帧的堆栈顶部,而ESP将指向堆栈上的下一个可用字节。(堆栈通常-但不一定-在内存中增长。)

票数 104
EN

Stack Overflow用户

发布于 2013-02-22 09:23:13

通常,此空间是为最终存储在堆栈上的局部变量保留的。在函数开始时,ESP递减适当的值。

在您的例子中,函数中有104个字节的局部变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15020621

复制
相关文章
phpStudy 创建多个站点,绑定域名
站长前面推荐过《phpStudy:非常棒的PHP环境搭建包(支持Apache、IIS、Nginx和LightTPD) 》,今天来简单介绍一下使用 phpStudy 创建多个站点,绑定域名的方法。
星哥玩云
2022/08/13
5K0
phpStudy 创建多个站点,绑定域名
【云上实践】腾讯云服务器如何创建镜像?
待镜像完成创建后,在镜像列表中选择您创建的镜像,单击其所在行右侧的创建实例,即可购买与之前相同镜像的服务器。如下图所示:
Kami米雅
2021/11/08
24.6K0
【云上实践】腾讯云服务器如何创建镜像?
如何使用 Apache Web 服务器配置多个站点
正如我之前的文章中提到的,Apache 的所有配置文件都位于 /etc/httpd/conf 和 /etc/httpd/conf.d。默认情况下,站点的数据位于 /var/www 中。对于多个站点,你需要提供多个位置,每个位置对应托管的站点。
用户8989785
2021/09/09
2.5K0
如何使用 Apache Web 服务器配置多个站点
在我的上一篇文章中,我解释了如何为单个站点配置 Apache Web 服务器,事实证明这很容易。在这篇文章中,我将向你展示如何使用单个 Apache 实例来服务多个站点。
星哥玩云
2022/07/20
2.5K0
腾讯云服务器部署CentOS系统站点
我们使用 oneinstack 一键安装包进行安装,oneinstack的官网地址是:https://oneinstack.com/ 您可以在上面获取更多安装信息。
用户2416682
2019/07/23
17.7K0
腾讯云服务器部署CentOS系统站点
Apache服务器配置多个站点
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/106426.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/04
2.6K0
腾讯云服务器如何创建网站快照?
快照是云服务商提供的一种数据备份方式,用于日常的云硬盘数据备份和恢复。可以简单理解为在线数据的实时副本,在该盘在出现问题时,可以快速恢复到未出问题前的状态。
主机优惠教程
2022/05/21
8.9K0
在一台Apache服务器上创建多个站点(不同域名)
使用不同的域名来区分不同的网站,所有的域名解析都指向同一个 IP 地址。Apache通过在HTTP头中附带的 host参数来判断用户需要访问哪一个网站。
星哥玩云
2022/07/14
3.4K0
一个服务器多个站点如何都启用redis?
2.此插件在服务器上得文件目录为/wp-content/plugins/redis-cache/
季春二九
2023/07/14
4930
腾讯云服务器搭建 WordPress站点『图文教程』
WordPress 是一款常用的搭建个人博客网站软件,该软件使用 PHP 语言开发。您可通过在腾讯云服务器的简单操作部署 WordPress,发布个人博客。
用户2416682
2019/07/23
8.4K1
Apache Web 服务器配置多个站点
正如我之前的文章中提到的,Apache 的所有配置文件都位于 /etc/httpd/conf 和 /etc/httpd/conf.d。默认情况下,站点的数据位于 /var/www 中。对于多个站点,你需要提供多个位置,每个位置对应托管的站点。
用户8989785
2021/09/10
3.4K0
Nginx服务器设置多个站点教程
  把2个站点 example1.com, example2.com 放到 nginx 可以访问的目录 /www/给每个站点分别创建一个 nginx 配置文件 example1.com.conf,example2.com.conf, 并把配置文件放到 /etc/nginx/vhosts/然后在 /etc/nginx.conf 里面加一句 include 把步骤2创建的配置文件全部包含进来(用 * 号)重启 nginx。下面是具体的配置过程:
会长君
2023/04/25
2.2K0
『图文教程』腾讯云服务器搭建 WordPress站点
WordPress 是一款常用的搭建个人博客网站软件,该软件使用 PHP 语言开发。您可通过在腾讯云服务器的简单操作部署 WordPress,发布个人博客。
用户6628475
2019/11/04
3.6K0
『图文教程』腾讯云服务器搭建 WordPress站点
腾讯云服务器搭建 WordPress站点『图文教程』
WordPress 是一款常用的搭建个人博客网站软件,该软件使用 PHP 语言开发。您可通过在腾讯云服务器的简单操作部署 WordPress,发布个人博客。
用户6559734
2019/10/26
4.5K0
腾讯云服务器搭建 WordPress站点『图文教程』
如何将 Discuz! Q 站点接入腾讯云 CDN ,加速站点访问
已成功 安装部署 Discuz! Q 站点 (opens new window)。
佛系豪豪吖
2023/02/23
6.4K0
如何将 Discuz! Q 站点接入腾讯云 CDN ,加速站点访问
如何使用腾讯云轻量服务器手动创建快照
关于如何使用腾讯云轻量服务器手动创建快照,当你对虚拟机进行过一通操作之后,可以让你的虚拟机回滚到创建快照时的状态。也就是是无论你对你的电脑系统进行过任何操作,都可以通过快照让你的系统恢复到之前的状态。
主机优惠教程
2022/05/21
6.1K0
腾讯云服务器创建swap空间
腾讯云服务器安装系统的时候,并没有挂载swap分区。但是我想对数据盘进行分区的时候,发现默认把整个磁盘都用上了,并没用预留空间。swap分区是行不通了,只能试试swap文件。
用户6248011
2019/10/26
11.4K0
腾讯云服务器配置环境部署站点【小白教程】
我这里选择的是 WindowsServer2012 + Tomcat + MySQL操作系统、这个系统可以直接部署我们需要的网页服务,不需要另外安装与配置环境变量了 更适合小白,如果不是可以重装系统,在服务市场选择这款系统,目前免费的
用户2416682
2019/12/12
5.8K0
腾讯云服务器配置环境部署站点【小白教程】
腾讯云服务器创建快照备份教程
腾讯云服务器快照怎么使用?如何创建?快照是指某一时刻云硬盘数据的备份,快照是在云硬盘控制台创建的,腾讯云百科来详细说下手动创建快照的方法:
新手站长
2023/02/25
13.5K0
腾讯云服务器创建快照备份教程
[技巧]腾讯云服务器绑定多个IP(无需任何费用)
这里为什么要分配内网IP呢,因为你在服务器里虽然可以手动配置成任何IP,但是绑定公网IP还是要在控制台操作的,所以需要事先分配好内网IP
繁花云
2018/07/31
27.8K0
[技巧]腾讯云服务器绑定多个IP(无需任何费用)

相似问题

腾讯云服务器?

5554

我在多个腾讯云账号,多个域 名,多个云,如何备案?

3606

如何购买腾讯云服务器?

1426

腾讯云服务器redis?

1134

腾讯云 云服务器转移账号?

24.3K
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文