GNU/Linux >> Linux の 問題 >  >> Linux

独立した実行可能ファイルと Android を配置する

<ブロック引用>

PIE について何も知りません。位置に依存しない実行可能ファイルの作成方法を教えてください。

Position Independent Executable または PIE を使用すると、プログラムを共有オブジェクトのように再配置できます。プログラムを実行するたびに、攻撃者が特定のプログラムの状態を推測するのを困難にするために、プログラムを異なるアドレスにロードすることができます。

PIE 実行可能ファイルは、2 つの方法のいずれかでコンパイルおよびリンクできます。まず、すべてを -fPIE でコンパイルします -pie でリンク . 2 つ目は、すべてを -fPIC でコンパイルすることです。 -pie でリンク .

共有オブジェクトとプログラムの両方をビルドする場合は、すべてを -fPIC でコンパイルします .共有オブジェクトを -shared にリンクします 、プログラムを -pie でリンクします .

他の方法ではできません。つまり、すべてを -fPIE でコンパイルすることはできません。 共有オブジェクトとプログラムの両方を構築します。詳細については、GCC マニュアルのコード生成オプションを参照してください。

Android で注意すべきことの 1 つは、4.1 より前の PIE でビルドすると、/system/bin/linker でセグメンテーション エラーが発生することです。 . PIE は Android 4.1 で追加され、それより古いバージョンをクラッシュさせます。

問題を回避するためにカスタム リンク/ローダーを提供するよう誰かに言われましたが、現時点ではリファレンスが見つかりません。

Android 1.5 から 4.1 のセキュリティ強化も参照してください。

<ブロック引用>

エラー:位置に依存しない実行可能ファイル (PIE) のみがサポートされています

はい、ロリポップの機能です。 Android 5.0 のセキュリティ強化を参照してください。

readelf を使用して、プログラムが PIE でビルドされているかどうかを確認できます。 :

$ readelf -l my-prog | grep -i "file type"
Elf filetype is DYN (shared object file)

重要な部分は readelf です DYN を報告しています 、報告しない EXE . EXE PIE がないことを意味し、セキュリティ関連の欠陥を引き起こすはずです。

関連して、Android 4.0 (ICS) でサポートされている主要な実行可能ファイルの PIE (位置に依存しない実行可能ファイル) を参照してください。


私はこれが古いトピックであることを知っていますが、このハックな方法は一部の人々の時間を節約するかもしれません
Hex-Editor を使用して、17 番目のバイトを見つけ、値 02 を 03 に変更します。それだけです!


Linux
  1. Bashでプログラミングする方法:構文とツール

  2. UbuntuでCプログラムをコンパイルして実行する方法

  3. SystemdとTerminalの起動プログラムの違いは?

  1. プログラムのGUIフロントエンドとCLI機能を分離しておく?

  2. プログラムがデッドロック状態にあることを検出して見つける方法は?

  3. Androidエミュレーターの起動に失敗しました:プログラムを実行できません

  1. SoftHSMをインストールし、Javaプログラムを介してアクセスします

  2. キャラクタードライバを開いて待つだけのシェルプログラム?

  3. 個々のプログラムを編集して再コンパイルしますか?