1

以下功能是否比使用 memcpy 更安全?Memcpy 在 Checkmarx 静态代码分析中给出以下“Improper_Null_Termination”错误: at 行中的字符串被 at 剥离其终止空字节。但是,如果我使用以下函数,Checkmarx 没有问题:

void myMemCpy(void *dest, void *src, size_t n) 
{ 
   // Typecast src and dest addresses to (char *) 
   char *csrc = (char *)src; 
   char *cdest = (char *)dest; 

   // Copy contents of src[] to dest[] 
   for (int i=0; i<n; i++) 
       cdest[i] = csrc[i]; 
} 

使用这个函数代替 memcpy() 有什么问题吗?

4

1 回答 1

7

以下功能是否比使用 memcpy 更安全?

不,是一样的。最好。

如果有的话,因为代码分析器和编译器知道做什么memcpy(),所以这段代码不太安全。

特别是考虑到您传递的方式size_t,然后不正确地使用int循环计数器:

void myMemCpy(void *dest, void *src, size_t n) 
{ 
   // Typecast src and dest addresses to (char *) 
   char *csrc = (char *)src; 
   char *cdest = (char *)dest; 

   // Copy contents of src[] to dest[] 
   for (int i=0; i<n; i++) 
       cdest[i] = csrc[i]; 
} 

在具有 32-bitint和 64-bit的 64-bit 架构上,如果值超过 2 gig size_t,那将会非常失败。n

于 2019-03-19T11:08:12.537 回答