linux开发---30.【C】实现内存替换

1120阅读 0评论2017-02-28 wangcong02345
分类:LINUX

1. linux开发---30.【C】实现内存替换

2. 代码如下

  1. cong@msi:/work/cloud/test2$ cat test.cpp
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <errno.h>
  6. #include <zlib.h>

  7. #define dbmsg(fmt, args ...) printf("%s:%s[%d]: "fmt"\n", __FILE__,__FUNCTION__, __LINE__,##args)
  8. int memstr_my(unsigned char* src, int src_len, int start_pos)
  9. {
  10.     int i;
  11.     unsigned char search[10] = {0,0,0,0,0,0,0,0,0,0};
  12.     int search_len = 10;
  13.     for(i=start_pos; i<src_len; i++)
  14.     {
  15.         if(0 == memcmp(&src[i], search, search_len))
  16.             break;
  17.     }
  18.     if(i==src_len)
  19.         return -1;
  20.     return i;
  21. }

  22. void mem_substitute(unsigned char *src, int src_len, unsigned char *dst, int dst_len)
  23. {
  24.     unsigned char *pi, *po;
  25.     int search_len, left_len;
  26.     int pos;
  27.     pi = src;
  28.     po = dst;
  29.     search_len = 10;
  30.     pos = memstr_my(pi, src_len, 0);
  31.     left_len = src_len;
  32.     if(pos > 0)
  33.     {
  34.         while(pos > 0 )
  35.         {
  36.             memcpy(po, pi, pos);
  37.             pi += pos + search_len;
  38.             po += pos;
  39.             left_len -= pos;
  40.             left_len -= search_len;
  41.             pos = memstr_my(pi, left_len, pos);
  42.         }
  43.         memcpy(po, pi, left_len);
  44.     }
  45.     else
  46.     {
  47.         //if not found, just copy
  48.         memcpy(po, pi, src_len);
  49.     }
  50. }

  51. int main(int ac, char *av[])
  52. {
  53.     int i;
  54.     unsigned char src[128];
  55.     unsigned char dst[128];
  56.     for(i=0; i<128; i++)
  57.         src[i] = i%128;

  58.     for(i=0; i<10; i++)
  59.         src[i+12] = 0;

  60.     for(i=0; i<10; i++)
  61.         src[i+48] = 0;

  62.     mem_substitute(src, 128, dst, 128);
  63.     for(i=0; i<128; i++)
  64.     {
  65.         printf("%d=0x%x ", i, dst[i]);
  66.         if((i+1)%10 == 0)
  67.             printf("\n");
  68.     }
  69.     printf("\n");
  70.     return 0;
  71. }
  72. cong@msi:/work/cloud/test2$



3. 代码下载
mem_substitute.rar(下载后改名为mem_substitute.rar)
上一篇: linux开发---29.【C】测试tinyxml库
下一篇:android开发----6.valgrind在android下的使用