return1在c語言中是什么意思 1在c語言中是什么意思( 三 )


int n = 10, i; for (i = n - 1 ; i - sizeof(char) >= 0; i--)printf("i: 0x%x\n",i);if (-1 > 0U)// -1的二進制編碼是0xFFFFFFFF,轉變成無符號數是2^32-1printf("You Surprised me!\n"); 8.2 以下是2002年的freeBSD內核的部分代碼,其中包含了漏洞,假設惡意人員將負值作為maxlen傳入這個函數,有發生什么情況?
以下size_t的類型是typedef unsigned int size_t的類型定義:
#define KSIZE 1024char kbuf[KSIZE];/* Copy at most maxlen bytes from kernel region to user buffer */int copy_from_kernel(void *user_dest, int maxlen) {int len = KSIZE < maxlen ? KSIZE : maxlen;memcpy(user_dest, kbuf, len);return len;}/* Declaration of library function memcpy */void *memcpy(void *dest, void *src, size_t n);/* Malicious Usage */void getstuff() {char mybuf[MSIZE];copy_from_kernel(mybuf, -512); // -512轉變成無符號數后是2^31+512}8.3 給定一個有序的整型數組,請編程實現二分查找算法 。
高德納在《計算機程序設計的藝術》指出,雖然早在1946年就有人將二分查找的 *** 公諸于世,但直到1962年才有人寫出沒有bug的二分查找程序,可見,寫一個安全的代碼并不容易,你是不是一不小心就寫出像下面這樣的二分查找代碼了?
int binary_search(int a[], int len, int key){int low = 0;int high = len - 1;while ( low <= high ) {int mid = (low + high)/2;// 提示:這里有溢出Bug!if (a[mid] == key) {return mid;}if (key < a[mid]) {high = mid - 1;}else{low = mid + 1;}}return -1;}ref
Randal E. Bryant, David R. O’Hallaron《Computer Systems:A Programmers Perspective》
【return1在c語言中是什么意思1在c語言中是什么意思】-End-

推薦閱讀