首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >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

复制
相关文章
MongoDB:如何将 BSON 文档转换为可读的格式
二进制 Javascript 对象表示法 (BSON) 是 JSON 文档的二进制编码序列化。JSON 更易于理解,因为它是人类可读的,但与 BSON 相比,它支持的数据类型更少。BSON 已扩展为添加一些可选的非 JSON 原生数据类型,例如日期和二进制数据。
用户4235284
2023/10/14
1.3K0
Python如何将GrADs常用文件转换为NetCDF格式?
测试数据分享 链接:https://pan.baidu.com/s/1mj1-YpvQN414crNz32f8GA 提取码:wmfr
气象学家
2022/01/18
1.9K0
Python如何将GrADs常用文件转换为NetCDF格式?
Python如何将GrADs常用文件转换为NetCDF格式?
首先需要确保xgrads库的安装: pip install xgrads Install from github 或者 git clone https://github.com/miniufo/xgrads.git cd xgrads python setup.py install 链接https://github.com/miniufo/xgrads , 有提供示例ctl和dat文件,下面我们是使用的ctl和grd文件转换的,方法类似: #import sys #sys.path.append('/home/gavin/miniconda3/envs/atmpy/lib/python3.8/site-packages') #sys.path from xgrads import CtlDescriptor, open_CtlDataset ds = open_CtlDataset('lst.ctl') ctl = CtlDescriptor(file='lst.ctl') ds.attrs['pdef' ] = 'None' ds.to_netcdf('lst.nc') data = ds.ro1 data.where(data!=ctl.undef).plot(figsize=(9,5), cmap='jet') 以上需要注意两点: 1.如果在jupyter-lab中无法加载xgrads需要手动添加其路径,使用到的是:import sys 2. xgrads存在bug,如果不添加语句ds.attrs['pdef' ] = 'None'会一直报错,无法生成nc文件!
郭好奇同学
2021/08/26
2.9K0
Python如何将GrADs常用文件转换为NetCDF格式?
如何将ipynb转换为html,md,pdf等格式
本文介绍了如何将 Jupyter Notebook(.ipynb 文件)转换为 HTML、Markdown、PDF 和 LaTeX 格式。首先介绍了 Jupyter Notebook 的入门知识,然后介绍了将 Jupyter Notebook 转换为其他格式的方法,包括使用 `jupyter nbconvert` 命令和设置 Jupyter Notebook 模板。此外,还提供了将 Jupyter Notebook 转换为 PDF 和 LaTeX 格式的方法,以及使用 ipython 命令行工具直接将 Jupyter Notebook 转换为 PDF 格式的方法。
红色石头
2017/12/28
8.4K0
如何将ipynb转换为html,md,pdf等格式
php格式怎么转换为pdf,PHP如何将将word文件转为pdf
PHP将word文件转为pdf的方法:首先修改【php.ini】,并重启环境;然后安装微软office套件;最后配置office组件服务即可。
全栈程序员站长
2022/08/26
5.5K0
php格式怎么转换为pdf,PHP如何将将word文件转为pdf
如何将ownCloud转换为Nextcloud
ownCloud的核心开发团队中一部分人员启动了一个名为Nextcloud的项目。虽然ownCloud将继续开发,但您可能想了解新项目的功能。Nextcloud和ownCloud共享一个公共代码库,这意味着将现有的ownCloud安装迁移到Nextcloud中。
小铁匠米兰的v
2018/08/02
2.7K0
如何将Array转换为List?
可以使用 Arrays.asList() 方法, 该方法接受一个数组作为输入,并返回一个列表作为输出。
程序你好
2018/07/23
1.5K0
java如何将String转换为enum
已知枚举对应的String值,希望得到对应的枚举值。例如,已知"A",希望得到对应的枚举——Blah.A,应该怎么做? Enum.valueOf()是否能实现以上目的,如果是,那我如何使用?
硬核编程
2020/07/23
4K0
Core ML Tools初学者指南:如何将Caffe模型转换为Core ML格式
欢迎来到Core ML教程系列的第二部分。在本教程中,将学习如何设置Python虚拟环境,获取不在Core ML格式裡的数据模型,并将该模型转换为Core ML格式,最后将其集成到应用程式中。强烈建议
iOSDevLog
2018/06/21
1.7K0
如何将视频轻松转换为 GIF
有时看到一条有意思的视频想发到朋友圈,但朋友圈有限制时长,而且也不方便,这时可以把视频转GIF(再做成表情包也可以),再发到朋友圈或者微博(不用像视频一样需要等待审核)。
苏生不惑
2020/02/26
1.9K0
如何将pdf转换为word 2.0
再次以《新冠肺炎诊疗方案(试行第七版)》为例,该文件为图片性pdf,文字不可复制。
生信菜鸟团
2020/06/04
2.7K0
Java 如何将 List 转换为 MAP
上面的代码将会把 Id 作为 Key,然后生成的 Map 是以 id 为 Key,Animal 为Value 的 Map。
HoneyMoose
2022/10/12
2.1K0
Java 如何将 List 转换为 MAP
如何将pdf转换为word 3.0
相对于封装的软件,python和R的操作需要稍微折腾一下。浏览论坛的时候的发现了一款轻量级程序,尝试了一下还不错,看一下转换的效果:
生信菜鸟团
2020/08/04
1.8K0
如何将pdf转换为word 3.0
java如何将String转换为Int
Short.valueOf/parseShort, Long.valueOf/parseLong等也是有类似差别。
硬核编程
2020/07/23
1.7K0
如何将 JSON 转换为有序判断?
JSON(JavaScript Object Notation)是系统之间数据交换的流行格式。它是一种轻量级、基于文本且易于解析的格式,已成为互联网上数据交换的标准。但是,JSON 不会为数据结构中的元素提供任何顺序。虽然这在大多数情况下可能不是问题,但在某些情况下,元素的顺序很重要。
很酷的站长
2023/08/11
5790
如何将 JSON 转换为有序判断?
基于双目视觉的树木高度测量方法研究
随着人工智能时代的到来,计算机视觉领域被广泛应用到各个行业中。同样的,人工智能改变着传统林业的研究方法,林业信息工程技术日渐成熟。针对传统树高测量方法中存在的结果准确性不高、操作困难、专业知识转化为规则困难等问题,采用了一种基于双目立体视觉理论计算树高的方法,实现了树木高度的无接触测量。以双目相机作为采集设备,基于MATLAB、VS2015开发平台,采用张正友单平面棋盘格相机标定方法进行单目标定和双目标定,从而获取双目相机2个镜头的参数。通过SGBM算法和BM算法立体匹配后获得视差深度图像,进而获取树木关键点的三维坐标信息并以此来计算树木高度。将深度学习与双目视觉相结合可以实现树木同时在二维和三维空间的信息提取。在VS2015上的试验结果表明,该方法操作相对简单,并且能够较为准确地测量树木高度,SGBM算法树高测量结果的相对误差范围为0.76%~3.93%,BM算法相对误差范围为0.29%~3.41%。结果表明:采用双目视觉技术测量树木高度可以满足林业工程中对于树高测量的精度需要。
Color Space
2022/05/26
1.7K0
基于双目视觉的树木高度测量方法研究
[1154]如何将字符串转换为datetime
1.把datetime转成字符串: 2017-11-23 17:05:18 2.把字符串转成datetime: 2017-11-23 16:10:10 3.把字符串转成时间戳形式: 1511424610.0 4.把时间戳转成字符串形式: 2017-11-23 17:05:18 5.把datetime类型转外时间戳形式: 1511427918.0
周小董
2022/07/27
3.6K0
mysql整型转字符串_java中如何将字符串转换为字符数组
select * from A order by cast(name as unsigned);
全栈程序员站长
2022/09/27
24.5K0
将VOC格式的数据集转换为COCO格式
import xml.etree.ElementTree as ETimport osimport json coco = dict()coco['images'] = []coco['type'] = 'instances'coco['annotations'] = []coco['categories'] = [] category_set = dict()image_set = set() category_item_id = -1image_id = 20180000000annotation_id
狼啸风云
2021/06/09
3.3K0
mat格式数据集转换为arff与txt格式
下面的代码给出了将mat格式数据集转换为arff与txt格式的matlab代码。 注意,每个.mat文件中只有一个数据集,其中共有m+1列,最后一列是label。 转为arff: mat2arff.m代码 MATLAB % % This function is used to convert the input data to '.arff' % file format,which is compatible to weka file format ... % % Parameters: % input_
里克贝斯
2021/05/21
9910

相似问题

数字格式:如何将1转换为"01",2转换为"02“等?

50

如何将MySQL转储转换为Server格式

13

测量高度

34

格式:如何将1转换为“01”,如何将2转换为“02”,如何将3转换为"03",依此类推

33

将统一转换为卷曲

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档