当我运行一个名为“myfile”的用户应用程序时.
$./myfile
我收到以下输出
bash: ./myfile: cannot execute binary file
我的用户希望运行二进制文件.我认为这是一个编译错误,但无法确认.我运行了文件命令
$file myfile
myfile: ELF 64-bit LSB relocatable,x86-64,version 1 (SYSV),not stripped
我的RHEL6操作系统是64位的
$uname -p -o
x86_64 GNU/Linux
因此,我认为它符合正确的架构.我不明白文件命令的输出中“可重定位”是什么意思,并且无法从手册页中获得解释.
为了更好的衡量,我检查了共享库依赖项
$ldd myfile
not a dynamic executable
有没有什么方法可以让我的文件运行或给我的用户一些有关它不会运行的建设性信息(例如他需要使用x重新编译)?
strace的
$strace ./myfile
execve("./myfile",["./myfile"],[/* 22 vars */]) = -1 ENOEXEC (Exec format error)
dup(2) = 3
fcntl(3,F_GETFL) = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3,{st_mode=S_IFCHR|0620,st_rdev=makedev(136,0),...}) = 0
mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x7f7a9fc93000
lseek(3,SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(3,"strace: exec: Exec format error\n",32strace: exec: Exec format error
) = 32
close(3) = 0
munmap(0x7f7a9fc93000,4096) = 0
exit_group(1) = ?
readelf输出
readelf -S ./myfile There are 13 section headers,starting at offset 0x1e8:
Section Headers:
[Nr] Name Type Address Offset
Size EntSize Flags Link Info Align
[ 0] NULL 0000000000000000 00000000
0000000000000000 0000000000000000 0 0 0
[ 1] .text PROGBITS 0000000000000000 00000040
0000000000000098 0000000000000000 AX 0 0 4
[ 2] .rela.text RELA 0000000000000000 000006e0
0000000000000120 0000000000000018 11 1 8
[ 3] .data PROGBITS 0000000000000000 000000d8
0000000000000010 0000000000000000 WA 0 0 4
[ 4] .bss NOBITS 0000000000000000 000000e8
0000000000000000 0000000000000000 WA 0 0 4
[ 5] .rodata PROGBITS 0000000000000000 000000e8
0000000000000033 0000000000000000 A 0 0 1
[ 6] .comment PROGBITS 0000000000000000 0000011b
000000000000002d 0000000000000001 MS 0 0 1
[ 7] .note.GNU-stack PROGBITS 0000000000000000 00000148
0000000000000000 0000000000000000 0 0 1
[ 8] .eh_frame PROGBITS 0000000000000000 00000148
0000000000000038 0000000000000000 A 0 0 8
[ 9] .rela.eh_frame RELA 0000000000000000 00000800
0000000000000018 0000000000000018 11 8 8
[10] .shstrtab STRTAB 0000000000000000 00000180
0000000000000061 0000000000000000 0 0 1
[11] .symtab SYMTAB 0000000000000000 00000528
0000000000000180 0000000000000018 12 9 8
[12] .strtab STRTAB 0000000000000000 000006a8
0000000000000037 0000000000000000 0 0 1
Key to Flags:
W (write),A (alloc),X (execute),M (merge),S (strings)
I (info),L (link order),G (group),x (unknown)
O (extra OS processing required) o (OS specific),p (processor specific)