IIn*_*ble 24
可以使用阴影空间(有时也称为" 溢出空间"或" 家庭空间"),以便更轻松地调试x64.
回想一下,前4个参数在寄存器中传递.如果您进入调试器并检查线程的调用堆栈,您将无法看到传递给函数的任何参数.存储在寄存器中的值是瞬态的,并且在向上移动调用堆栈时无法重建.
这是Home空间发挥作用的地方:编译器可以使用它在堆栈上保留寄存器值的副本,以便以后在调试器中进行检查.这通常发生在未经优化的构建中.但是,在启用优化时,编译器通常会将Home空间视为可用于临时使用.堆栈上没有任何副本,调试崩溃转储变成了一场噩梦.
调试的挑战优化的x64代码提供有关该问题的深入信息.
影子空间是必须为被调用过程保留的必需32字节(4x8字节).它只是意味着在调用之前必须在堆栈上提供32个字节.这个空间可以保持未初始化,没关系.
请注意,在x64调用约定中,第4个之后的参数被压入堆栈,这些参数位于此阴影空间的顶部(在32个字节之前推送).
简而言之,您可以看到它好像x64中的函数至少有4个参数,但是寄存器中的第一个值是4.
调用x64时也应考虑堆栈对齐等问题.
| 归档时间: |
|
| 查看次数: |
7040 次 |
| 最近记录: |