[英]“Hacking: The Art of Exploitation”: why does example program work with just gcc but not with -m32?
以下代碼來自“黑客:剝削的藝術”第二版,稱為input.c
int main() {
char message[10];
int count, i;
strcpy(message, "Hello, world!");
printf("Repeat how many times? ");
scanf("%d", &count);
for(i=0; i < count; i++)
printf("%3d - %s\n", i, message);
}
這對我來說似乎是內存錯誤(溢出),因為數組消息僅包含10個字節。 但是,當我僅用gcc進行編譯並執行程序時,它運行良好。
在編譯過程中添加標志gcc -m32時,出現Abort trap 6或表示錯誤的錯誤消息(我在個人Mac和大學的linux計算機群集上嘗試了此操作,以查看是否存在差異。后者有更多的顯式錯誤,包括使用內存映射和回溯進行堆棧粉碎,而對於我的Mac,只有Abort Trap 6)。
無論如何,這是我的問題:為什么代碼僅適用於gcc而不適用於gcc -m32? 另外,為什么在用gcc -m32編譯文件后,如果我嘗試僅用gcc再次編譯文件,它仍然無法正常工作?
我有很多事情我不理解,因此,感謝您提供有關為什么這一切發生的任何其他信息。 謝謝。
超出數組的寫入(以及超出數組的讀取)是未定義的行為,因此,這取決於編譯器選項只是一個巧合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.