gpt4 book ai didi

assembly - 为什么 "push ebp"会改变 ebp 的值?

转载 作者:行者123 更新时间:2023-12-03 22:54:33 40 4
gpt4 key购买 nike

我有一个简单的代码:

void func()
{
func2();
}

我省略了 func2 和 main 的实现,因为它们无关紧要。然后我用windbg跟踪汇编,下面是执行“func2()”时汇编代码的输出:
eax=cccccccc ebx=7ffd6000 ecx=00000000 edx=00000001 esi=01faf760 edi=0012ff68
eip=004113f0 esp=0012fe98 ebp=0012ff68 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
SimpleStack!func:
004113f0 55 push ebp
0:000> t
eax=cccccccc ebx=7ffd6000 ecx=00000000 edx=00000001 esi=01faf760 edi=0012fe94
eip=0041140e esp=0012fdc8 ebp=0012fe94 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206
SimpleStack!func+0x1e:
0041140e e83dfcffff call SimpleStack!ILT+75(_func2) (00411050)

我们可以看到,在执行“push ebp”之前,esp = 0012fe98,ebp=0012ff68,但是执行“push ebp”之后,esp=0012fdc8,ebp=0012fe94?,所以我有两个问题:
1. 想必push代码应该只会影响esp,为什么ebp也变了?
2. 推测push ebp会push 4个字节入栈,所以esp的值应该减4,但是我们这里看到esp的值减少了208个字节?为什么?

最佳答案

如果您想查看每条指令在做什么,您需要禁用源代码级调试。打开调试菜单并取消选中“源模式”。当您进入源代码模式时,所有映射到当前源代码行的指令都会在调试器中断之前执行。

关于assembly - 为什么 "push ebp"会改变 ebp 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9769039/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com