我在Mac OS X上构建了一个动态库,一个.dylib文件,编译得很好。 为了使用.dylib运行应用程序,名为fips_premain.c的文件中的某些函数在'main'之前运行,以检查指纹是否正确嵌入.dylib中。在静态库的情况下,所有人必须做的是在静态库上运行名为incore_macho的可执行文件,指纹将检出。在动态库的情况下,当我使用以下输出获取xcode在dylib上运行incore_macho时,我得到了失败:
/User/.../Debug/libcompute-osx.dylib is not a mach-o executable file (filetype 6 should be 2)
有什么想法吗?
答案 0 :(得分:0)
incore-macho只能在类型2文件上运行(即MH_EXECUTE,换句话说,可执行文件)。类型6是MH_DYLIB(您正在检查的动态库)。这就是错误信息所说的内容。根据它,它不适合dylibs。
答案 1 :(得分:0)
在静态库的情况下,所有人都必须在静态库上运行名为incore_macho的可执行文件,指纹将会检出。
这不完全正确。您无法将FIPS指纹嵌入到静态库中,因为代码和数据将在最终链接到可执行文件期间重定位。您可以在可执行程序或共享对象中嵌入指纹,因为它们已经执行了最终链接。
在动态库的情况下,当我获得xcode以使用以下输出在dylib上运行incore_macho时,我得到了失败
OpenSSL Foundation已经解决了这个问题。这是允许更多地使用dylib所需的更改。修改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
。
或者,从Github下载更新后的incore_macho.c
。他们更新incore_macho.c
还包括对ARMv7的支持。