2012-06-26 42 views
0

我試圖運行這片脆弱的C代碼:防止分段故障12

#include <stdio.h> 
#include <stdlib.h> 

int add(int x, int y) 
{ 
int z =10; 
z = x + y; 
return z; 
} 

main(int argc, char **argv) 
{ 
int a = atoi(argv[1]); 
int b = atoi(argv[2]); 
int c; 

char buffer[100]; 

gets(buffer); 
puts(buffer); 

c = add(a,b); 

printf("Sum of %d+%d = %d\n",a, b, c); 

exit(0); 
} 

我試圖讓過去的分段錯誤,這樣我可以輸入整數,但分段故障阻止了這一點在終端我曾嘗試: GCC -ggdb -fno-堆棧保護-U_FORTIFY_SOURCE -Wa, - execstack -o SimpleDemo SimpleDemo.c

我仍然得到分割故障。我失去了接下來要做什麼。正如你可以告訴,我是一個Ubuntu的新手。我使用的是bash代碼來自這裏:

http://www.evanjones.ca/buffer-overflow-101.html

我已經在這了一段時間,所以會很感激一些幫助

乾杯

+6

您需要提供整數作爲命令行參數,不運行程序然後輸入它們。如果你不這樣做,'atoi(argv [1])'調用將會分解錯誤(可能)。 – hmjd

回答

1

只是解釋什麼hmjd要求你做。

運行(二進制)10 20

+0

謝謝你們。爲了澄清,當我使用 - ./SimpleDemo運行程序時,我將10和20放在該行上? bash代碼如何運行這個外觀? – SunnyNewb