如何检查文件是否是DLL?

Pie*_*BdR 2 c++ linux macos dll file-type

给定一个文件,我想检查这是一个DLL,还是共享对象(Linux)或dylib(Mac OS X),或者是不同的东西.我的主要兴趣是区分Linux和Mac OS X上的可执行文件和DLL.对于Windows,扩展应该足以解决我的问题.

我已经检查过神奇数字技术对Linux不起作用,因为可执行文件和共享对象都具有相同的编号.

Car*_*icz 8

Unix(Linux和Mac OS X)命令file知道如何识别文件类型.

man file 告诉你用于执行此操作的"神奇"信息,特别是在找到包含该信息的文件的位置.

man 5 magic详细描述了该文件,还应该告诉您它的位置.你可以看看那里,从中拉出你需要的任何东西.和/或只是来自的来源的婴儿床代码file.

更新:
请注意,在Linux上,文件可以同时是可执行文件和共享库.
一个例子是/lib/libc.so.6(可以执行的共享库).
另一个例子:任何使用-pieflag 构建的可执行文件都可以用作共享库.有关详情,请参阅 答案.