
网上找了很多没看到比较有用的信息
1 konar 2021-01-19 09:47:06 +08:00 是抛弃栈顶元素? |
2 rdZZZ 2021-01-19 09:54:42 +08:00 用 gcc 编译的么?对%rsp 进行+/-8 的操作,就是出栈入栈的操作。 |
3 konar 2021-01-19 09:59:07 +08:00 栈顶元素出栈后又放入栈顶,然后栈顶指针下移,那就是抛弃栈顶元素的意思吧 不过为什么不直接 subq/addq 呢 |
4 nifury 2021-01-19 10:09:19 +08:00 只放数据到 rsp,不+8 为什么不 debug 看一眼呢 |
5 konar 2021-01-19 10:33:23 +08:00 |
6 konar 2021-01-19 10:34:14 +08:00 关于 push/pop %esp 的,pushq/popq %rsp 应该类似 |
8 airqj 2021-01-19 11:49:55 +08:00 楼主专攻汇编吗? ID 都是为汇编而生啊 :) |
10 lewis89 2021-01-19 13:59:47 +08:00 一般不会对 rsp 进行 pop/push 操作 至少我看了这么多 gcc 的反汇编 没有遇到过.. fastcall 的约定是 被调用方保护好 调用方的 rbp 指针就行了,rsp 一般都是用完之后 在当前帧返回之前恢复状态就行了 一般都是当前帧一开始 sub rsp, 0x8 然后当前帧返回前 add rsp, 0x8,这 8 个字节栈空间就是当前函数帧存放变量的位置.. |
11 6e25h 2021-01-19 16:47:02 +08:00 csapp 我记得有解释过这个东西,记得好像就是 4 楼所说的 |
12 Crimilals 2021-01-19 17:08:38 +08:00 via iPhone |
13 Crimilals 2021-01-19 17:11:15 +08:00 via iPhone @Crimilals If the ESP register is used as a base register for addressing a destination operand in memory, the POP instruction computes the effective address of the operand after it increments the ESP register. For the case of a 16-bit stack where ESP wraps to 0H as a result of the POP instruction, the resulting location of the memory write is processor-family-specific. The POP ESP instruction increments the stack pointer (ESP) before data at the old top of stack is written into the destination. |
16 laumm1314 2021-01-20 11:00:24 +08:00 pop 和 push 命令相反 push 把数据压入栈顶,然后 sp 减去机器字节长度 pop 把 sp 加上机器字节,然后数据弹出到目的数 在 amd64 机器上,sp 对应 rsp popq 中的 q 标识数据宽度是 8 个字节,既是 64 位 |
17 laumm1314 2021-01-20 11:02:52 +08:00 栈是向低方向拓展的,所以 rsp 值变大对应栈收缩,rsp 值变小,栈扩大 |