临时数据如何存储在堆栈帧中
How is temp data stored on the stack frame
Int test(){
char buff[10]
printf("Enter text: ");
gets(buff);
puts(buff);
}
我不知道如何表达这个问题,但我想了解如何将值存储在为堆栈帧上的局部变量分配的缓冲区中。
---------------
Return Address
---------------
old ebp
---------------
local variables
---------------
每个块是4个字节,分成4个1字节吗?
------------------
00 | 40 | 06 | 06
------------------
ff | ff | de | 70
------------------
通过 gdb 我看到分配给测试的缓冲区是 0x10
我输入了sssssssss
:
x/x $rbp = 0xffffde70
x/x $rbp + 8 = 0x00400606
x/s $rbp - 16 = "sssssssss"
x/s $rbp - 8 = "\ns"
x/s $rbp - 4 = ""
那么我输入的字符(十六进制)是如何存储的?比如每个街区有多少人。是64位系统。
-----------------
00 | 40 | 06 | 06
------------------
ff | ff | de | 70
------------------
| | |
------------------
| | | s
------------------
s | s | s | s
------------------
s | s | s | s
------------------
从严格的 C 角度来看,我们不知道。
标准没有指定这些东西。该标准甚至没有提到堆栈的概念。从标准的角度来看,代码是在抽象机器上执行的(即没有描述机器是如何做的。只有机器必须做什么)。
所以它是如何完成的取决于具体的实现,并且它(可能)因系统而异。
您需要找到您正在使用的系统的 ABI 文档。 ABI 文档将描述它是如何在您的系统上完成的。
参见 en.wikipedia。org/wiki/Application_binary_interface
也许读 Where is the x86-64 System V ABI documented?
Int test(){
char buff[10]
printf("Enter text: ");
gets(buff);
puts(buff);
}
我不知道如何表达这个问题,但我想了解如何将值存储在为堆栈帧上的局部变量分配的缓冲区中。
---------------
Return Address
---------------
old ebp
---------------
local variables
---------------
每个块是4个字节,分成4个1字节吗?
------------------
00 | 40 | 06 | 06
------------------
ff | ff | de | 70
------------------
通过 gdb 我看到分配给测试的缓冲区是 0x10
我输入了sssssssss
:
x/x $rbp = 0xffffde70
x/x $rbp + 8 = 0x00400606
x/s $rbp - 16 = "sssssssss"
x/s $rbp - 8 = "\ns"
x/s $rbp - 4 = ""
那么我输入的字符(十六进制)是如何存储的?比如每个街区有多少人。是64位系统。
-----------------
00 | 40 | 06 | 06
------------------
ff | ff | de | 70
------------------
| | |
------------------
| | | s
------------------
s | s | s | s
------------------
s | s | s | s
------------------
从严格的 C 角度来看,我们不知道。
标准没有指定这些东西。该标准甚至没有提到堆栈的概念。从标准的角度来看,代码是在抽象机器上执行的(即没有描述机器是如何做的。只有机器必须做什么)。
所以它是如何完成的取决于具体的实现,并且它(可能)因系统而异。
您需要找到您正在使用的系统的 ABI 文档。 ABI 文档将描述它是如何在您的系统上完成的。
参见 en.wikipedia。org/wiki/Application_binary_interface
也许读 Where is the x86-64 System V ABI documented?