问题标签 [memcmp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 使用 memcmp() 时出现段错误
我在这一行遇到段错误:
这是来自 gdb 的跟踪,您可以在此处查看 datap:
c - 读取内存会发生分段错误吗?
我认为阅读记忆不应该引起任何问题,例如
memcmp()
会失败吗?
c - 如何编写可靠的、与内容无关的 memcmp() 实现?
一个天真的实现是memcmp()
这样的(来自这个答案):
一旦找到第一个不匹配的字节,块遍历就会停止。这对加密应用程序不利,因为它使执行时间依赖于块内容,这可能允许定时攻击。所以 OpenSSL 使用这个(取自这里):
中间没有break
s 或return
s,所以这段代码必须遍历整个块的长度。至少这是本意。
现在这是一个使用示例(来自此处):
现在,通过链接时代码生成 (Visual C++ LTCG) 或链接时优化 (gcc LTO),编译器能够同时看到CRYPTO_memcmp()
实现和调用站点(即使它们位于不同的翻译单元中)。可以看到调用站点没有使用实际值,它只是将其与 null 进行比较。因此,它可以自由转换CRYPTO_memcmp()
,以便在找到第一个不匹配的字节对并且“安全”版本memcmp()
不再安全时立即返回。
如何memcmp()
实现使得符合标准的编译器不会将其转换为有助于定时攻击的版本?
c++ - c ++将字节数组与结构进行比较的最佳方法
我需要帮助。我有一个unsigned char *
并且说我有一个结构
我想比较 cmp 和输入。最快的方法是什么?
提前非常感谢。
c - memcmp 返回值的大小是什么意思?
我只是碰巧调试了一个令人难以置信的讨厌的错误:在我自己的 PC(Windows 7 x64,MinGw)上,我的 C 程序将使用memcmp
比较数组成员时成功地对数组进行排序。
我的函数使用了冒泡排序算法,它的骨架如下所示:
现在,在我的电脑上,memcmp
已返回-1
,0
而1
在另一台电脑上又返回-5
,0
并且5
. 通过将此与direction
我进行比较,导致排序完全错误。
但是我想知道,返回值的绝对值(即大小)memcmp
实际上是什么意思?
返回一个整数值,表示内存块的内容之间的关系:零值表示两个内存块的内容相等。大于零的值表示两个内存块中不匹配的第一个字节在 ptr1 中的值大于在 ptr2 中的值,就像评估为 unsigned char 值一样;小于零的值表示相反。
没有提到大小,他们只是通过说大于零来确保 +-1 不会出错。
c - 意外的 memcmp 返回值
我做了一个INI文件解析器,它在Windows上运行良好,但在Linux上运行良好,问题来自memcmp函数,它不应该返回0,我已经用printf和strlen检查过,(我也试过用strncmp相反,它返回了不同的值,但仍然不同于 0),但找不到问题出在哪里。
这是代码:
我怀疑这个错误很愚蠢,但我是 C 的菜鸟,很抱歉给您带来不便。
c - memcmp 是否仅适用于字符串?
如果我发送memcmp
两个指向整数的指针,那么它似乎将整数解释为字符。
例如:
在上面的代码中,它返回 1。
我想更好地理解这个函数,我想知道我是不是用错了,或者是否有类似的函数来比较内存块的int
值。
c++ - 基本数据类型的 Equal 运算符与 memcmp 的性能
我一直在使用 memcmp 函数在我的性能关键应用程序中比较 2 个整数。我不得不使用它而不是使用相等的运算符,因为我必须一般地处理其他数据类型。但是,我怀疑原始数据类型的 memcpy 性能并将其更改为等于运算符。但是,性能有所提高。
我只是做了一些简单的测试,如下所示。
使用 memcmp
该程序的输出如下。
使用相等运算符
该程序的输出如下。
有人可以让我知道对于原始数据类型,等号运算符是否比 memcmp 更快?如果是这样,那里发生了什么?等号运算符不是在里面使用 memcmp 吗?
c - 如何有效地将一块内存与单个字节进行比较?
我正在尝试查看结构是否与结构0xFF
的大小一样返回。
memcmp
似乎是显而易见的起点,但我必须分配第二个内存块,用0xFF
's. 这似乎只是一种浪费。
是否存在为此的标准功能?还是我应该通过 for 循环进行平底船和迭代?
c++ - C memcmp 第三个参数类型
memcmp 中的第三个参数应该是 sizeof() 类型。我用以下内容阅读了这段代码
结构在哪里st
。
上面调用中第三个参数的类型是什么?它在做什么?