簡體   English   中英

***檢測到堆棧粉碎***:./ asem終止分段錯誤(核心已轉儲)

[英]*** stack smashing detected ***: ./asem terminated Segmentation fault (core dumped)

我正在編譯程序,但出現錯誤: *檢測到堆棧粉碎* :./asem終止分段錯誤(核心已轉儲)我不知道我在做什么錯。 我的部分是用沒有%0,%1和%2的zadanie1編寫。

#include <stdio.h>

  int main()

  {
     char *x= "abcabab xxabc";
     char *y= "ab";
     char bufor[4];
    asm volatile(
    ".intel_syntax noprefix;"
    "mov ebx,%1;"
    "push ebx;"
    "mov ebx,%2;"
    "push ebx;"
    "mov ebx,%0;"
    "call zadanie1;"
    "jmp wyjscie;"
    "zadanie1:"
    "mov ah,[ebx];"
    "cmp ah,0;"
    "jz wyjscie;"

    "push ebp;"
    "mov ebp,esp;"
    "mov edx,[ebp+8];"
    "mov al,[edx];"

    "compare:"
    "cmp ah,al;"
    "jnz diff;"

    "inc ebx;"
    "mov ah,[ebx];"
    "cmp ah,0;"
    "jz wyjscie;"

    "inc edx;"
    "mov al,[edx];"
    "cmp al,0;"
    "jnz diff;"
    "inc ecx;"
    "mov edx,[ebp+8];"
    "jmp compare;"

    "diff:"
    "inc ebx;"
    "mov ah,[ebx];"
    "cmp ah,0;"
    "jz wyjscie;"
    "inc edx;"
    "mov al,[edx];"
    "jmp compare;"



    "wyjscie:"

    "pop ebx;"
    "mov [ebx],ecx;"
    "pop ebx;"
    "pop ebp;"
    ".att_syntax prefix;"
    :
    :"r"(x),"r"(y), "r"(bufor)
    :"ebx"
);

return 0;

}

您需要正確地構建代碼,以便可以看到推送和彈出窗口之間不平衡的地方。 "zadanie1:"的第4行中,您"zadanie1:"執行另一個"push ebp;" 但是您仍然會到達"wyjscie:"以從堆棧中彈出與跳過該推送相同數量的項目。 另外,如果要跟蹤堆棧維護情況,請從調用中進行適當的返回,而不要彈出返回地址,並且gcc已發現所有這些情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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