使用GDB在64位机器上调试32位二进制文​​件,找不到文件

时间:2015-05-28 12:49:04

标签: gdb 32bit-64bit

我从其他SO线程中了解到gdb可以在64位架构上调试32位和64位二进制文​​件,但是当我运行它时,我遇到以下问题:

Starting program: /root/crackme-01 
/bin/bash: /root/crackme-01: No such file or directory
During startup program exited with code 127.

以下是程序文件的结果:

crackme-01: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=9feb70a8647779984dc69b1e5c90bd757343fb29, stripped

还有什么我应该做的调试吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

GDB只能调试可以自行启动的程序。在您的情况下,程序根本无法启动(在您的进程的用户空间中没有执行任何单个指令,execve系统调用失败)。这样:

/bin/bash: /root/crackme-01: No such file or directory

几乎总是由缺少程序解释器引起的。您可以这样看解释器:

readelf -l /root/crackme-01 | grep interpreter

在您的情况下,解释器几乎肯定是/lib/ld-linux.so.2

  

我只是错过了这些库

您遗失了libc6:i386,其中ld-linux.so.2是其中的一部分。

答案 1 :(得分:0)

我刚刚错过了here

所解释的库

我需要安装32位libs:

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386