3

私のアプリケーションでは、OpenSSL を非常に控えめに使用しています。基本的に、私は次の2つのことを行っているだけです。

  1. RSA 復号化: RSA_new、BN_bin2bn で RSA キーを初期化し、RSA_private_decrypt で RSA 復号化を行い、キーを解放します。
  2. AES 復号化: EVP__DecryptInit( ... EVP_aes_128_cbc )、EVP_DecryptUpdate および EVP_DecryptFinal を使用します。

それで全部です。この非常に控えめな使用法にもかかわらず、実行可能なサイズは 1MB を超えており、約 1,200 の異なるシンボルが OpenSSL ライブラリから提供されています。これらには、 ASN1_ 、 SHA1_、 EC_* 、 PKCS7 など、明らかに私のコード ツリーにない関数が含まれます。

iPhone Android および Windows 用の OpenSSL のスタティック ライブラリとリンクしています。モバイル プラットフォームでは、フットプリントが問題になります。私のリンカーは参照されていない関数を除外することになっているため、これらのシンボルは何らかの形で参照されているようです。

実行可能ファイルのサイズを小さくするために、OpenSSL の断片を小さくする方法はありますか?

あなた。

4

1 に答える 1

0

直接的または間接的に参照されている OpenSSL インクルードのシンボル。リンカによって取り残されたものがある場合 (自動化されたツールであり、何かを見逃す可能性があるため)、次のことを試すことができます。

  1. 必要な機能だけで OpenSSL を構築します。

これにより、OpenSSL から使用している依存関係についてのアイデアが得られます。このためには、必要なトップレベル関数から始めます。必要な関数のリンカ エラーが表示されます。次に、それらの関数を含めます。数回繰り返した後、最小限の OpenSSL ライブラリが得られます。

これは、他の機能を使用する必要がある場合に深刻な問題を引き起こします。

また、特に実行可能サイズの最適化に関連するコンパイラ オプションを調べることもできます。

于 2013-04-28T14:47:39.397 に答える