問題タブ [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の名前マングリングスキームを再現する関数がPython標準ライブラリにありますか? ありそうな気もするけど一生見つからない。
私はこれを書きましたが、より良い方法があれば私はすべての耳です.
c# - 壊れた名前を取得するためにDumpBin.exeを使用する方法
こんにちは私は関数を再利用するためにC#アプリケーションにインポートするC++DLLを作成しました。C++の関数コードはstatic bool IsSomethingAttached(char *Arg1[])
C#プログラムで以下のようにDllImportを使用すると、[DllImport( "DllName")]EntryPointNotFound例外としてエラーが発生します。
使用しました
**DumpBin /symbols Dllname.dll**
壊れた名前を取得するため。
1)しかし、私はマングルされた名前を正確に取得する方法を知りません。/ exportsを使用する必要があると言っている投稿はほとんどありませんが、要約を表示するだけ/exports
でなく、/symbols
名前が壊れてしまいます。Plヘルプ
2)undname.exeを使用して、装飾されていない名前から装飾された名前を取得するにはどうすればよいですか?
c# - 例外-のエントリポイントdllに見つかりません
関数を再利用するためにC#アプリケーションにインポートするC++DLLを作成しました。C++の関数コードはstatic bool IsDisplayDeviceAttached(char *Arg1[])
C#プログラムで以下のようにDllImportを使用すると、
EntryPointNotFound例外としてエラーが発生します。上記と一緒に使用ExactSpelling = true
しましたが、すべてエラーになります。
1)誰かがコードの何がまだ間違っているのかをガイドできますか?
2)また、_CdeclおよびExactSpellingパラメーターなどを指定する理由(DllImportでそれらを記述する理由を理解したい)
c# - C# (Unity) にエクスポートされた C++ メンバー関数の名前マングリング
C++ の個々の関数で extern "C" を使用して名前マングリングを防ぐ方法は理解していますが、メンバー関数をエクスポートするときにそれを防ぐ方法はありますか?
WMIWrapper.cpp
WMIWrapper.h
これらの関数を Unity で使用する場合は、dll を逆コンパイルして、関数名の EntryPoints を確認する必要があります。私はこれをする必要はありません。
私はextern "C"で少し熱心になったことを知っています...
c++ - C++ での C ライブラリの無名構造体型の処理
多くのレガシー コードと、C で記述されたいくつかの外部ライブラリを含む、大きくて古い C++ アプリケーションがあります。これらのライブラリは、バグが見つかり、ベンダーがパッチを提供した場合にのみ更新されることはほとんどありません。これは先週 1 つのライブラリで発生し、新しいバージョンを統合すると、ライブラリをローカルで変更しないと (以前のバージョンで行ったようです)、ビルドが次のエラー メッセージで中断することがわかりました。
これは、ライブラリが次のような多数のハンドル タイプを宣言しているためです。
一部のクラスの関数シグネチャで使用します。
_Opaque 構造体には名前がないため、コンパイラは関数の適切な名前マングル名を作成できないため、上記のエラーが発生します。
これに対する現在の回避策は、構造体に明示的に名前を付けて、ライブラリ ヘッダー ファイルにパッチを適用することです。
可能であればライブラリに触れたくないので、これは明らかに悪いことです。もう1つのさらに悪いオプションはvoid*
、すべての関数シグネチャで型を変換し、それぞれの型にキャストし直すことです。そして、影響を受けるすべての関数を純粋な C で書き直すという最悪の選択肢があります...
だから、私の質問は次のとおりです。ライブラリにパッチを適用するよりも良いオプションはありますか? 私が見落としている簡単な解決策はありますか?これを解決する最善の方法は何ですか?
c++ - 例外を使用しようとすると名前マングリングが発生する [CodeBlocks、C++]
初めて例外を使用しようとしていますが、非常に単純な例ですが、コンパイルできないため、いくつかの例を見て、さまざまな方法でコーディングを試みましたが、まだ確信が持てませんキャッチ/トライ/スローを導入するとネームマングリングが発生するため、問題が正確にどこにあるのかとにかくここに私のコードがありますが、それは本当にばかげていることを願っています:)
助けてくれてありがとう!
編集:申し訳ありませんが、エラーメッセージを投稿するのを忘れました:それは
linker - C++ のシンボル – 非デバッグ ビルドでエクスポートされますか?
C++ はシンボル名をマングルします。名前はデバッグ時に使用できますが、バイナリが削除されていない場合に限ります。その他の使用シナリオは共有ライブラリです。シンボル名をエクスポートして、ライブラリで表示できます。
しかし、両方で:
a. むき出しのビルド、
b. かつ、通常の非共有ライブラリ ビルド
バイナリで使用できるシンボルはありませんか? たとえば、文字列ツールは記号を出力しませんか?
c++ - C/C++ での文字列マングリング
C/C++ で文字列マングリングを行う方法を探しています。ソフトウェアの要件は、プレーンテキスト文字列が存在しないことです (暗号化は必要なく、マングリングのみ)。この要件に対する抵抗が最も少ないパスを見つけようとしています。クラス名の難読化とマングリングは、比較的簡単に入手できるツールでカバーされていますが、文字列のマングリングは、ジャンプするのが難しいハードルのようです。
それが標準的な答えであれば、私はソフトウェアの後処理に満足しています。彼らのツールはすでにこれを行うために書かれていますか、それとも文字列を変更するために独自のスクリプトをハックする必要がありますか?
また、安静時の文字列のマングリングは真のセキュリティではないことも理解しています。私はそれを理解しています、そしてあなたはおそらくそれを理解していますが、それはソフトウェアに課せられた要件なので、私はそれを満たす必要があります.
ありがとう!ステフ
visual-c++ - MinGWでaudieredllを使用する方法
MinGWg++コンパイラでコンパイルされたwxWidgetsを使用してプロジェクトを構築しています。また、wxWidgetsプラットフォームのコンポーネントを使用してmp3サウンドクリップを再生していましたが、信頼性が低いため、別の解決策を探しました。私はaudiereを見つけ、彼らのWebサイトからバージョン1.9.4をダウンロードしました。パッケージには、*。libファイルと*.dllが含まれていました。これをプロジェクトに追加しようとしましたが、機能しません(ダウンロードしたパッケージがMSVCでコンパイルされているためだと思います)。
lib2aというツールを使用して*.defファイルを作成し、MSVClibからMinGWで使用できる.alibに変換しました。defファイルにはこれらの定義があります...
ライブラリー "audiere.dll" EXPORTS _AdrCreateLoopPointSource @ 4 _AdrCreateMemoryFile @ 8 _AdrCreatePinkNoise @ 0 _AdrCreateSampleBuffer @ 20 _AdrCreateSampleBufferFromSource @ 4 _AdrCreateSquareWave @ 8 _AdrCreateTone @ 8 _AdrCreateWhiteNoise @ 0 _AdrEnumerateCDDevices @ 0 _AdrGetSampleSize @ 4 _AdrGetSupportedAudioDevices @ 0 _AdrGetSupportedFileFormats @ 0 _AdrGetVersion @ 0 _AdrOpenCDDevice @ 4 _AdrOpenDevice @ 8 _AdrOpenFile @ 8 _AdrOpenMIDIDevice @ 4 _AdrOpenSampleSource @ 8 _AdrOpenSampleSourceFromFile @ 8 _AdrOpenSound @ 12 _AdrOpenSoundEffect @ 12
プロジェクトをリンクしようとすると、次のエラーが発生します。
* MinGWUnicodeRelease / AlphaPanel.o:AlphaPanel.cpp:(。text + 0x8291):
_imp__AdrOpenDevice@8' *** MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x82db): undefined reference to
imp _AdrOpenSampleSource@8'への未定義の参照* MinGWUnicodeRelease/ AlphaPanel.o:AlphaPanel.cpp:(。text + 0x830f):_imp__AdrOpenSound@12' *** MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x87ce): undefined reference to
imp_AdrOpenDevice @への未定義の参照8' * MinGWUnicodeRelease / AlphaPanel.o:AlphaPanel.cpp:(。text + 0x8818):_imp__AdrOpenSampleSource@8' *** MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x884c): undefined reference to
imp _AdrOpenSound@12'への未定義の参照
たとえば私のコードでは、関数は「OpenDevice」です...defファイルでは>「_AdrOpenDevice @ 8」ですが、未定義の参照リンクエラーでは「imp_AdrOpenDevice @8」です。だから私の頭は回転していて、この時点で何をすべきかわからない。
dllの名前マングリングの問題を修正する簡単な方法はありますか?
おそらく、バイナリエディタで編集して名前を「修正」し、これを既存のコードで機能させることができます(MinGWを使用して[可能であれば]再コンパイルしてdllを作成するためにaudiereコード全体をダウンロードすることはできません...避けたい可能であればこれ)...私の出発点は* .libファイルとMSVCで作成されたdllですが、MinGWで使用する必要があります。
誰かがこれを行う方法について何か手がかりがありますか?
c++ - CからのC++マングル関数の使用
私は.libファイルを持っていますが、そのソースコードは持っていません。
そこからエクスポートされた関数が必要ですが、Cで記述しており、関数はC++の名前修飾されています。extern "C"
ソースコードがないので書けません。
ソースコードなしでマングルされた関数をリンクし、C ++に切り替えるにはどうすればよいですか?