[英]*** stack smashing detected ***: <unknown> terminated Aborted (core dumped)
[英]*** 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.