当前位置: 首页 > news >正文

搜索网页内容单页面网站如何seo

搜索网页内容,单页面网站如何seo,seo外包公司兴田德润官方地址,网站建设平台协议书模板下载内容#xff1a;在C/C程序里有一类非常典型的问题#xff0c;那就是#xff1a;溢出问题。现在分别来分析一下常见的数组溢出#xff0c;整数溢出#xff0c;缓冲区溢出#xff0c;栈溢出和指针溢出等。 目录 1、数组溢出 2、整数溢出 3、缓冲区溢出 4、栈溢出 5、…内容在C/C程序里有一类非常典型的问题那就是溢出问题。现在分别来分析一下常见的数组溢出整数溢出缓冲区溢出栈溢出和指针溢出等。 目录 1、数组溢出 2、整数溢出 3、缓冲区溢出 4、栈溢出 5、指针溢出 6、字符串溢出 1、数组溢出 在C语言中数组的元素下标是从0开始计算的所以对于n个元素的数组a[n] 遍历它的时候是a[0],a[1],...,a[n-1]如果遍历到a[n]数组就溢出了。  void print_array(int a[], int n) {     for (int i 0; i n; i)      {         a[i] a[i1];//当i n-1时就发生了数组越界         printf(“%d\n”, a[i]);     } } 上面的循环判断应该改为 for (int i 0; i n-1; i) 2、整数溢出 整数的溢出分为下溢出和上溢出。比如对于有符号的char(signed char)类型来说它能表示的范围为[-128,127]之间而对于无符号的char(unsigned char)来说 它能表示的范围为[0,255]。 那么对于下面的代码 signed char c1 127; c1 c11;//发生上溢出c1的值将变为-128 signed char c2 -128; c2 c2-1;//发生下溢出c2的值将变为127 unsigned char c3 255; c3 c31;//发生上溢出c3的值将变为0 unsigned char c4 0; c4 c4-1;//发生下溢出c4的值将变为255 从上面的例子可以看出当一个整数向上溢出将会变为最小值而向下溢出将会变为最大值。 来看下面的溢出代码该代码负责提供一个小写字母转换表但存在一个整数溢出问题 void BuildToLowerTable( void ) /* ASCII版本*/ {     unsigned char ch;     /* 首先将每个字符置为它自己 */     /*ch为unsigned char无符号数当ch值为UCHAR_MAX ch将会发生向上溢出变为0导致循环无法退出。*/     for ch0; ch UCHAR_MAX;ch         chToLower[ch] ch;     /* 将大写字母改为小写字母 */     for( ch ‘A’; ch ‘Z’; ch )         chToLower[ch] ch ’a’ – ‘A’; } 该代码负责在内存中查找指定的字符ch但也存在一个溢出问题 void * memchr( void *pv, unsigned char ch, size_t size ) {     unsigned char *pch (unsigned char *) pv;     /*当size的值为0的时候由于size是无符号整数因此会发生下溢出变为一个最大的整数 循环也将无法退出*/      while( -- size 0 )     {         if( *pch ch )             return (pch );         pch;     }     return( NULL ); } 3、缓冲区溢出 缓冲区溢出一般是调用了一些不安全的字符串操作函数比如strcpystrcat等这些字符串操作函数在拷贝或者修改目标位置的时候并不判断长度是否会超过目标缓存或者设置参数超过了目标缓存能容纳的大小而造成的溢出问题。 void func1(char* s) {     char buf[10];     /*此时buf只有10个字节如果传入的s超过10个字节就会造成溢出*/     strcpy(buf, s); } void func2(void) {     printf(Hacked by me.\n);     exit(0); } int main(int argc, char* argv[]) {     char badCode[] aaaabbbb2222cccc4444ffff;     DWORD* pEIP (DWORD*)badCode[16];     *pEIP (DWORD)func2;     /*badCode字符串超过了10个字节传递给func1会造成栈上缓冲区溢出     而且由于badCode经过精心构造在溢出的时候根据函数的调用约定规则会覆盖栈上的返回地址     指向了func2。所以在func1退出的时候会直接调用func2     */     func1(badCode);     return 0; } 4、栈溢出 无论是内核栈还是应用层的栈都是有一定大小限制的。如果在栈上分配的空间大于了这个限制就会造成栈大小溢出破坏栈上的数据。比如局部变量过多或者递归调度嵌套太深都会造成栈溢出。比如 int init_module(void) {     char buf[10000]; //buf[]分配在栈上但10000的空间超过了栈的默认大小8KB。     //所以发生溢出     memset(buf,0,10000);     printk(kernel stack.\n);     return 0; } void cleanup_module(void) {      printk(goodbye.\n); } MODULE_LICENSE(GPL); //应用栈的大小对少内核栈的大小多少什么时候容易栈溢出 5、指针溢出 一块长度为size大小的内存bufferbuffer的首地址为p那么buffer最后一个字节的地址 psize-1而不是psize。如果写成了psize就会造成溢出比如下面的代码 void* memchr( void *pv, unsigned char ch, size_t size ) {     unsigned char *pch ( unsigned char * )pv;     unsigned char *pchEnd pch size;     while( pch pchEnd )     {         if( *pch ch )             return ( pch );         pch ;     }     return( NULL ); } 上面的代码用于查找内存中特定的字符位置。对于其中的while循环平时执行似乎都没有任何问题。但是考虑一种特别情况即pv所指的内存位置为末尾若干字节那么因为pchEnd pchsize所以pchEnd指向最后一个字符的下一个字节将会超出内存的范围即pchEnd所指的位置已经不存在。 知道了问题所在那么可以将内存的结尾计算方式改为  pchEnd pv size – 1;  while ( pch pchEnd )  {         if( *pch ch )             return ( pch );         pch ; } ……  pchEnd指向了最后一个字节。但是检查循环内部的执行情况可知由于pch每增加到pchEnd1时都会发生上溢。因此循环将无法退出。 于是可以将程序修改为下面的代码。将用size变量来控制循环的退出。这样就不会存在任何问题了。 void *memchr( void *pv, unsigned char ch, size_t size ) {     unsigned char *pch ( unsigned char * )pv;     while( size -- 0 )     {         if( *pch ch )             return( pch );         pch ;     }     return( NULL ); } 大家知道--size的效率一般比size--的效率高。那么是否可以将循环的判断条件改为下面的语句呢  while --size 0   ……  实际上这是不行的。因为当size0时由于size是无符号数那么它将发生下溢变成了size所能表示的最大正数循环也将无法退出。  6、字符串溢出 我们已经知道字符串是\0结尾的。如果字符串结尾忘记带上\0那么就溢出了。注意strlen(p)计算的是字符串中有效的字符数不含’\0’。考察下面拷贝字符串的代码看看有什么问题没呢 char *str “Hello, how are you!”; char *strbak (char *)malloc(strlen(str)); if (NULL strbak) { //处理内存分配失败返回错误 } strcpy(strbak, str); ...... 显然由于strlen()计算的不是str的实际长度即不包含’\0’字符的计算所以strbak没有结束符’\0’而在C语言中’\0’是字符串的结束标志所以是必须加上的否则会造成字符串的溢出。所以上面的代码应该是 char *str “Hello, how are you!”; char *strbak (char *)malloc(strlen(str)1); if (NULL strbak) { //内存分配失败返回错误 } strcpy(strbak, str);
http://www.zqtcl.cn/news/926283/

