在Docker中运行二进制文件

4
可以像虚拟机一样使用Docker来运行二进制文件吗?我有一个ELF二进制文件需要进行调试/逆向工程,但我在Mac上无法运行它。我尝试通过共享卷将其挂载到docker run -it -v ~/Projects:/Projects ubuntuchmod +x,但当我尝试执行它时,它告诉我没有这样的文件或目录。
因此,启动Docker实例似乎很好,它会将我放入一个root shell中。
$ docker run -it -v ~/Projects:/Projects ubuntu /bin/bash]
root@21aee00b6c45:/# cd Projects/
root@21aee00b6c45:/Projects#

然后我尝试运行我的二进制文件,但却出现了以下提示:
root@21aee00b6c45:/Projects# ls -la ch25.bin
-rwxr-xr-x 1 root root 12751 Apr 28 09:16 ch25.bin
root@21aee00b6c45:/Projects# ./ch25.bin
bash: ./ch25.bin: No such file or directory

docker run -it -v ~/Projects:/Projects ubuntu /bin/bash 然后你就进入了这个容器,可以运行你的二进制文件。 - vitr
1
只是让你了解实际的情况。在Linux上,Docker可以使用主机操作系统的内核,但在Mac / Windows上不能,因为Docker依赖于Linux。因此,在这些平台上实际发生的是,Docker运行单个Linux虚拟机,其中所有Docker容器都运行。如果在挂载带有二进制文件的目录后仍然遇到问题,请发布您尝试在* Docker容器内部*执行的操作。 - dpwr
@vitr无法解决“没有这样的文件或目录”问题。 我将在帖子中更新我在容器中尝试的内容。 - Not Robert
没有Ubuntu系统的问题,您只是在尝试运行非常特定于radare2框架的二进制文件。 - vitr
ch25.bin是什么?它来自哪里?它是如何构建的?我相信你看到的错误与Docker无关,而可能表明你正在尝试运行错误架构的二进制文件。 - larsks
1个回答

0

由于您已将共享的Projects目录挂载为只读,因此无法更改权限。

您可以尝试以下两种方法:

在本地文件上正确设置权限,然后使用正确的权限挂载它。 尝试使用写访问权限(-v ~/Projects:/Projects:rw)挂载它,并从容器更改权限(如果您挂载非Linux文件系统(例如NTFS或FAT32),它将无法支持Linux文件权限)。 使用动态链接器直接运行非可执行二进制文件(假设二进制文件采用ELF格式),例如64位ELF格式:
/usr/lib64/ld-linux-x86-64.so.2 ~/Projects/ch25.bin

参见:/lib64/ld-linux-x86-64.so.2是什么以及为什么可以用来执行文件?

要找到正确的动态链接器,您可以在容器内使用此命令:

find /lib /usr/lib -name "ld*.so*"
如果您需要32位动态链接器,请安装lib32z1软件包并使用/usr/lib/ld-linux.so.2来执行二进制文件。 否则,如果您的二进制文件采用不同的格式,请使用正确的解析器(对于shell脚本,请使用bash ch25.bin)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接