设为首页 加入收藏

TOP

64位系统由于找不到32位程序加载器而无法运行32位程序的分析过程(一)
2015-07-20 18:00:41 来源: 作者: 【 】 浏览:6
Tags:64位 系统 由于 不到 32位 程序 加载 无法 运行 分析 过程

http://wiki.ok-labs.com/Microkernel

下载

arm-linux-gnueabi-4.2.4.tar.gz,sdk-xscale-3.0.tar.gz,Skyeye 1.2.1n和skyeye.conf,并按照tut-sdk-singlecell.pdf来操作, 并把

export PATH=$PATH:`pwd`/arm-unknown-linux-gnueabi/bin

加入到PATH环境变量中。

进入singlecell目录,执行make命令,得到如下错误:

make -C hello KERNEL=micro BUILD=debug
make[1]: 进入目录“/home/xuzhina/Downloads/singlecell/hello”
cp hello.xml.in build.micro-debug/bin/hello.xml
make[1]: arm-unknown-linux-gnueabi-gcc:命令未找到
arm-unknown-linux-gnueabi-ld -o build.micro-debug/bin/hello -Ttext=0x80000000 -L/home/xuzhina/Downloads/sdk/okl4/xscale/micro-debug/libs 
/home/xuzhina/Downloads/sdk/okl4/xscale/micro-debug/libs/crt0.o  build.micro-debug/src/hello.o 
--start-group /home/xuzhina/Downloads/sdk/okl4/xscale/micro-debug/libs/libc.a 
/home/xuzhina/Downloads/sdk/okl4/xscale/micro-debug/libs/libokl4.a  --end-group
make[1]: arm-unknown-linux-gnueabi-ld:命令未找到
make[1]: *** [build.micro-debug/bin/hello] 错误 127
make[1]: 离开目录“/home/xuzhina/Downloads/singlecell/hello”
make: *** [hello/build.micro-debug/bin/hello.xml] 错误 2

很奇怪,怎么会找不到呢?执行一下
arm-unknown-linux-gnueabi

并按TAB键,出现这样的结果:

[xuzhina@localhost singlecell]$ arm-unknown-linux-gnueabi-
arm-unknown-linux-gnueabi-addr2line  arm-unknown-linux-gnueabi-gprof
arm-unknown-linux-gnueabi-ar         arm-unknown-linux-gnueabi-ld
arm-unknown-linux-gnueabi-as         arm-unknown-linux-gnueabi-nm
arm-unknown-linux-gnueabi-c++        arm-unknown-linux-gnueabi-objcopy
arm-unknown-linux-gnueabi-c++filt    arm-unknown-linux-gnueabi-objdump
arm-unknown-linux-gnueabi-cpp        arm-unknown-linux-gnueabi-ranlib
arm-unknown-linux-gnueabi-g++        arm-unknown-linux-gnueabi-readelf
arm-unknown-linux-gnueabi-gcc        arm-unknown-linux-gnueabi-size
arm-unknown-linux-gnueabi-gcc-4.2.4  arm-unknown-linux-gnueabi-strings
arm-unknown-linux-gnueabi-gccbug     arm-unknown-linux-gnueabi-strip
arm-unknown-linux-gnueabi-gcov       

也就是说,命令是可以找到,为什么找不到呢?

把上面的错误信息中一条命令拷贝出来执行一下,

arm-unknown-linux-gnueabi-ld -o build.micro-debug/bin/hello -Ttext=0x80000000 -L/home/xuzhina/Downloads/sdk/okl4/xscale/micro-debug/libs 
/home/xuzhina/Downloads/sdk/okl4/xscale/micro-debug/libs/crt0.o  build.micro-debug/src/hello.o 
--start-group /home/xuzhina/Downloads/sdk/okl4/xscale/micro-debug/libs/libc.a 
/home/xuzhina/Downloads/sdk/okl4/xscale/micro-debug/libs/libokl4.a  --end-group
出现这样的错误信息:

bash: /home/xuzhina/Downloads/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-ld: /lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录

一般来说,程序执行,要先由加载器把它加载到内存里,创建了进程空间,才能够执行的。从上面错误,可以看到是没有加载器,所以无法解析这个可执行文件

那为什么其它程序可以执行,比如/bin/ls?

先看一下arm-unknown-linux-gnueabi-ld和/bin/ls的类型:

[xuzhina@localhost singlecell]$ file /home/xuzhina/Downloads/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-ld
/home/xuzhina/Downloads/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-ld: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
[xuzhina@localhost singlecell]$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0xec333a104e04
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 3038 How Many Answers Are W.. 下一篇POJ 3114 Countries in War 强连..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: