gpt4 book ai didi

c - 安全编程中的 Memcpy()?

转载 作者:太空狗 更新时间:2023-10-29 16:32:54 25 4
gpt4 key购买 nike

我最近偶然发现了 an article声称 Microsoft 正在其安全编程商店中禁止 memcpy() 函数。我了解该功能固有的漏洞,但是否有必要完全禁止其使用?

我编写的程序应该完全避免使用 memcpy(),还是只确保安全使用它?有哪些替代方案可以提供类似但更安全的功能?

最佳答案

Microsoft 提供 alternatives验证其参数的 memcpy 和 wmemcpy。

memcpy_s 说,“嗯,在我从这个地址读取之前,让我自己验证它不是空指针;在我写入这个地址之前,我将再次执行该测试。我还将比较数字我被要求复制到目标的声明大小;当且仅当调用通过所有这些测试时,我才能执行复制。”

memcpy 说“将目标放入寄存器,将源放入寄存器,将计数放入寄存器,执行 MOVSB 或 MOVSW。” (地球城市的例子,这个世界不久:http://www.geocities.com/siliconvalley/park/3230/x86asm/asml1013.html)

编辑:有关 memcpy 的 Your Wish Is My Command 方法的一个例子,请考虑 OpenSolaris,其中 memcpy 是(对于某些配置)defined in terms of bcopy , 和 bcopy (对于某些配置)是......

void
33 bcopy(from, to, count)
34 #ifdef vax
35 unsigned char *from, *to;
36 int count;
37 {
38
39 asm(" movc3 12(ap),*4(ap),*8(ap)");
40 }
41 #else
42 #ifdef u3b /* movblkb only works with register args */
43 unsigned char *from, *to;
44 int count;
45 {
46 asm(" movblkb %r6, %r8, %r7");
47 }
48 #else
49 unsigned char *from, *to;
50 int count;
51 {
52 while ((count--) > 0)
53 *to++ = *from++;
54 }
55 #endif

编辑:谢谢,米莉·史密斯!这是我在上面链接的 geocities 页面上的内容:

动画

指令 movs 用于将源字符串复制到目标中(是的,复制,而不是移动)。该指令有两个变体:movsb 和 movsw。 movsb(“移动字符串字节”)一次移动一个字节,而 movsw 一次移动两个字节。

因为我们想一次移动几个字节,所以这些 movs 指令使用 rep 前缀分批完成。移动次数由 CX 寄存器指定。请参见下面的示例:

:
lds si, [src]
les di, [dest]
cld
mov cx, 100
rep movsb
:

此示例将从 src 复制 100 个字节到 dest。如果将 movsb 替换为 movsw,则会复制 200 个字节。如果删除 rep 前缀,则 CX 寄存器将无效。您将移动一个字节(如果是 movsb,如果是 movsw,则移动 2 个字节)。

关于c - 安全编程中的 Memcpy()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/870019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com