Visual studio VisualStudio如何决定堆栈变量的分配顺序?
我正在尝试将一些程序转换为客户机/服务器应用程序,这些应用程序可用于捕获标志场景,以教授利用漏洞进行开发。我遇到的问题是,我不确定VisualStudio(我使用的是2005专业版)如何决定在堆栈上分配变量 当我编译并运行示例1时:Visual studio VisualStudio如何决定堆栈变量的分配顺序?,visual-studio,compiler-construction,stack-overflow,stack,Visual Studio,Compiler Construction,Stack Overflow,Stack,我正在尝试将一些程序转换为客户机/服务器应用程序,这些应用程序可用于捕获标志场景,以教授利用漏洞进行开发。我遇到的问题是,我不确定VisualStudio(我使用的是2005专业版)如何决定在堆栈上分配变量 当我编译并运行示例1时: int main() { int cookie; char buf[80]; printf("buf: %08x cookie: %08x\n", &buf, &cookie); gets(buf); if
int main() {
int cookie;
char buf[80];
printf("buf: %08x cookie: %08x\n", &buf, &cookie);
gets(buf);
if (cookie == 0x41424344)
printf("you win!\n");
}
我得到以下结果:
buf: 0012ff14 cookie: 0012ff64
buf
从比cookie
低80个字节的地址开始,在buf
中复制的前80个字节之后的任何四个字节都将出现在cookie
中
我遇到的问题是,当我将此代码放在其他函数中时。当我编译并运行以下代码时,会得到不同的结果:buf
出现在大于cookie
的地址
void ClientSocketHandler(SOCKET cs){
int cookie;
char buf[80];
char stringToSend[160];
int numBytesRecved;
int totalNumBytes;
sprintf(stringToSend,"buf: %08x cookie: %08x\n",&buf,&cookie);
send(cs,stringToSend,strlen(stringToSend),NULL);
结果是:
buf: 0012fd00 cookie: 0012fcfc
现在,无法通过覆盖buf
将cookie设置为任意数据。有没有办法告诉Visual Studio在buf
之前分配cookie
?有没有办法事先告诉我们如何分配变量
谢谢
杰森
啊,好的。是的,我想structs也可以。谢谢您的帮助。尝试关闭编译器优化 如果优化已经停止,那么强制编译器按特定顺序放置局部变量的最佳方法是将局部变量放入结构中,并在局部堆栈上分配该结构。与独立的局部变量相比,编译器不太可能移动该结构中的字段(相对于彼此)