1

Mac OS X で動的ライブラリ (.dylib ファイル) を作成しましたが、これは正常にコンパイルされます。.dylib を使用してアプリケーションを実行するには、「main」の前に fips_premain.c という名前のファイル内のいくつかの関数を実行して、フィンガープリントが .dylib に正しく埋め込まれているかどうかを確認します。静的ライブラリの場合は、静的ライブラリで incore_macho という名前の実行可能ファイルを実行するだけで、フィンガープリントがチェックアウトされます。動的ライブラリの場合、xcode を取得して dylib で incore_macho を実行すると、次の出力で失敗します。

/User/.../Debug/libcompute-osx.dylib is not a mach-o executable file (filetype 6 should be 2)

何かご意見は?

4

2 に答える 2

0

incore-macho は、タイプ 2 のファイル (つまり、 からの MH_EXECUTE、つまり実行可能ファイル) でのみ実行されます。タイプ 6 は MH_DYLIB (チェックしている動的ライブラリー) です。それがエラーメッセージが言っていることです。それによると、それはdylibには適していません。

于 2013-06-12T06:50:53.130 に答える
0

静的ライブラリの場合は、静的ライブラリで incore_macho という名前の実行可能ファイルを実行するだけで、フィンガープリントがチェックアウトされます。

これは厳密には正しくありません。実行可能ファイルへの最終的なリンク中にコードとデータが再配置されるため、FIPS フィンガープリントを静的ライブラリに埋め込むことはできません。最終的なリンクが実行されているため、実行可能プログラムまたは共有オブジェクトにフィンガープリントを埋め込むことができます。


動的ライブラリの場合、xcode を取得して dylib で incore_macho を実行すると、次の出力で失敗します。

OpenSSL Foundation には、これに対する修正があります。dylib の incore を許可するために必要な変更は次のとおりです。次のように変更incore_macho.cします。

530行目あたり:

else if( !(header->filetype == MH_EXECUTE || header->filetype == MH_DYLIB) )
{
    fprintf(stderr, "%s is not a mach-o executable file "
        "(filetype %d, should be MH_EXECUTE or MH_DYLIB)\n",
        inFile->filename, header->filetype);
    return -1;
}

690行目あたり:

else if( !(header->filetype == MH_EXECUTE || header->filetype == MH_DYLIB) )
{
    fprintf(stderr, "%s is not a mach-o executable file "
        "(filetype %d should be MH_EXECUTE or MH_DYLIB)\n",
        inFile->filename, header->filetype );
}

それだけです... のテストが見つかった場合はMH_EXECUTE、 も許可しMH_DYLIBます。

または、更新版incore_macho.cGithubからダウンロードします。彼らが更新incore_macho.cしたものには、ARMv7 のサポートも含まれています。

于 2014-01-28T02:38:49.153 に答える