我只是想知道,因爲我有這樣的C代碼:關閉堆棧保護
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int fillBuffer(int argc, char *argv[]) {
char bufferA[4] = "aaa";
char bufferB[4] = "bbb";
if(argc > 1)
strcpy(bufferB, argv[1]);
printf("bufferA: %s\n", bufferA);
printf("bufferB: %s\n", bufferB);
return 0;
}
int main(int argc, char *argv[]) {
fillBuffer(argc, argv);
return 0;
}
,我試圖通過關閉堆棧保護:-fno-堆棧保護
當我嘗試做運行它:./program(escape)鍵5F,節目輸出到:
緩衝液A:F
bufferB:FFFFF
我只是不確定bufferA是如何變成f的。任何人都可以向我解釋這個嗎?
你確定'argv [1]'是'3'個字符嗎?... – LPs
未定義的行爲,任何事情都可能發生。這只是一種可能性。 –
c代碼剛剛給我們作爲例子 –