問題タブ [binutils]
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 - libopcodesから命令情報を取得する方法は?
libbfd
x86-32およびlibopcodes
x86-64Linuxで分解を実行するツールを作成しています。問題は、libopcodeを分解することはできますが、命令情報を取得できないことです。デモンストレーションの目的で、私は自分の問題を再現する最小限の例を作成しました。プログラムは、エントリポイントから最初のRET
/に自分自身を分解する必要がありRETQ
ます。
コードはグローバルで少しハックされており、簡潔さなどのためにエラーチェックは省略されていますが、問題を明確に説明する必要があります。
このソースは、次のコマンドで作成できますmakefile
。リンクを正常に実行するには、binutils-dev
パッケージをローカルマシンにインストールする必要があります。
実行すると、出力は次のようになります。
私が期待しているのは、、などを介して各命令の命令情報を読み取ることができることですdinfo->insn_type
。target
この動作は、x86-32とx86-64の両方で示されています。少なくとも、これがこれら2つのアーキテクチャに実装されていないことを確認できれば、自分でこの情報を入力することができます。
osx-lion - binutils をインストールする Macports
Lion に macports 経由で gnu ld をインストールしようとしています。Macports から gcc 4.6 をインストール済みです。ただし、ここに別の質問として投稿したバイナリファイルからelfバイナリを作成する必要があります
Macports から binutils をインストールしました。すべてうまくいったように見えますが、最後に次のメッセージが表示されました。
ここから binutils パッケージに含める必要があるツールのリストを見ると、 /opt/local/bin の通常の macports インストール場所でツールを見つけるのに苦労しています
誰が私が間違っているのかについて考えを持っていますか?
gcc - クロスコンパイラへの newlib の移植
このチュートリアルを使用してクロスコンパイラを作成しています。
gcc クロスコンパイラのチュートリアルに従い、newlib の移植に進みました。発行してコンパイルしようとするまで、すべてがうまくいきました
make all install
次のエラーが発生したとき:
コンパイルが停止します。
Ubuntu 11.10 を使用しています。
私が試してみました:
異なる gcc、binutils、および newlib バージョンを使用する (約 5 つの異なる組み合わせ)
Texinfoのインストール
makeinfo パスの修正
私のクロスコンパイラは、もちろんライブラリを含めることができないというだけで、newlib がなくても完全に動作します。
elf - ELF .notesセクションは本当に必要ですか?
Linuxでは、静的にリンクされたELFファイルを必要最低限のものに取り除こうとしています。私が走るとき:
また
結果のファイルには、ファンキーな文字列でいっぱいのように見える太い.notesセクションがまだあります。
.notesセクションは本当に必要ですか、それとも--remove-sectionで安全に強制的に削除できますか?
助けてくれてありがとう。
c - ELF .o または実行可能ファイル内の特定のシンボルに関する情報を取得するツールはありますか?
オブジェクト ファイル内の個々のシンボルを照会する便利な方法 (ビルド テスト スクリプトで使用するため) を探しています。「シンボル X はファイル Y に存在しますか?」という質問に (できれば終了ステータスによって) 答えられるツールはありますか? nm(1)
または、たとえば grep と適切な正規表現を使用して、の出力を解析する必要があるだけですか? そのようなツールがシンボルに関する詳細情報 (サイズ、タイプ、値など) を提供できれば、さらに良いでしょう。
macos - gccまたはbinutilsに新しいリンカーまたはアセンブラーを構築させることができないようです
私は完全に最近の最新のgcc環境をセットアップしようとしています...基本的にはgcc4.6.3とbinutils2.22です。Xcode4.2.1に付属しているかなり古いgcc4.2.1(llvm)ではありません。私の問題はコンパイルではありません(少なくとも今のところ)。binutils、gcc、および両方を同時に完全にコンパイルできます。ただし、コンパイルしようとするたびに、configureの出力の最後に次のようなものが表示されます。
ターゲットを見つける場所をチェックするar...コンパイルされ
たターゲットを見つける場所をチェックする...ホストツールターゲットを
見つける場所をチェックするcc...コンパイルされ
たターゲットc++を見つける場所をチェックする...コンパイルされた場所を
チェックするlibstdc++のターゲットc++を
見つけるために...ターゲットdlltoolを見つけるためにコンパイルされたチェック
...ターゲットgccを見つけるためにコンパイルされたチェック
...ターゲットgcjを見つけるためにコンパイルされた
チェック...ターゲットgfortranを見つけるために...ターゲットgccgoを見つける場所をチェックするコンパイルされた...ターゲットを見つける場所をチェック するホストツールld...
ターゲットlipoを見つける場所を チェックするホストツール...ホストツール
ターゲットnmを見つける場所をチェックする...ターゲットを見つける場所をチェック
するobjdump...ターゲットを見つける
場所をチェックするranlib...
ターゲットストリップを見つける場所をコンパイルする...コンパイルする場所を
チェックするターゲットwindresを見つけるために...ちょうどコンパイルさ
れたターゲットwindmcを見つける場所をチェックする...ちょうどコンパイルされた
この出力を取得するために、gccソースフォルダーにld、opcodes、bfd、gas、gprof、およびbinutilsのシンボリックリンクを作成しました...(それが役立つ場合)
ご覧のとおり、ほとんどのソフトウェアの「コンパイル済み」バージョンを入手できます。asとldをコンパイルする方法がわかりません。ldフォルダー(binutilsパッケージにある)のREADMEファイルを読みましたが、次のように実行されます。
すべてを作る-ld
私はそうします、そして私がすでにソースを「作った」ということで、それは私に何もすることが残っていないことを教えてくれます...
私が今考えることができる唯一のことは、ldを含まないようにパスを一時的に変更することです。これはかなり簡単でしょう...
別名クイックチェック
whereis ld
とにかく、これを考えた直後に私は、gcc(または新しいバージョンのld(もし私が仕事をするようになった場合))をリンクするものが何もないので愚かだと思いました
したがって、結論として、私はldの新しいコピーをコンパイルしようとしています...
事実:
- Mac OSXLionを実行しています。
- Mac OS X Lion(gcc 4.2.1)に付属しているデフォルトのgccを使用してgcc4.6.3をコンパイルしようとしています。
- configureスクリプトは、新しいリンカーとアセンブラーをコンパイルしたくないと考えているようです。
- 動作するgccとbinutilsを正常にビルドしましたが、新しいリンカーとアセンブラーはありません。
- --with-ld=yesおよび--with-gold=noオプションを指定してbinutilsとgccをコンパイルしようとしましたが、何も実行されなかったようです。
- gccv4.2.1を使用してgmpv5.0.4、mpfr v3.1.0、およびmpc v0.9をビルドし、gccおよびbinutilsの構成で使用されたものと同じプレフィックスでインストールしました。
- 構成ごとに、gmp、mpfr、およびmpcの場所を明示的に示しています。
- gccとは別にgmp、mpfr、mpcをビルドしました(そうすると、ビルドエラーが発生しました)。
- gcc、binutils、gmp、mpfr、およびmpcはすべて、ソースディレクトリのサブディレクトリではない別のディレクトリにビルドされます(gccのインストール手順で推奨されています)。
-
次のオプションを使用してgccをコンパイルしています
。../gcc
-4.6.3/configure--prefix = $ PREFIX --with-gmp = $ PREFIX --with-mpfr = $ PREFIX --with-mpc = $ PREFIX- -enable-checking = release --program-suffix =-4.6.3 --enable-ld = yes --enable-gold = no - 私は主にこのチュートリアルに従いました。
- コンピューターに他のコンパイラーがないため、ここで読んだmac os xのデフォルトのllvmコンパイラー(以前にgcc 4.2.1として説明したもの)を使用せざるを得ませんが、gcc-4.2はありません。私のコンピューターで。
- コンパイルしたばかりの新しいバージョンのgcc(gcc-4.6.3)を使用してgcc-4.7.0(最新のスナップショット)をコンパイルすると、コンパイラエラーが発生します(環境変数CCおよびCXXを設定しました)。
- 私はbinutilsよりも最初にgccをコンパイルしようとしましたが、その逆で、最終的にはbinutilsを使用してgccをビルドすることが道であると判断しました。上記の出力は、両方を同時にコンパイルしたものです。
- ゴールドに関するこの小さな投稿 を読み、-enable-goldと--enable-ldを追加してみました。彼らは何も変えなかった
-
私が物事をした順序:
- gmpをコンパイルします。
- インストールします。
- mpfrをコンパイルします。
- インストールします。
- mpcをコンパイルします。
- インストールします。
- ld、gas、binutils、opcodes、gprof、bfdのメインgccsrcディレクトリへのシンボリックリンクを作成します。
- gccを構成します。
- その「ステータスレポート」を見つけます。
- おそらくldとasを構築する別の方法を考えてください。
- それで失敗します。
- StackOverflowに進みます。
「fazo」が言ったように、私はbinutilsをどのようにコンパイルしたかについてはあまり誰にも話していません...だからここにあります...
私は最初にgccをコンパイルしようとしましたが、gccを使用してbinutilsをビルドするよりも、正常にコンパイルされましたが、ld、as、またはgoldさえもありませんでした。次に、llvmコンパイラを使用してbinutilsをビルドしてからgccをビルドしてみました。それもうまく機能しましたが、それでもld、as、またはgoldはありませんでした。最後に、 binutilsのいくつかのアイテムにシンボリックリンクを作成でき、gccがそれらを検出してビルドすることをここで読みました...私はそうしました。そしてgccはそれらのほとんどを見つけました(ld、opcodes、bfd、gas、gprof、binutilsのシンボリックリンクをgccディレクトリに置く前に述べたように)ここでの私の実際の問題は、configureスクリプトに新しいアセンブラーとリンカーをコンパイルするように指示することです。また、私を困惑させるのは、binutils READMEフォルダーに、単なる./configure make make installがすべてのツールをビルドしてインストールすると言っていることです。私は、これが当てはまらない理由を理解しようとしています。
最終的なコマンドは次のようになります。../binutils-2.22/ configure --prefix = $ PREFIX --with-gmp = $ PREFIX --with-mpfr = $ PREFIX --with-mpc = $ PREFIX --program-接尾辞=-4.6.3--enable-ld--with-gnu-as --with-gnu-ld
それでも私はまだldもガスもありません。
どんな助けでも大歓迎です!(また、私が提供していない情報が必要な場合は、質問してください)
ありがとう... :)
c-preprocessor - autoconf で #define の値を指定する方法は?
SYSV386_COMPAT 0
マクロを定義して、いくつかの FPU オペコードを生成する方法を変更することにより、ロックを解除した動作で Gnu binutils を構築しようとしています。
ヘッダー ファイルにアクセスして値を手動で設定することは簡単ですが#define SYSV386_COMPAT 0
、コマンド ラインで同等の値を指定するには、configure スクリプトをどのように呼び出すのでしょうか。可能であれば、コマンドラインで何かを指定したいと思います (機能が推移的であり、ソースをハッキングする必要はないと思うからです)。そうは言っても、少なくとも FM の一部を読み取ろうとしましたが、 または に を挿入することはできませんAC_DEFINE(SYSV386_COMPAT, 0)
でしbinutils/configure.in
たgas/configure.in
。
c - 初期化された RAM を使用しているにもかかわらず、arm-none-eabi-size が .data セクションを 0 と報告するのはなぜですか?
ツールチェーン (Yagarto および codesourcery) のサイズ ユーティリティを使用したときに得られる結果に少し混乱しています。データ セクションで 0 バイトを使用していると報告されています。下記参照
コードでスタティック RAM 変数を使用し、0 以外の値に初期化していることはわかっています。
興味深いことに、リンクされているオブジェクト ファイルの一部にサイズ ツールを直接渡すと、.data セクションが報告されていることがわかります。
例:
.data セクションを作成するオブジェクト ファイルがゼロ以外の値を報告しているのに、elf ファイルが .data セクションに対して 0 を報告するのはなぜですか?
参考までに、私は AT91SAM7x256 Micro の組み込みソフトウェアに取り組んでいます
編集:
CFLAGS と LDFLAGS を追加する
編集#2:オブジェクトダンプから、.dataセクションにデータが割り当てられていることがはっきりとわかりますが、サイズユーティリティは何らかの理由でそれを取得していません objdump link
私が探しているのは、変数の1つが最適化されたかどうかを把握しようとしていないRAMの正確な使用量を取得することだけです。
編集 3: size ユーティリティが .data セクションに何かを見ていることを示す詳細情報
ruby - Ruby grepバイナリファイル?
私はこれまでこれを使用しています
もっと「ルビーのような」ものはありますか?
linux - 非ネイティブバイナリのライブラリ依存関係を一覧表示するにはどうすればよいですか?
ネイティブプラットフォーム用に開発する場合、lddを使用して、起動時にビルドするバイナリ実行可能ファイルがロードしようとするすべての共有ライブラリ(.soファイル)を一覧表示できます。しかし、クロスコンパイルするとき、同じ情報を取得する方法がわかりません。は、クロスコンパイル用に一緒に構築できる、のようなldd
通常のbinutilsユーティリティではありませんが、代わりに、ネイティブプラットフォームでのみ実行できる不可解なシェルスクリプトです。strip
ar
gcc
それで、クロスターゲットbinutilsツールを使用して、外部バイナリの動的にリンクされた依存関係のリストを取得する方法はありますか?