問題タブ [abi]
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.
linux - glibc: elf ファイルの OS ABI が無効です
ダウンロードしてコンパイルした glibc-2.13。malloc() を実行するサンプル C プログラムを実行しようとしたとき。次のエラーが表示されます
elf file OS ABI invalid
誰でもこの問題を解決するのに役立つポインタを渡してもらえますか.私のカーネルバージョンはlinux-2.6.35.9であることに注意してください.
c++ - プライベートメンバー変数を追加すると、C ++ ABIの互換性がどのように損なわれますか?
pimplイディオムは、ABIの互換性を損なうことなく、またライブラリに依存するすべてのコードを再コンパイルすることなく、ダイナミックリンクライブラリのコードを変更できるようにするために一般的に使用されます。
私が見る説明のほとんどは、新しいプライベートメンバー変数を追加すると、クラス内のパブリックメンバーとプライベートメンバーのオフセットが変更されることを示しています。それは私には理にかなっています。私が理解していないのは、実際にはこれが依存ライブラリを実際にどのように破壊するかということです。
ELFファイルと動的リンクが実際にどのように機能するかについて多くのことを読みましたが、共有ライブラリのクラスサイズを変更すると問題が発生することはまだわかりません。
Interface::some_method
たとえば、テスト共有ライブラリ(libInterface.so)のコード()を使用するテストアプリケーション(a.out)を次に示します。
some_method
手続き型リンケージテーブル(PLT)を使用するための呼び出し:
その後、アドレス0x804a01cが含まれているグローバルオフセットテーブル(GOT)に移動します。
そして、これはダイナミックリンカが魔法をかけ、LD_LIBRARY_PATHの共有ライブラリに含まれるすべてのシンボルInterface::some_method
を調べ、libInterface.soで見つけ、そのコードをGOTにロードする場所です。その後の呼び出しsome_method
で、GOTのコードは実際には共有ライブラリのコードセグメント。
またはそれらの線に沿った何か。
しかし、上記のことを考えると、共有ライブラリのクラスサイズまたはそのメソッドオフセットがここでどのように機能するのかはまだわかりません。私の知る限り、上記の手順はクラスのサイズに依存しません。ライブラリ内のメソッドのシンボル名のみがa.outに含まれているようです。クラスサイズの変更は、リンカーがコードをGOTにロードするときに、実行時に解決する必要があります。
ここで何が欠けていますか?
linux - ホストと同じアーキテクチャ上の 2.4.x カーネルを対象とする最新 (4.x) GCC をビルドしますか?
質問は比較的簡単です。コンパイラのホストと同じアーキテクチャで 2.4 ABI をターゲットとする 4.x シリーズの GCC を (binutils やその仲間と共に) 構築するにはどうすればよいでしょうか?
ホスト システムは x86 または x86_64 で、唯一の要件は、ABI が一致する限り、ビルドされた ELF ファイルが古いカーネルで実行されることです。(カーネルソース/ヘッダーが存在します)
リンクするには、互換性のある libc も必要です。ただし、(g)libc のバージョンを知っているので、動的にリンクすることもできます。
どんなポインタでも大歓迎です。私はcrosstool-ngにある程度精通していますが、2.4 カーネルをサポートしていないようです (明らかな理由により)。
linux-kernel - LinuxカーネルのARMレジスタr9
「ARMアーキテクチャ手順呼び出し標準」(AAPCS / EABI)は、(5.1.1)と述べています。
しかし
問題は、Linuxカーネルが特別な目的でr9を使用するかどうかです。それとも通常の不揮発性レジスタとして使用されていますか?
c++ - Gcc x64 関数呼び出し
私の知る限り、x64
コードMicrosoft x64
には と の 2 つの呼び出し規則が考えられAMD64
ます。
これでgcc
、パラメーターを使用して起動できますが、呼び出し規約-mregparm=0
を使用している場合は機能しません。これは、規約で最初の 6 つの変数にレジスタを使用することが義務付けられているために発生します(これが行われる理由はよくわかりませんが、セキュリティの問題がスタックする可能性があるため実装されていると思われます)。AMD64
AMD64
それで、ここに質問があります:
規約の下で使用してコンパイルするときに、このようないくつかの厳密な規則(レジスタの使用を強制する)はありますか? はいの場合、互換性を壊さずにバイパスするにはどうすればよいですか?gcc
Microsoft x64
ABI
macos - Mac OS X で GNU Assembler のみを使用してプレーン バイナリ ファイルを生成することは可能ですか?
x86 用のアセンブリ コードを書き、Mac の既定のアセンブラ (「as」) を使用してプレーン バイナリ ファイル (Mach-O ではない) にアセンブルしたいと考えました。いくつかのグーグルと試行の後、私は失敗しました。
NASM (オプション: -f binary を使用) でそれを行う方法は知っていますが、そうしたくありません。私のコードは で書かれていて、AT&T の構文に慣れていたからです。
arm - ARM ABI と EABI の目的は何ですか?
この PDF ( Application Binary Interface for the ARM Architecture: The Base Standard ) を見れば見るほど、その意味がわかりません。また、 Procedure Call Standard for the ARM ArchitectureとELF for the ARM Architectureについてコメントをお願いします。
iphone - ABIリファレンスはclangでエラー「未定義シンボル」をリンクするために終了しますが、GCCはリンクできますか?
ライブラリを iPhone プロジェクトに統合したいと考えています。ライブラリ ソースは、.a を LLVM-GCC でビルドする makefile を提供します。アプリのビルドには clang を使用します。
自分のソースを.aにリンクするxcodeでアプリケーションをビルドすると、LLVM-GCCはプロジェクトのビルドとリンクに成功しますが、clangは次のエラーでリンク中に失敗します:
アーキテクチャ armv7 の未定義シンボル: "___aeabi_idiv"
ld: アーキテクチャ armv7 のシンボルが見つかりませんでした。
問題の原因を知っている人はいますか? clang に関連する ABI は ARM 部門を実装しておらず、GCC は別の ABI を使用してそれを実装していると思います。
私はまだ低レベルの最適化コンパイルの経験がないので、この問題を理解するのを手伝ってくれる人はいますか?
これを修正して clang でアプリをビルドするにはどうすればよいですか?
c - X86上のCまたはC++でのジェネリックARM環境のプログラミング
ARMの世界で旅を始めるためのソリューションを探しています。メイン言語としてCを使用し、この環境の標準I/Oライブラリを使用して基本的なプログラムを作成したいと思います。
また、X86ベースのPCで動作するエミュレーターなどはありますか?Debian for ARMのようなこの種のエミュレータでいくつかのオペレーティングシステムを試すことができますか?
ありがとう。