質問

私はいくつかのシンプルなC ++ホームワークを持っています、そして、私は学生が共有コードを共有することを知っています。これらは賢い学生であり、彼らはモスをだまする方法を知っています。タイプに基づいて変数を変更できるツールを探しています(タイプINTの最初の変数はINT1、最初のINTアレイはINTPTR1 ...)、または私が今考えられない同様のことをします。これを行うための簡単な方法を知っていますか?

編集: モスを使用して90%の一致を報告する必要があります

ありがとう

役に立ちましたか?

解決

うん、あなたが探しているツールはコンパイラと呼ばれます。 :)

真剣に、提出されたプログラムがそうである場合 まったく同じ 識別子名を除いて、コンパイルします(それなし デバッグ情報)は、まったく同じ出力をもたらす必要があります。

デバッグをオンにしてこれを行うと、コンパイラは実行可能ファイルごとに異なる実行可能ファイルにメタデータを残すことができます。これがJavaプログラムで機能しない理由でもあります。デバッグモードであろうとなかろうと、その種の情報が存在します(動的内省の目的のため)。

編集: コメントから、単なる識別子名とは異なるいくつかの提出物を観察しているという質問に追加されました。プログラムがまだ構造的に同等である場合、これはまだ機能するはずです。

編集: の使用を考えると モス 要件です。これはおそらく行く方法ではありません。 Mossにはアセンブリを比較するためのサポートがあるように思われます。おそらくアセンブラーにコンパイルし、Mossにそれを提出することはオプションです(使用しているコンパイラに応じて)。

他のヒント

ダウンロードして試すことができます C Clonedr 複製コード検出器。変数名が変更されている場合でも、重複したコードが見つかります。同じチャンクの複数の変更は、1つだけとして扱われます。バライブルの名前をどこでも一貫して名前を変更した場合、「1つのクローン」のレポートを正確な変数補助金で戻します。

あなたが試すことができます 貼り付け検出器をコピーしますignoreIdentifiers オン。 Mossの名前を正規化する努力に進む前に、少なくとも最初のパスに使用できます。または、ソースが利用可能であるため、コードの内部正規化を吐き出すことができるかもしれません。

これを行う別の方法は、アプリケーションをコンパイルしてバイナリを比較することです。そのため、試験は可変/関数名の変更に限定されません。

HEXエディターがそれを手伝うことができます。私はちょうど試しました Examdiff (無料$ではありません)そして、私は結果に満足していました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top