【发布时间】:2011-02-15 17:21:25
【问题描述】:
我正在尝试将gera's Insecure Programming by example 中的一些程序转换为客户端/服务器应用程序,这些应用程序可用于捕获标志场景以教授漏洞利用开发。我遇到的问题是我不确定 Visual Studio(我使用的是 2005 专业版)如何决定在堆栈上分配变量的位置。
当我编译并运行示例 1 时:
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 低八十个字节的地址开始,在前八十个之后复制到buf 中的任何四个字节都会出现在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?有什么方法可以预先告诉变量将如何分配?
谢谢,
杰森
啊,好吧。是的,我猜结构必须这样做。感谢您的帮助。
【问题讨论】:
标签: visual-studio compiler-construction stack-overflow stack