结构体中的成员在栈上的顺序

2026-04-17

结构体中的成员在栈上的顺序

rdi 传入指针后,指向 r15

struct pt_regs {
	unsigned long r15;
	unsigned long r14;
	unsigned long r13;
	unsigned long r12;
	unsigned long rbp;
	unsigned long rbx;
/* arguments: non interrupts/non tracing syscalls only save upto here*/
	unsigned long r11;
	unsigned long r10;
	unsigned long r9;
	unsigned long r8;
	unsigned long rax;
	unsigned long rcx;
	unsigned long rdx;
	unsigned long rsi;
	unsigned long rdi;
	unsigned long orig_rax;
/* end of arguments */
/* cpu exception frame or undefined */
	unsigned long rip;
	unsigned long cs;
	unsigned long eflags;
	unsigned long rsp;
	unsigned long ss;
/* top of stack page */
};

stack graph

low address
+-----+
| r15 |
| r14 |
| r13 |
| ... |
| ss  |
+-----+
high address

上图中 栈顶就是在上面,栈底就是在下面,但是地址是低位在上,高位在下

这样的图形中,结构体前面的内容在最上面(在最低的地址),在栈顶

多个参数时,第一个栈上参数(前几个是放在寄存器上的)在最上面,在栈顶。

压栈是从后往前压的


为了 top 对应 high address,bottom 对应 low address,很多时候画是这样画的

这样 栈顶就是在下面,栈底就是在上面,但是方位代表了地址。

high address
+-----+
| ss  |
| ... |
| r13 |
| r14 |
| r15 |
+-----+
low address

这样的图形中,结构体前面的内容在最下面(在最低的地址),在栈顶

多个参数时,第一个栈上参数(前几个是放在寄存器上的)在最下面,在栈顶。

压栈是从后往前压的

avatar
除非注明,本博客所有文章皆为原创。
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。