問題タブ [name-mangling]
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.
python - python setattrまたはexecを使用してプライベートクラス変数を作成する方法は?
orを使用すると、疑似プライベート クラスのメンバー名がマングルされない状況に遭遇しました。setattrexec
私exec("self.__%s = %s" % (k, v))も同じ結果で試しました:
実行してself.__dict__["_%s__%s" % (self.__class__.__name__, k)] = vも機能__dict__しますが、読み取り専用属性です。
これらのpsuedo -private クラス メンバーを動的に作成する別の方法はありますか (名前マングリングでハードコーディングする必要はありません)。
私の質問を表現するより良い方法:
self.__x2 つのアンダースコア ( ) 属性が設定されている場合、python は「ボンネットの下」で何をしますか? マングリングを行うために使用される魔法の関数はありますか?
c - 名前のマングリングを防ぐことはできません
C で記述された dll を構築しようとしていますが、これは C で記述された他のプログラムによってインポートされます。
したがって、dll がエクスポートしているすべての関数は、「__declspec(dllexport) なしで」 (意図的に) .dll で定義されます。Export セクションと、エクスポートする関数の名前 (マングルされていない名前) だけを含む .def ファイルを定義しました。
これをビルドするために vc71/vs2003 を使用していますが、まだ名前が壊れています (メモ帳で .lib を開くとわかります)。また、明確にするために、Visual Studio は C コードでも名前マングリングを引き起こします (私が見つけたほとんどのリソースは、C++ のみの問題であると述べています)。
この名前のマングリングを防ぐにはどうすればよいですか?
さらに詳しい情報:
マングルされた名前は 'functionName@integer' の形式で、integer はパラメーター サイズをバイト単位で表します (序数ではありません)。例えば、
.lib から: _PrepareSeverResponse@8
.h の関数宣言: char* PrepareSeverResponse(unsigned int* size ,handshake* ws_handshake);
.def: エクスポート PrepareSeverResponse
呼び出し規約: __stdcall(/Gz)
これがより明確になることを願っています。
windows - 「__imp__ApiName@N」または「_ApiName@N」を使用する必要がありますか?
DUMPBINを使用してWindowsSDK.libファイル(kernel32.lib)をダンプしました。出力には、API名ごとに2つの「バージョン」があることが示されています。次に例を示します。
_ imp _ExitProcess @ 4
と
_ExitProcess @ 4
では、なぜ同じ名前のマングリングが2つあるのでしょうか。。NASMからExitProcessを呼び出したいとしましょう。これは、EXTERNを宣言するときに使用する必要がありますか?、miの練習では、それらのいずれかを呼び出すことができますが、どちらが「正しい」か「優先」かわかりません。それに固執する。
c++ - 装飾された名前から名前の装飾を解除するには?
Raymond Chen さんの投稿で、装飾された名前から関数の装飾されていない名前を知ることができるようです。彼がどうやってこれを行うことができるのか、私にはわかりません。
この飾られた名前には、
?GetName@PushButton@UILibrary@@UAEPB_WPAPAVStringHolder@2@@Z
各コンポーネントは何を意味しますか?
c++ - objdump は C++ テンプレート関数のマングル名をアンマングルできますか?
いくつかの C++ テンプレート関数のインスタンス化を含む C++ オブジェクト ファイルがあります。問題のオブジェクト ファイルは、テンプレート パラメーターのいくつかの異なる組み合わせに対して同じ関数をインスタンス化します。問題をデバッグしようとしていて、テンプレート関数の特定のインスタンス化の逆アセンブリを調べたい (つまり、調べたい関数のテンプレート パラメーターを知っている)。私は通常objdump、オブジェクト ファイルを逆アセンブルするためにこれを行いますが、(少なくとも既定では) C++ 関数名をデマングルすることはできません。これを行う方法はありますか?オブジェクト ファイルは、gcc 4.6.1 を使用して作成されました。
java - C ++の名前マングリング/デマングリング用のJavaライブラリ?
(この質問と同様:Python用のC ++名前マングリングライブラリ)
C++の分解で動作するJavaの静的分析ツールを試してみようとしています。「c++filt」があることは知っていますが、外部プログラムとのインターフェースを避けたいと思います。また、c ++ filtはデマングリングのみを実行しますが、マングリングとデマングリングの両方を実行したいと思います。
これに似たメソッドを持つJavaライブラリはありますか?
c++ - 既存のライブラリでの名前マングリング - 競合
静的にリンクされた C++ ライブラリを含む、コンパイル済みの C++ ツールが多数あります。私たちはいくつかのライブラリを拡張し、もちろんそれを再コンパイルしました -> 現在、新しい dll は古い C++ ツールと互換性がありません!
エラー:
TransceiveDataRaw@CCommonUtils@RegTestAPI@@QAEIPAEH0AAHPBD2@Z がダイナミック リンク ライブラリ IFX_CC_RegTestBase.dll に見つかりませんでした
ツールを再コンパイルせずにこの名前マングリングを無視する方法はありますか (何百ものツールがあります)。
c++ - CUDA ドライバー API と関数マングリング
C++11 を必要とするプロジェクトがあるため、ファイルを 2 つのカテゴリに分けます。C++11 を使用するファイルと、C++03 を使用するため nvcc コンパイラと互換性があるファイルです。テンプレート関数ではないカーネルがある場合、モジュールをロードして関数名を見つけるのは簡単cuModuleGetDataExです。ただし、カーネルがテンプレートの場合、関数名は明示的な特殊化の後にマングルされます。これにより、CUDA ドライバー API を使用してモジュールをロードした後、関数へのハンドルを取得することが困難になります。たとえば、この関数を考えてみましょう。
これを PTX コードにコンパイルした後、マングルされた名前は_Z10vector_addIfjEvPKT_S2_PS0_T0_. テンプレート カーネル関数をファイル内で手動で見つけて名前をコピーすることなく、ホスト コードから簡単に見つけて読み込むにはどうすればよいですか?
c++ - Linux での共有オブジェクト C インターフェイスでの名前マングリングの回避
Windows では、モジュール定義ファイル (.def) を使用してマングルされていない関数をエクスポートする C++ ライブラリへの C インターフェイス (extern "C" { // インターフェイス }) があります。
私は比較的経験の浅いLinuxで同じことを再現しようとしています。NIX システムでは、すべての関数がデフォルトでエクスポートされることを理解しています。これを念頭に置いて、共有オブジェクトを作成し、それを nm コマンドで実行しました。
Windows とは異なり、関数名が壊れていたことに驚きました。
どうすればこれを防ぐことができますか?