Giriş
Şu satırı dahil ederiz.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Açıklaması şöyle
Şu satırı dahil ederiz.
#include <string.h>
Döndürdüğü sonuç için açıklama şöyleC11'deki açıklama şöyleThe memcmp() function returns an integer greater than, equal to, or less than zero, accordingly as the object pointed to by s1 is greater than, equal to, or less than the object pointed to by s2.
POSIX'deki açıklama şöyleThe sign of a nonzero value returned by the comparison functions memcmp, strcmp, and strncmp is determined by the sign of the difference between the values of the first pair of characters (both interpreted as unsigned char) that differ in the objects being compared.
Yani sadece >0, =0 ve <0 değerine bakmak gerekir.The sign of a non-zero return value shall be determined by the sign of the difference between the values of the first pair of bytes (both interpreted as type unsigned char) that differ in the objects being compared.
Örnek
Şöyle yaparız.
int equal4(const char* a, const char* b)
{
return memcmp(a, b, 4) == 0;
}
int less4(const char* a, const char* b)
{
return memcmp(a, b, 4) < 0;
}
ÖrnekŞöyle yaparız.
template <class T>
inline bool operator==(const T& a, const T& b)
{
return memcmp(&a, &b, sizeof(a)) == 0;
}
GüvenlikAçıklaması şöyle
Güvenlik ile alakalı bu açıklamanın izahı şöyle. memcmp ilk farklı byte değerini bulduğu zaman hemen döner. Saldırgan zamanları ölçerek hangi byte'ın farklı olduğunu bularak bir sürü deneme ile doğru byte dizisini bulabilir. Bu saldırı tipine "side channel attack" deniliyor. Açıklaması şöyleDo not use memcmp() to compare security critical data, such as cryptographic secrets, because the required CPU time depends on the number of equal bytes. Instead, a function that performs comparisons in constant time is required.
Side channel attacks across the Internet are entirely possible. The jitter in latency can be compensated for with a bit of statistics.Biraz evhamın ölçüsü kaçmış gibi :)
Hiç yorum yok:
Yorum Gönder