簡體   English   中英

“黑客:剝削的藝術”:為什么示例程序僅適用於gcc而不適用於-m32?

[英]“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM