### ESP 定律原理知道吗

ESP 定律的原理

ESP 定律的核心思想是：在正常的函数调用和返回过程中，栈指针（ESP 在 32 位系统，RSP 在 64 位系统）在进入函数时和离开函数时是相等的

或者更准确地说，`call` 指令在将返回地址压入栈后，会将 ESP 减小。当函数返回（通过 `ret` 指令）时，`ret` 指令会弹出返回地址，并自动调整 ESP，使其回到 `call` 指令执行之前的状态

ESP 定律的两个核心结论：

1. 在函数内部，只要没有发生新的函数调用或异常，`push` 和 `pop` 指令的操作是对称的。也就是说，每一个 `push` 都有一个对应的 `pop`，所以 ESP 的最终变化是零
2. 在函数返回时，`ret` 指令会正确地将控制权返回给调用方，其前提是函数执行完毕时 ESP 寄存器的值正好指向 `call` 指令压入的返回地址

如果一个函数在返回时，ESP 的值不是返回地址，那么 `ret` 指令会从一个错误的位置取地址，导致程序崩溃或跳转到不可预知的地址