我試圖把一些可能在拍攝中使用的標誌情景教開拓發展gera's Insecure Programming by example程序到客戶端/服務器應用程序。我遇到的問題是我不確定Visual Studio(我正在使用2005專業版)如何決定在堆棧中分配變量的位置。Visual Studio如何決定堆棧變量的分配順序?
當我編譯和運行實施例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
下80個字節,並且被複制任何四個字節在前80年後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
?有什麼辦法可以事先告訴變量如何分配?
感謝,
傑森
嗯,還好。是的,我猜結構將不得不做。謝謝您的幫助。