2

私は現在、オンラインのC / C ++ /アセンブリコンパイラに取り組んでおり、libsandboxと呼ばれる素晴らしいソフトウェアに出くわしました。これにより、オンラインで記述されたコードを実行し、コンパイルして、システムコールが行われた場合にそれを傍受することができます。

まず第一に、私はLinux環境ではちょっと新しいです。tar.gzをダウンロードして解凍し、構成してインストールしました。これはエラーなしで実行されましたが、今は実行するのに苦労しています。このサンドボックスでC/C ++プログラムを実行するにはどうすればよいですか?.c / .cppファイルをフィードする必要がありますか?コンパイル後の実行可能ファイル?

それは非常に愚かな質問かもしれません。インターネットでその方法を検索し、含まれているreadmeファイルを読みましたが、手がかりが得られませんでした。

前もって感謝します!

4

3 に答える 3

4

サンドボックスは Linux 専用です。実際には、まずライブラリ関数を使用してサンドボックスを作成し、次にサンドボックスにプログラムを実行するように指示する必要があります。

この python サンプルは、python からそれを行う方法を示しています。「#targeted program」の行は、実際のアプリケーションの名前を指定する場所を示しています。

def main(args):
    # sandbox configuration
    cookbook = {
        'args': args[1:],               # targeted program
        'stdin': sys.stdin,             # input to targeted program
        'stdout': sys.stdout,           # output from targeted program
        'stderr': sys.stderr,           # error from targeted program
        'quota': dict(wallclock = 30000,# 30 sec
                      cpu = 2000,       #  2 sec
                      memory = 8388608, #  8 MB
                      disk = 1048576)}  #  1 MB

# create a sandbox instance and execute till end
msb = MiniSandbox(**cookbook)
msb.run()
# verbose statistics
sys.stderr.write("result: %(result)s\ncpu: %(cpu)dms\nmem: %(mem)dkB\n" % \
    msb.probe())
return os.EX_OK

libsandbox のダウンロード ページにアクセスしてそこにある完全な sample2.py ファイルを取得し、Python スクリプトを使用してサンドボックスを実行することをお勧めします。これは、C++ または C プログラムを作成して実行するよりも簡単です。

そう...

  1. C または C++ プログラムを作成します。LIBSANDBOX にリンクしないでください。

  2. python がインストールされていることを確認してください。

  3. libsandbox ページからサンプル Python スクリプトを実行します。

  4. Python スクリプトが libsandbox をロードします。次に、サンドボックス内で作成したプログラムを実行します。

単純。

于 2012-06-02T15:15:56.207 に答える
3

@ user1401452 からの回答に完全に同意します。libsandbox に関するその他のヒント

  1. 共有ライブラリのロードにはデフォルトで禁止されている SYS_open() などのシステム コールが含まれるため、サンドボックス化するバイナリ実行可能ファイルは静的にリンクする方が適切です。
  2. コア サンドボックス ライブラリ (つまり libsandbox) を直接呼び出す C/C++ プログラムを作成することも実行可能ですが、Pythonic ラッパー (つまり pysandbox) を使用するよりも少し複雑です。サンプル python スクリプトの ANSI C 版 (つまり、sample2.c) が libsandbox のホームページで入手できるようになりました。
  3. サンプル プログラムは、libsandbox のいくつかの重要な機能のみを示しています。通常、実用的なサンドボックス ソリューションには、より複雑なルールを使用してカスタマイズされたサンドボックス ポリシーが必要です。

免責事項:私はの著者ですlibsandbox

于 2012-06-09T00:10:13.880 に答える
1

簡潔で一般的な答えは次のとおりです: lib any を使用するは、そのライブラリを利用するプログラムを作成します。ソースに移動し、switch でリンクします。テストスイートまたはライブラリのサンプルプログラムでない限り、実行可能ファイルを見つけることは想定されていません。#include <anything.h>-lanything

何らかの理由で「libsandbox」を見つけることができなかったので、私の返信は非常に不正確かもしれません.

于 2012-06-02T12:28:00.123 に答える