Questions tagged «memcpy»

11
memcpy()vs memmove()
我想明白之间的差别memcpy(),并memmove()和我有阅读的文本memcpy(),而没有照顾重叠源和目的地memmove()一样。 但是,当我在重叠的存储块上执行这两个功能时,它们都给出相同的结果。例如,在memmove()帮助页面上采用以下MSDN示例:- 有没有更好的例子来了解它的缺点memcpy以及如何memmove解决? // crt_memcpy.c // Illustrate overlapping copy: memmove always handles it correctly; memcpy may handle // it correctly. #include <memory.h> #include <string.h> #include <stdio.h> char str1[7] = "aabbcc"; int main( void ) { printf( "The string: %s\n", str1 ); memcpy( str1 + 2, str1, 4 ); printf( "New …
157 c  memcpy  memmove 



2
JPEG的Death漏洞如何运作?
我一直在阅读有关Windows XP和Windows Server 2003上针对GDI +的较旧漏洞利用的信息,称其为我正在从事的项目的JPEG死亡。 该漏洞在以下链接中有很好的解释:http : //www.infosecwriters.com/text_resources/pdf/JPEG.pdf 基本上,JPEG文件包含一个称为COM的节,其中包含一个(可能为空)注释字段,以及一个两个字节的值,其中包含COM的大小。如果没有注释,则大小为2。读取器(GDI +)读取大小,将其减去2,然后分配适当大小的缓冲区以将注释复制到堆中。攻击涉及0在字段中放置值。GDI +减去2,导致一个值-2 (0xFFFe),其被转化成无符号整数0XFFFFFFFE的memcpy。 样例代码: unsigned int size; size = len - 2; char *comment = (char *)malloc(size + 1); memcpy(comment, src, size); 观察到malloc(0)第三行应该返回一个指向堆上未分配内存的指针。如何写入0XFFFFFFFE字节(4GB!!!!)可能不会使程序崩溃?这是否会超出堆区域并写入其他程序和OS的空间?那会发生什么呢? 据我了解memcpy,它只是将n字符从目标复制到源。在这种情况下,源应该在堆栈上,目标应该在堆上,并且n是4GB。
94 c++  security  memcpy  malware 

9
strcpy与memcpy
memcpy()和之间有什么区别strcpy()?我试图在程序的帮助下找到它,但是两者都给出了相同的输出。 int main() { char s[5]={'s','a','\0','c','h'}; char p[5]; char t[5]; strcpy(p,s); memcpy(t,s,5); printf("sachin p is [%s], t is [%s]",p,t); return 0; } 输出量 sachin p is [sa], t is [sa]
81 c  memcpy  strcpy 


10
为什么对于不能TriviallyCopyable的对象,std :: memcpy的行为将无法定义?
来自http://en.cppreference.com/w/cpp/string/byte/memcpy: 如果对象不是TriviallyCopyable(例如标量,数组,C兼容结构),则该行为是不确定的。 在我的工作中,std::memcpy很长时间以来,我们一直使用以下方法按位交换不可TriviallyCopyable的对象: void swapMemory(Entity* ePtr1, Entity* ePtr2) { static const int size = sizeof(Entity); char swapBuffer[size]; memcpy(swapBuffer, ePtr1, size); memcpy(ePtr1, ePtr2, size); memcpy(ePtr2, swapBuffer, size); } 从来没有任何问题。 我了解滥用std::memcpy非TriviallyCopyable对象并导致下游未定义行为是微不足道的。但是,我的问题是: std::memcpy与非TriviallyCopyable对象一起使用时,为什么自身的行为不确定?为什么标准认为有必要指定该标准? 更新 针对此帖子和该帖子的答案已修改了http://en.cppreference.com/w/cpp/string/byte/memcpy的内容。当前的描述是: 如果对象不是TriviallyCopyable(例如标量,数组,与C兼容的结构),则除非程序不依赖于目标对象的析构函数的影响(不是由memcpy)运行,否则行为是不确定的。目标对象(以结束,但不是以开头memcpy)是通过其他一些方式(例如,新放置)来启动的。 聚苯乙烯 @Cubbi的评论: @RSahu如果可以保证UB下游,它将使整个程序未定义。但我同意,在这种情况下似乎有可能绕过UB,并相应地修改了cppreference。

7
Linux上的memcpy性能不佳
我们最近购买了一些新服务器,并且内存性能不佳。与我们的笔记本电脑相比,服务器的memcpy性能要慢3倍。 服务器规格 底盘和主板:SUPER MICRO 1027GR-TRF CPU:2个Intel Xeon E5-2680 @ 2.70 Ghz 内存:8x 16GB DDR3 1600MHz 编辑:我也在具有更高规格的另一台服务器上进行测试,并看到与上述服务器相同的结果 服务器2规格 底盘和主板:SUPER MICRO 10227GR-TRFT CPU:2个Intel Xeon E5-2650 v2 @ 2.6 Ghz 内存:8x 16GB DDR3 1866MHz 笔记本电脑规格 底盘:联想W530 CPU:1个Intel Core i7 i7-3720QM @ 2.6Ghz 内存:4x 4GB DDR3 1600MHz 操作系统 $ cat /etc/redhat-release Scientific Linux release …
71 c++  c  linux  memcpy  numa 

6
用于memcpy的增强型REP MOVSB
我想使用增强的REP MOVSB(ERMSB)为自定义获取高带宽memcpy。 ERMSB是与Ivy Bridge微体系结构一起引入的。如果您不知道什么是ERMSB,请参阅英特尔优化手册中的“增强型REP MOVSB和STOSB操作(ERMSB)”部分。 我知道直接执行此操作的唯一方法是内联汇编。我从https://groups.google.com/forum/#!topic/gnu.gcc.help/-Bmlm_EG_fE获得了以下功能 static inline void *__movsb(void *d, const void *s, size_t n) { asm volatile ("rep movsb" : "=D" (d), "=S" (s), "=c" (n) : "0" (d), "1" (s), "2" (n) : "memory"); return d; } 但是,当我使用它时,带宽远小于memcpy。 我的i7-6700HQ(Skylake)系统,Ubuntu 16.10,DDR4 @ 2400 MHz双通道32 GB,GCC 6.2可达到__movsb15 GB / …
71 c  gcc  assembly  x86  memcpy 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.