問題タブ [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() の信頼できるコンテンツに依存しない実装を作成するにはどうすればよいですか?
の素朴な実装は次のmemcmp()
ようになります(この回答から):
ここでは、最初の不一致バイトが見つかると、ブロックのトラバーサルが停止します。これは、実行時間がブロックの内容に依存するようになり、タイミング攻撃が可能になるため、暗号化アプリケーションには適していません。したがって、OpenSSL はこれを使用します (ここから取得):
break
途中にs やsがないreturn
ため、このコードはブロック全体をトラバースする必要があります。少なくともこれは意図です。
次に、使用例を 1 つ示します (ここから):
リンク時のコード生成 (Visual C++ LTCG) またはリンク時の最適化 (gcc LTO) を使用すると、コンパイラはCRYPTO_memcmp()
実装と呼び出しサイトの両方を確認できます (それらが異なる翻訳単位にある場合でも)。呼び出しサイトは実際の値を使用せず、null と比較するだけであることがわかります。したがってCRYPTO_memcmp()
、最初の不一致のバイト ペアを見つけたらすぐに戻るように自由に変換でき、「安全な」バージョンのmemcmp()
は安全ではなくなります。
memcmp()
標準準拠のコンパイラがタイミング攻撃を支援するバージョンに変換しないように実装するにはどうすればよいですか?
c++ - バイト配列を構造体と比較するC++の最良の方法
私は助けが必要です。私はunsigned char *
構造体を持っていると言う
cmpとinputを比較したい。最速の方法は何ですか?
よろしくお願いします。
c - memcmp の戻り値のサイズは何を意味しますか?
信じられないほど厄介なエラーをたまたまデバッグしました。自分の PC (Windows 7 x64、MinGw) で、C プログラムはmemcmp
配列メンバーを比較するときに を使用して配列を正常にソートしました。
私の関数はバブルソートアルゴリズムを使用し、そのスケルトンは次のようになります。
今、私の PC では、memcmp
が返され、別の PCでは-1
、0
およびが返されました。これを私と比較すると、ソートが完全に間違っていました。1
-5
0
5
direction
しかし、戻り値の絶対値 (つまりサイズ) はmemcmp
実際には何を意味するのでしょうか。
メモリ ブロックの内容間の関係を示す整数値を返します。ゼロ値は、両方のメモリ ブロックの内容が等しいことを示します。ゼロより大きい値は、両方のメモリ ブロックで一致しない最初のバイトが、unsigned char 値として評価されたかのように、ptr2 よりも ptr1 に大きい値があることを示します。ゼロ未満の値はその反対を示します。
サイズについては言及されていません。彼らは +-1 について間違っていないように、ゼロより大きいと言っているだけです。
c - 予期しない memcmp 戻り値
私は INI ファイル パーサーを作成しました。Windows ではうまく機能しますが、Linux ではうまく機能しません。問題は memcmp 関数が原因です。必要なときに 0 が返されません。すでに printfと strlen でチェックしています (strncmp も使用しようとしました)。代わりに、別の値を返しましたが、それでも 0 とは異なります) が、問題の原因を見つけることができませんでした。
コードは次のとおりです。
エラーがばかげていると思いますが、私は C 初心者なので、ご迷惑をおかけして申し訳ありません。
c - memcmp は文字列でのみ機能しますか?
整数への 2 つのポインターを送信memcmp
すると、整数が文字として解釈されるようです。
例えば:
上記のコードでは、1 を返します。
この関数の理解を深めたいのですが、使い方が間違っているのか、値を保持するメモリのブロックを比較するための同様の関数があるのか 疑問に思っていint
ます。
c++ - C memcmp の 3 番目のパラメーターの型
memcmp の 3 番目の引数は、sizeof() 型である必要があります。私はこのコードを次のように読みました
はst
構造体です。
上記の呼び出しの 3 番目のパラメーターの型は何ですか? それは何をしているのですか?