Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 堆栈上的缓冲区是什么样子的_C_Arrays_Stack_Int_Buffer - Fatal编程技术网

C 堆栈上的缓冲区是什么样子的

C 堆栈上的缓冲区是什么样子的,c,arrays,stack,int,buffer,C,Arrays,Stack,Int,Buffer,当您在c中的堆栈上保留缓冲区时。元素的存储顺序是什么 例如: char buf[4]; 假设堆栈现在看起来像这样: return addr basepointer buf buf buf buf <-stack pointer points here 堆栈是否看起来像: return addr basepointer buf buf buf 6 <-stack pointer points here 返回地址 基准指针 缓冲器 缓冲器 缓冲器 6对于这个问题没有一般的答案,由编

当您在c中的堆栈上保留缓冲区时。元素的存储顺序是什么

例如:

char buf[4];
假设堆栈现在看起来像这样:

return addr
basepointer
buf
buf
buf
buf <-stack pointer points here
堆栈是否看起来像:

return addr
basepointer
buf
buf
buf
6 <-stack pointer points here
返回地址
基准指针
缓冲器
缓冲器
缓冲器

6对于这个问题没有一般的答案,由编译器决定如何布置变量。不同的编译器可以做出不同的选择,具有不同编译标志的同一个编译器也可以导致不同的选择。同一个编译器和标志从不同的编译中产生不同的结果甚至是可能的(尽管通常不太可能也不需要)。

这个问题不可回答。所有这些都是特定编译器的实现细节。你为什么想知道这些?让编译器按照它认为合适的方式布置堆栈框架。我有一个赋值,我们需要在给定的二进制文件上执行缓冲区溢出。它与赋值相关,但显然取决于编译器。我现在发现我的缓冲区不在我假设的地址上。我现在测试了它,找到了这个二进制文件的答案。谢谢。事实上根本不需要把本地人放在堆栈上。如果你没有记录他们的地址,那么他们可以注册。
return addr
basepointer
buf
buf
buf
6 <-stack pointer points here
return addr
basepointer
6
buf
buf
buf <-stack pointer points here