相关文章:

  • 网站开发小程序快站模板
  • 江苏集团网站建设智慧养老网站开发
  • 外网网址可以做英语阅读的网站怎么原创视频网站
  • 宁波网站建设流程图自己做网站可以揽业务吗
  • 赤峰市建设网站东胜做网站
  • 有口碑的坪山网站建设微信扫一扫登录网站如何做
  • 自己建网站要花多少钱蓟县网站建设
  • 兖州中材建设有限公司网站wordpress免签约接口
  • 湖北网站seo设计成都疾控最新通告
  • 商丘网站建设推广公司配资网站建设多少钱
  • 手机网站怎么做SEO优化gzip压缩 wordpress
  • 上下框架 网站app营销的核心是什么
  • 网站开发哪里有培训wordpress 主题 网址导航
  • 深圳市宝安区怎么样百度禁止seo推广
  • 手机电商网站 模板常熟做网站优化
  • 免费的logo设计网站网页设计与制作dw
  • 线上调研问卷在哪个网站上做网页设计学生作业
  • 云南高端网站建设网页设计工作室选址依据
  • 免费的编程自学网站互联网公司网站建设ppt
  • 免费发帖的网站网站空间服务器费用
  • 商城类的网站一般怎么做做ps从哪个网站上下载图片大小
  • 怎么做网站链接支付免费推广网站搭建
  • 威海 网站建设刚刚北京传来重大消息
  • 深圳返利网站开发做网站版权怎么写
  • 上传网站内容做社交电商第一步怎么做
  • 网站icp查询系统wordpress 页面 首页
  • wordpress安装教程wamp搜索引擎优化的英文缩写是什么
  • 成都旅行社网站建设网站建设包含哪些方面
  • 找不到网站后台怎么办韩国网站域名分类
  • 建设商务网站作用积极参与网站信息建设工作