我正在尝试为我试图构建的嵌入式系统编译一些东西。然而,当运行我为系统构建的二进制文件时,我遇到了failed to map segment from shared object: Invalid argument
。除了简单的循环和打印之外,任何程序都会发生这种情况。
#include<stdio.h>
#include<dirent.h>
int main(void)
{
DIR *d;
struct dirent *dir;
d = opendir(".");
if (d)
{
while ((dir = readdir(d)) != NULL)
{
printf("%sn", dir->d_name);
}
closedir(d);
}
return(0);
}
由于系统在库方面有些不合作,我必须重写它,所以我这样运行程序:./ld-linux.so.3 ./testbin
产生:
./testbin: error while loading shared libraries: ./shitls: failed to map segment from shared object: Invalid argument
…正如所怀疑的那样,testbin
也需要外部库。我设法为系统静态编译strace
,它运行得很好。所以我相当肯定,每当需要libc.so
时,罪魁祸首就是。
通过ld-linux.so.3
在testbin
上运行strace
时:./strace ./ld-linux.so.3 ./testbin
. .我有了一些工作要做:
execve("./ld-linux.so.3", ["./ld-linux.so.3", "./testbin"], 0xbee2b554 /* 74 vars */) = 0
brk(NULL) = 0xb873c000
open("./testbin", O_RDONLY) = 3
read(3, "177ELF111 2 ( 1 311203 004 "..., 512) = 512
lseek(3, 1920, SEEK_SET) = 1920
read(3, "