0
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#define MAX 3
#define ARG "cat .passwd"
integer main(integer argc, char ** argv)
{
char * names[] = {"strlen", "atoi", "printf", "puts"};
void (*reachable_functions[])(char *) = {strlen, atoi, printf, puts};
void (*unreachable_functions[])(char *) = {system};
integer i, index = 0;
for(i=1; i<argc; i++)
{
index += strlen(argv[i]);
}
if(index <= MAX)
{
(reachable_functions[MAX-1])("Calling ");
(reachable_functions[MAX-1])(names[index]);
(reachable_functions[MAX-1])(".\n");
(reachable_functions[index])(ARG);
}
else
{
(reachable_functions[MAX])("Out of bounds !\n");
}
return 0;
}
我可以得到一個分段錯誤,但不可能調用無法訪問的函數!?! 我知道有整數的問題,但我不能利用它.... :( 有沒有辦法調用它?Thx這個C代碼有什麼弱點? (整數...)
您是否嘗試用'gcc -Wall -g'(改進它直到沒有警告)編譯您的程序並使用'gdb'和'valgrind'調試它? –
如果你使用'typedef int integer',我不記得在C. –
中有一個類型'整數',它可能會更好;) – Nippey