問題タブ [object-files]
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.
c - Microsoft Visual Studio 2003 コンパイラ出力の逆アセンブル
Microsoft Visual Studio 2003 ツールによって出力されたオブジェクト ファイルから奇妙な動作と思われるものを見ています。file
ユーティリティは私に教えてくれます:
アセンブラーによって作成されたオブジェクトの場合、ただし C ファイルからのオブジェクトの場合は、次のようになります。
Microsoft のdumpbin
ユーティリティとobjdump
cygwin から取得した を使用して、アセンブリでビルドされたファイルを逆アセンブルできますが、C でビルドされたファイルについては、どちらのユーティリティからも有用な結果が得られません。
この違いに関連していくつか質問があります。
- MSVC2003 コンパイラによって生成されるオブジェクト ファイルの形式は何ですか?
- そのオブジェクト ファイルを逆アセンブルするにはどうすればよいですか?
AT&T 構文で逆アセンブリを取得することに特に関心があります。GCC で動作するように大規模なソース ベースの移植を行っています。事業。
編集:さらに情報を追加します。
これらのファイルのいずれかで実行するdumpbin
と、結果が得られません。
を使用objdump
すると、次のようになります。
アセンブリからビルドされたファイルでは、妥当な結果が得られます。
再編集: コマンド ライン情報を追加します。
アセンブリ ファイルは、次のようなコマンド ラインでビルドされます。
ml
単独で実行すると、次のように表示されます。
C ファイルは、次のコマンドでビルドされます。
と に渡される-I
とオプションがいくつかありますが、ここでは簡潔にするためにそれらを省略しました。オプションについては、こちらで説明しています。 -D
ml
cl
cl
c - 実行可能で再配置可能なオブジェクトファイルの疑い
簡単なHelloWorldプログラムを作成しました。
再配置可能オブジェクトファイルと実行可能ファイルがどのように見えるかを理解したかったのです。main関数に対応するオブジェクトファイルは
ここで、printfの関数呼び出しはcallq 13です。私が理解していないことの1つは、なぜそれが13なのかということです。つまり、アドレス13で関数を呼び出すということです。13次の指示がありますよね?? これはどういう意味ですか?
mainに対応する実行可能コードは
これがcallq4003c0です。ただし、バイナリ命令はe8 e1 feffffです。4003c0に対応するものはありません。私が間違っているのは何ですか?
ありがとう。バラ
c++ - .o ファイルを .exe に変換
.c ソース コードから作成されたオブジェクト ファイル .o を .exe に変換することはできますか? 可能であれば、gcc を使用した直接コマンドはありますか?
gcc - 2 つの GCC コンパイル済み .o オブジェクト ファイルを 3 つ目の .o ファイルに結合
2 つの GCC コンパイル済み .o オブジェクト ファイルを 3 つ目の .o ファイルに結合するにはどうすればよいですか?
ソース ファイルにアクセスできる場合、-combine
GCC フラグはコンパイル前にソース ファイルをマージします。
.o
ただし、これはソース ファイルに対してのみ機能し、GCC はこのコマンドの入力としてファイルを受け入れません。
通常、.o
リンカーの出力を入力として使用できないため、ファイルのリンクは正しく機能しません。結果は共有ライブラリであり、結果の実行可能ファイルに静的にリンクされません。
c++ - C++ プログラムのコンパイルを理解するのに助けが必要
C++ プログラムのコンパイルとリンクがよくわかりません。C++ プログラムをコンパイルして生成されたオブジェクト ファイルを (わかりやすい形式で) 見る方法はありますか。これは、オブジェクト ファイルの形式、C++ クラスのコンパイル方法、コンパイラがオブジェクト ファイルを生成するために必要な情報を理解し、次のようなステートメントを理解するのに役立ちます。
クラスが入力パラメーターと戻り値の型としてのみ使用される場合、クラス ヘッダー ファイル全体を含める必要はありません。前方宣言で十分ですが、派生クラスが基本クラスから派生する場合は、基本クラスの定義を含むファイルを含める必要があります (「Exceptional C++」から取得)。
オブジェクトファイルのフォーマットを理解するために「Linking and Loading」という本を読んでいますが、C++ ソースコード用に特別に調整されたものを好むでしょう。
ありがとう、
ジャグラティ
編集:
nm を使用すると、オブジェクト ファイルに存在するシンボルを確認できることはわかっていますが、オブジェクト ファイルについてもっと知りたいと思っています。
c++ - コンパイルするオブジェクト ファイルを自動的に選択する
最近、C++ プロジェクトの単体テスト ( GoogleTestを使用) の作成を開始しました。メイン プロジェクトのビルドは非常に簡単です。GCC-MM
と-MD
フラグを使用してオブジェクト ファイルの依存関係を自動的に生成し、すべてのオブジェクト ファイルをリンクして出力実行可能ファイルを作成します。驚きはありません。
しかし、単体テストを書いているときに、各テストをコンパイルするために必要なオブジェクト ファイルを make または GCC に判断させる方法はありますか? 現在、私はかなり素朴な解決策 (それと呼べるなら) を持っています。これは、すべての単体テストのために利用可能なすべてのオブジェクト ファイルをまとめてコンパイルするもので、明らかに (時間とスペースの両方の点で) 無駄です。元のソース ファイルの依存関係を生成する方法と同様の方法で、特定の単体テストに必要なオブジェクト ファイルを特定する方法 (make、gcc、sed、またはその他のものを使用) はありますか?
qt - Qt / qmakeを使用するときに、生成されたファイル(オブジェクトファイルなど)を別のフォルダーに配置するにはどうすればよいですか?
qmakeを使用するQtプロジェクトがあります。明瞭さと読みやすさを向上させるために、私は
- ソースファイル
- ビルドシステム
- 生成されたファイル(オブジェクトファイルなど)
分ける。
したがって、私の最初のステップは、ソースファイルをsrc/サブディレクトリに配置することでした。
このようにして、ビルドシステム(* .pro)からソースファイルを分離しました。ただし、その後を実行qmake
するmake
と、生成されたファイル(オブジェクトファイルなど)がメインプロジェクトフォルダーに配置されます。
少なくとも、それらはsrc/
フォルダーに入れられませんでしたが、どのように指定すれば、それらが次のような別のサブフォルダーに入れられるようになりbuild/
ますか?
(ところで、ターゲットバイナリがどこに配置されるかは気にしませんが、ターゲットバイナリmyproject
を配置するのではなく、プロジェクトフォルダに直接配置する必要があると思いますbuild/
。)
assembly - オブジェクトファイルの構造
アセンブリのリンクに問題があります。アセンブリにNASMを使用し、それをldとリンクします。マイナーな問題の1つは、GLOBALディレクティブが機能するのは、.dataセクションを定義した場合のみであるということです。(coffを使用することにしました。これは、-cオプションを指定してg ++から出力されたものと最も類似した形式であったためです)。主な問題は、リンクした後でも、呼び出しが何らかのアドレスにつながり、関数がそこにないことです。あなたの時間を読んでくれてありがとう、そしてあなたがいくつかのアドバイスや多分キーワードを持っていたら、私はリンクとシンボルについて何かを得るためにグーグルするべきです、それは完全に素晴らしいでしょう。
c++ - 静的ライブラリの内容
私は静的ライブラリを持っていますmystaticlib.a
. その中のオブジェクトファイルの数など、その内容を見たいです。
gccでこれを行うにはどうすればよいですか?
debugging - C ++ CLI .objファイルの読み方(単一ファイルのコンパイル結果)
VisualStudio2010のC++CLIプロジェクトに小さな(<300行)C++ファイルがあります。デバッグ/リリース構成に応じて異なる処理を行うマクロをいくつか作成しました。
結果の.objファイル(デバッグとリリースでコンパイルする場合)を確認し、2つを比較できるようにしたいと思います。難しいのは、ファイルがバイナリであり、その形式がわからないことです。
マクロが破壊的でないことを確認する他の方法があると確信しています。たとえば、実行時に両方のモードで試してみてください。ただし、これにははるかに時間がかかります。さらに、それらの.objがそれらに何を持っているかを学ぶのはクールでしょう。
ありがとうございます。ご不明な点がありましたらお知らせください。