亚洲v欧美v国产v在线成_制服丝袜中文字幕丝袜专区_一区二区三区韩国电影_激情欧美一区二区中文字幕

經(jīng)典c語言面試題

  1.gets()函數(shù)

  問:請找出下面代碼里的問題:

  #include

  int main(void)

  {

  char buff[10];

  memset(buff,0,sizeof(buff));

  gets(buff);

  printf(" The buffer entered is [%s] ",buff);

  return 0;

  }

  答:上面代碼里的問題在于函數(shù)gets()的使用,這個函數(shù)從stdin接收一個字符串而不檢查它所復(fù)制的緩存的容積,這可能會導(dǎo)致緩存溢出。這里推薦使用標(biāo)準(zhǔn)函數(shù)fgets()代替。

  2.strcpy()函數(shù)

  問:下面是一個簡單的密碼保護(hù)功能,你能在不知道密碼的情況下將其破解嗎?

  #include

  int main(int argc, char *argv[])

  {

  int flag = 0;

  char passwd[10];

  memset(passwd,0,sizeof(passwd));

  strcpy(passwd, argv[1]);

  if(0 == strcmp("LinuxGeek", passwd))

  {

  flag = 1;

  }

  if(flag)

  {

  printf(" Password cracked ");

  }

  else

  {

  printf(" Incorrect passwd ");

  }

  return 0;

  }

  答:破解上述加密的關(guān)鍵在于利用攻破strcpy()函數(shù)的漏洞。所以用戶在向“passwd”緩存輸入隨機(jī)密碼的時候并沒有提前檢查 “passwd”的容量是否足夠。所以,如果用戶輸入一個足夠造成緩存溢出并且重寫“flag”變量默認(rèn)值所存在位置的內(nèi)存的長“密碼”,即使這個密碼無法通過驗證,flag驗證位也變成了非零。

本文已影響6827
上一篇:軟件工程師面試題 下一篇:成本會計常見面試問題

相關(guān)文章推薦

|||||