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-

推荐阅读