問題タブ [objcopy]
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.
gnu - `objcopy` が efi-app ターゲットをサポートするようにするには?
次の makefile スニペットは、ファイルをファイルobjcopy
に変換するためのコマンド ライン オプションのようです。.so
.efi
基本的に、.so
ファイルから特定のセクションをefi-app
ターゲットに抽出します。
しかしobjcopy --info
、サポートされているすべての出力ファイル形式 (以下を参照) を表示するために使用すると、efi-app
タイプがありません。
では、出力形式をobjcopy
サポートするにはどうすればよいでしょうか。efi-app
追加 1
関連リンクを見つけました: https://forums.gentoo.org/viewtopic-p-7197314.html
Gentoo Linux ディストリビューションとgnu-efiプロジェクトを検討する必要があるようです。
リンクが壊れている場合に備えて、以下の引用を追加してください。
質問:
UEFI アプリケーションの作成方法を学ぶことに興味がありました。gnu-efi ebuild をインストールしたところ、readme で objcopy が efi-app-x86_64 をサポートする必要があることがわかりました。objcopy --help を実行すると、efi-app-x86_64 について言及されていません。multitarget useflag を追加しようとしましたが、うまくいきませんでした。efiをサポートするツールチェーンを入手する方法を誰かが知っているか、またはgentoo / Linuxを使用してefiアプリを構築することに関するgoosdチュートリアルがあるかどうか疑問に思っていました.
答え:
まず、Gentoo の GNU-EFI はバージョン 3.0i で、これは非常に古いものです (2009 年 9 月)。現在のバージョンは 3.0 ですが、私のテストではうまく動作しません (バイナリの実行に失敗します)。バージョン 3.0r は私にとっては問題なく動作するので、Sourceforge ページからダウンロードしてローカルにインストールしてみてください。FWIW、私は今年の 4 月にバージョン バンプを要求するバグ レポートを提出しましたが、このバグ レポートにはローカルの ebuild へのリンクが含まれていますが、正式なアクションは得られませんでした。
あなたの主な質問に関しては、私の objcopy もターゲットとして efi-app-x86_64 を示していませんが、動作します。サポートされているターゲットに対して得られるものは次のとおりです。
コード:
GNU-EFI を使用して rEFInd をコンパイルすると、make の出力に (他の多くのメッセージの中でも) 次のメッセージが表示されます。
コード:
これによりエラーは発生せず、実際、バイナリは正常に動作します。
つまり、問題が発生しない限り、心配する必要はありません。その場合は、詳細を投稿してください。
もう 1 点: GNU-EFI ではなく TianoCore EDK2 を使用して EFI アプリケーションをコンパイルすることが可能です。TianoCore は完全な EFI 実装であるため、EFI アプリケーションをコンパイルするだけではやり過ぎですが、十分に機能します。また、奇妙な (Linux 標準による) コンパイル プロセスもあり、Linux からインストールして使用するのは厄介です。新しい Shim セキュリティ ツールや gummiboot ブート ローダーなど、Linux ユーザー向けに開発されたほとんどの EFI プログラムは GNU-EFI を使用し、TianoCore ではコンパイルされません。OTOH、TianoCore は GNU-EFI よりもはるかに最新であり、TianoCore またはその前身の開発キット (EFI シェル プログラムなど) で開発されたものをコンパイルする場合に適しています。rEFInd などの一部のツールは、どちらの方法でもコンパイルできます。(rEFInd' ただし、BIOS/レガシー ブート ローダーを起動する機能は、TianoCore の機能に依存します。rEFInd を GNU-EFI でコンパイルすると、BIOS/レガシー ブート ローダーを起動できません。rEFInd の BUILDING.txt と Makefile を見て、より Linux/Unix に似た方法で TianoCore を使用する方法を学ぶことができます。最終的に、どのツールが最適かは、何をコンパイルするか (特定の既存のプログラムか、ゼロから作成する独自のプログラムか) によって異なります。新しいプログラムを作成している場合は、使用する EFI 機能を理解することが重要になる場合があります。どのツールが最適かは、何をコンパイルするか (特定の既存のプログラム、またはゼロから作成する独自のプログラム) によって異なります。新しいプログラムを作成している場合は、使用する EFI 機能を理解することが重要になる場合があります。どのツールが最適かは、何をコンパイルするか (特定の既存のプログラム、またはゼロから作成する独自のプログラム) によって異なります。新しいプログラムを作成している場合は、使用する EFI 機能を理解することが重要になる場合があります。
gcc - メモリにロードされるように、objcopy または libelf を使用して、elf ファイルのセクションを別のセクションに置き換える方法は?
ELF ファイルのセクションを削除し、内容を少し変更した別のセクションに置き換える必要があるプロジェクトがあります。最初に元のセクションを削除してから、objcopy を使用して目的のセクションを追加することができました。しかし、私は常に次の警告を受け取ります:
これにより、セクションがメモリにロードされず、目的の機能が実現されません。
それを追加してセグメントに戻す最良の方法は何ですか?
自由?または、objcopy を使用してこれを実現できますか?
assembly - リンカ スクリプトが期待どおりにバイトをスキップしない
このアセンブリ ファイルを GNU as でアセンブルし、リンカー スクリプトを使用して GNU ld とリンクします。
リンカー スクリプト ( boot.ld
):
ご覧のとおり、ブートローダーに必要なファイルを正確に 512 バイトにしようとしています. = 0x7cdfe
。.boot_end
ブート署名が含まれているため、残りの 2 バイトがいっぱいになります。
次のようにブートローダーを作成します。
boot.out
すでに絶対アドレスを持つセクションが含まれており、すべて問題ないようです。.boot_end
で0x7dfe
あり、穴がゼロで埋められることを期待していますが、いいえ、boot.img
合計で 55 バイトです。私にとって奇妙なことは、ファイルにブート署名さえ含まれていないことです。スキップされたバイトが.text
ない.data
だけです。.boot_end
これらのバイトをスキップするように ld を移動するにはどうすればよいですか? そして、私のブート署名はどこに消えたのですか?
vxworks - S0 レコード形式の SREC ファイルの削除
WindRiver の VxWorks 653 で実行される組み込みシステムに取り組んでいます。ターゲット デバイスに書き込むために、objcopy を使用して SREC に変換されたバイナリ ファイルをビルドした後。ただし、この SREC ファイルには、ビルドされたディレクトリの S0 レコードが含まれているため、同じコードを 2 つの異なるディレクトリに配置すると、異なる SREC ファイルで終了します。この S0 レコードの結果ファイルへの追加を手動操作なしでオフにすることはできますか?
linker - テキスト ファイルの内容を ELF ファイルのセクションとして追加するにはどうすればよいですか?
組み立ててリンクしているNASMアセンブリファイルがあります(Intel-64 Linux上)。
テキスト ファイルがあり、テキスト ファイルの内容を結果のバイナリに (基本的には文字列として) 表示する必要があります。バイナリは ELF 実行可能ファイルです。
私の計画は、ELF ファイルに新しい読み取り専用データ セクションを作成することです (従来のセクションと同等.rodata
)。
理想的には、elf ファイルの新しいセクションとしてファイルを逐語的に追加するツール、またはファイルを逐語的に含めるためのリンカー オプションがあります。
これは可能ですか?