6

これは奇妙な質問で、検索しましたが、満足のいく答えは見つかりませんでした。

コンパイルされたtclファイル、つまり.tbcファイルがあります。したがって、この.tbcファイルをファイルに戻す方法はあり.tclますか。

私はここを読み、誰かが言及し、これを使用してファイル::tcl_traceCompileを分解できると述べました。.tbcしかし、初心者のtclユーザーである私は、これが可能かどうか、またはもっと言えば、それをどのように正確に使用するかがわかりません。

tclコンパイラがすべてのステートメントをコンパイルするわけではないことは知っていますが、これらのステートメントはファイルで簡単に確認できますが、ファイルから.tbc全体を取り戻すことはできます。tcl.tbc

どんなコメントでも素晴らしいでしょう。

4

2 に答える 2

5

いいえ、または少なくとも多くの作業がなければそうではありません。防止するためにかなりの労力が費やされたことを行っています (TBC 形式は、商用コードを詮索好きな目から保護することを目的としています)。


TBC ファイル形式は、通常はまったく保存されない Tcl のバイトコードのエンコーディングです。TBCはT cl Byte Codeの略です。TBC 形式のデータは、商用の「Tcl コンパイラ」という 1 つのツールによってのみ生成されます (元は Sun または Scriptics によって作成されました。このツールは移行の頃から存在します)。すべての Tcl システムには、いくつかのシリアル化コードが含まれています。また、元のソース コードを可能な限り削除します。使用されるエンコーディングは不快です。可能であれば独自のローダーを作成することは避け、代わりに拡張機能を使用して作業を行います。tbcload

次に、ロードされたコードをコマンドで逆アセンブルできるように、いくつかの防御チェックを無効にする Tcl のカスタム ビルドで使用する必要がありますtcl::unsupported::disassemble(コマンドは通常、から来るものを分解することを拒否しますtbcload)。このコマンドは、Tcl 8.5 以降に存在します。その後、コードが何を行っているかをバイトコードからつなぎ合わせる必要があります。それを行うためのツールはまったく知りませんが、バイトコードはほとんどがかなり高レベルであるため、小さなコードの場合はそれほど難しくありません.

のマニュアルページはありませんdisassemble。結局、正式にサポートされていません!ただし、私がリンクした wiki ページは、開始するために必要なほとんどのことをカバーしているはずです。

于 2013-01-31T22:34:26.507 に答える
0

部分的に「はい」と条件付きで言うこともできます。その条件は、元の tcl コードが名前空間に記述され、proc が名前空間の中かっこ内で定義されている場合です。次に、tkcon/wish で tbc ファイルをソースし、info procs と namespace コマンドを使用してコードを確認します。もちろん、名前空間名を知る必要があります。しかし、それも見つけることができます。

于 2015-11-19T09:14:53.083 に答える