2012-01-13 2 views
5

topcoder.com,SPOJのような問題解決サイトがあります。 私は同様のユースケース(人々は私にC++プログラムファイルを送ってくれます)にいくつかの制限をしたいと思います。これらのg ++(gcc)またはclang(llvm)のインラインアセンブリを禁止する

一つは次のとおりです。

がどのように私は、このような禁止を強制することができ「インラインアセンブリを使用して許可されていませんか」?ソースコード内のフレーズを検索するだけではなく、よりコンパクトな方法(賢明な方法はありますか?)

人をg ++やclangに制限することができます。 Linux上で何かが行われています。

+0

なぜあなたはそれをしたいですか?インラインasmを制限することは、セキュリティを心配する人にとってはあまり役に立ちません。 – servn

+0

@servn Ok。しかし、私はセキュリティについて心配するだけでなく、公正なC/C++の競争を心配しています。私はそのようなルールを決めたからといって、人々がasmを使わないようにしたいと思っています。そのような政策のプロセスを自動化したい。私はそれが完全な解決ではないと理解し、より多くの必要があります。それを指摘してくれてありがとう。たぶんあなたはいくつかのアイデアを持っていますか?セキュリティに興味があるなら、私の他の質問をチェックしてください:[Security.SE](http://security.stackexchange.com/users/4077?tab=questions) –

答えて

0

あなたは-fno-asmフラグを探しているようです。

__asm__を実行するのではなく、asmのように見えますが、-D__asm__=something_that_will_errorに追加することもできます。

さらに、-fno-gnu-keywordsを見て、C++でasmをオフにしてください。

+1

gcc 4.4.6マンページLinuxでこれは無効にしないことを意味します'__asm__'。 – Alnitak

4

方法について:

% gcc -Dasm=error -D__asm__=error 
+0

どのように動作しますか?私はそれが 'asm'、' __asm__'という名前のマクロを作ることを理解しています。 shadowing組み込みキーワードは許可されていますか?関数呼び出しを禁止するために同じことをすることはできますか(「system()」など)?それは安全な解決策です - それを回避する方法はありません(ハック)? –

+1

@ GrzegorzWierzowieckiプリプロセッサは、コンパイラの前にコードを手に入れ、キーワードを知らないので、変更することができます。コード内の単純な '#undef asm'がそれを行うことができます。しかし、それは簡単に見つけることができます。 – Alnitak

+0

私は[国際難読化されたCコードコンテスト](http://www.ioccc.org/)を見るたびに、「#undef asm」のようなものを難読化する方法がますます増えていることがますます懸念されています。 –

関連する問題