問題タブ [dlltool]

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.

0 投票する
1 に答える
619 参照

x86 - Windows で GHC エラー「不明な PEi386 セクション名 `.idata$4'」を解決するには?

最近、Windows で HDBC-postgresql をコンパイルするために書いた手順が、Haskell Platform 2012.2.0.0 では機能しないことがわかりました。ライブラリは正常にビルドされますが、ビルドされたライブラリをリンクしようとすると、次のcabalエラーで失敗します。

で作り直しlibpq.aましdlltool --no-idata4 --no-idata5たが、エラーメッセージが に変わりましたUnknown PEi386 section name `.idata$7'

これはGHC バグ 7103のようです。

PE および COFF 仕様によると、ドル記号はセクション名に含まれる場合に特別な意味を持ち、「グループ化されたセクション」を示します。リンカは、「$」とそれに続くすべての文字を破棄して、マージされた.idataセクションを作成することになっています。「$」に続く文字は、マージされたセクションへの貢献の順序を決定するために使用されます。

dlltoolグループ化されたセクションを強制的に出力しないようにする方法はありますか?

あるいは、GNU アーカイブ (A ファイル) を取得し、グループ化されたすべてのセクションをマージして、マージされたインポート ライブラリ (implib) を出力する方法はありますか?

編集: Haskell Platform 2012.4.0.0 でも同じエラーが発生します。

EDIT2のソースコードをdlltool見た後、グループ化されたセクションを出力しないようにする方法はないようです。また、オブジェクト ファイル内のグループ化されたセクションをマージする既製のユーティリティも見つかりませんでした。

報奨金とこの質問のために、次のように変更します:.idataモジュール定義 (DEF) ファイルを指定して単一のセクションを作成する方法。

0 投票する
0 に答える
560 参照

dll - DLL ファイルの関数の引数と戻り値の型を取得するには?

引数と戻り値の型を含む DLL ファイルのエクスポート関数リストを取得するにはどうすればよいですか? DLL がどの言語でビルドされているかわかりません。DLL に関するすべてのツールを試しましたが、引数と戻り値の型を含む特定のリストを提供するツールはありません。

0 投票する
1 に答える
371 参照

dll - dlltool --add-indirect (-a) に関する情報の検索

dlltool の --add-indirect オプションに関する詳細情報を探しています。このオプションはいつ使用しますか? それは何をするためのものか?

このオプションに関する binutils ヘルプからの情報:

がエクスポート ファイルを作成するときにdlltool、エクスポートされた関数をインポート ライブラリを使用せずに参照できるようにするセクションを追加する必要があることを指定します。それが何を意味するにせよ!

0 投票する
1 に答える
2155 参照

c - MinGW dlltool は空のファイルを作成します

GCCにリンクするために、MinGW dlltoolを使用して静的ライブラリを構築しようとしています。私が持っているのはDLLファイルだけです。*.def ファイルを作成しましたが、*.a ファイルを作成しようとしています。ただし、MinGW dlltool に強制的にアンチヒンディングを作成させることはできません。空のファイルしか作成されません。コンソール出力は次のとおりです。

どうしたの?静的ライブラリ ファイルを作成するにはどうすればよいですか?

0 投票する
0 に答える
1099 参照

c++ - MinGW(-w64) で遅延インポート dll エラー (dll またはシンボルが見つからない) をキャッチする方法は?

これを使用dlltool -yすると、既存の .dll または .def ファイルの遅延インポート ライブラリを作成できます。これは、対応する dll を持たないシステムで dll が必要になるまで問題なく動作するようです (遅延インポート/ロードされた dll で予想されるように)。ただし、遅延ロード中に生成されたエラー (モジュールの欠落または関数の欠落) をキャッチする方法に関する情報は見つかりませんでした。

MSVC では__try {} __except (...) {}SEH 例外処理を使用しますが、これは MinGW では使用できません (また、dlltool が使用する例外メカニズムの種類もわかりません)。

通常try {} catch(...) {}も機能しません (例外処理を行わない場合と同じようにアプリケーションがクラッシュします)。

GDB の出力も特に役に立ちません。

RaiseException で不明な例外が発生するということは、私が間違っていなければ、SEH 例外を示しているように思われます。

したがって、質問は、MinGW-w64 で遅延読み込みを正常に処理した人はいますか?

編集:少し実験した後、次の解決策を思いつきました:

ただし、このコードの動作が適切に定義されているかどうかはわかりません (結局、ハンドラーから飛び出しています)。また、特にきれいに見えません。

編集2 :別のアプローチを試しましたが、設定__pfnDliFailureHook2:

0x20474343例外が適切に伝達されず、 SEH 例外が発生するため、このアプローチは失敗します。修正する必要がある関連する GCC バグがあるようですが、少なくとも MinGW-w64 g++ 4.9.2 を使用すると、これはまだ失敗します (利用可能な最新バージョンです)。

0 投票する
1 に答える
572 参照

python - pexports dlltool def ファイルの構文エラー python27.def:0

libpythonX.a をビルドできません。

次のエラーdlltool.exe が表示されます: def ファイルの構文エラー python27.def:0

http://sebsauvage.net/python/mingw.htmlのセクション 2の手順に従っています。

私はMinGW32、python 32ビットを使用しています。

私が欠けているものについて何か考えがありますか?

0 投票する
1 に答える
885 参照

python - dlltool: .lib ファイルを作成できません: libpython27.a: 無効な bfd ターゲット

Windows 7 x64で 64 ビット バージョンのlibpython27.afromをビルドしようとしています。python27.dll

これらの指示に従って、私は試しました:

何が説明できますdlltool: Can't create .lib file: libpython27.a: Invalid bfd targetか?

dlltool のバージョン:

0 投票する
1 に答える
181 参照

windows - イメージ実行可能ファイル (dlltool) に正しく書き込まれた遅延読み込み関数バインディングを取得します。

次の例では、Windows で RPATH 機能が欠落している場合のバックエンドとして、遅延ロード (delayimp) パイプラインを調査しています。

GNU と LLVM は両方とも、"dlltool" を使用して同様に遅延ロードを実装します (ただし、LLVM の dlltool は "ld-link" に統合されたようです)。基本的に、LLVMlld/COFF/DLL.cppまたは BinUtilで実行されるタスクdlltool.cは 2 つあります。

  1. 遅延読み込み関数のジャンプ テーブル スタブを生成します (以下の例を参照)。
  2. __delayLoadHelper2 コードをデプロイするトランポリンを生成します (以下の例を参照)。

バインドが成功すると __delayLoadHelper2、解決された関数アドレスが実行可能コード セクションに書き込まれるように見えます。

実行可能なイメージを変更するために、Microsoft は、対応するメモリ領域に一時的に書き込み権限を追加するいくつかの凝った関数を開発しました。

問題は次のとおりです。変更するコードは、「.idata」セクションに入るジャンプ テーブル スタブ内にあり、書き込み権限を取得できません

そのため、現在、ハードバインディングは機能せず、「書き込みアクセス違反」が発生します。ここでどのようなバイナリ構成が欠落しているのか疑問に思っていますか?

私のテスト構成: github からの LLVM アップストリーム、git からの BinUtils アップストリーム、MSVC2019、Windows 7。