免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: deng_save_file
打印 上一主题 下一主题

谁知道如何执行不带 x 属性的 ELF 文件。 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-07-27 08:53 |只看该作者
刚刚做过这东西,被我撞上了

自己写一个加载器,很小的

  1. #include <dlfcn.h>
  2. int main(int argc,char** argv)
  3. {
  4.   void* handle;
  5.   int (*mainfunc)(int,char**)
  6.   handle = dlopen(argv[1]);
  7.   if (handle)
  8.     mainfunc = dlsym(handle,"main");
  9.   mainfunc(argc-1,argv+1);
  10.   return 0;
  11. }
复制代码

这个程序用mmap把那个文件映射到内存,然后看是否能找到main这个符号,如果找到就获得它的地址并且调用他

[ 本帖最后由 reiase 于 2007-7-27 08:54 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2007-07-27 11:39 |只看该作者
原帖由 swordfish.cn 于 2007-7-27 07:12 发表
LS 可不可以解释下原理呢?

ld.so和ld-linux.so 都用于将指定的可执行代码连接共享库并运行,前者用于传统的a.out格式的执行码,后者用于ELF。
在shell环境下,对无x属性的文件,shell拒绝调用ld.so 或ld-linux.so 来运行这个文件。这时只有人为的来执行了。
详见ld.so manpage
The programs ld.so and ld-linux.so* find and load the shared libraries
       needed by a program, prepare the program to run, and then run it.

论坛徽章:
0
13 [报告]
发表于 2007-07-27 21:57 |只看该作者

那 ld.so 应该是 toolchain 的一部分了吧,学习了。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
14 [报告]
发表于 2007-07-28 12:56 |只看该作者
原帖由 swordfish.cn 于 2007-7-27 21:57 发表

那 ld.so 应该是 toolchain 的一部分了吧,学习了。

对头。

----------

论坛徽章:
0
15 [报告]
发表于 2007-08-08 19:44 |只看该作者
原帖由 tom_xx_hu@yahoo 于 2007-7-27 05:26 发表
我想我能拿这一分了:



仍然不行:
/lib/ld-linux.so.2 ./ls
./ls: error while loading shared libraries: ./ls: wrong ELF class: ELFCLASS64
/lib64/ld-linux-x86-64.so.2 ./ls
./ls: error while loading shared libraries: ./ls: failed to map segment from shared object: Operation not permitted

论坛徽章:
0
16 [报告]
发表于 2007-08-08 23:35 |只看该作者
原帖由 deng_save_file 于 2007-8-8 19:44 发表


仍然不行:
/lib/ld-linux.so.2 ./ls
./ls: error while loading shared libraries: ./ls: wrong ELF class: ELFCLASS64
/lib64/ld-linux-x86-64.so.2 ./ls
./ls: error while loading shared libra ...

这不像是我的问题。你的ELF执行文件(本例./ls)编译生成环境与runtime环境不一样,这是不同版本的问题。你很麻烦了。

论坛徽章:
0
17 [报告]
发表于 2007-08-23 16:41 |只看该作者
原帖由 tom_xx_hu@yahoo 于 2007-8-8 23:35 发表

这不像是我的问题。你的ELF执行文件(本例./ls)编译生成环境与runtime环境不一样,这是不同版本的问题。你很麻烦了。


怎么可能不同?从本机 cp 过去的 /bin/ls 文件 , 原本是可执行的,但去掉 x 属性后,再 mkisofs 成 iso 文件。重新  mount 它,就出现如上状况

论坛徽章:
0
18 [报告]
发表于 2007-08-23 17:18 |只看该作者
原帖由 tom_xx_hu@yahoo 于 2007-8-8 23:35 发表

这不像是我的问题。你的ELF执行文件(本例./ls)编译生成环境与runtime环境不一样,这是不同版本的问题。你很麻烦了。


怎么可能不同?从本机 cp 过去的 /bin/ls 文件 , 原本是可执行的,但去掉 x 属性后,再 mkisofs 成 iso 文件。重新  mount 它,就出现如上状况

论坛徽章:
0
19 [报告]
发表于 2007-08-24 05:31 |只看该作者
原帖由 deng_save_file 于 2007-8-23 17:18 发表


怎么可能不同?从本机 cp 过去的 /bin/ls 文件 , 原本是可执行的,但去掉 x 属性后,再 mkisofs 成 iso 文件。重新  mount 它,就出现如上状况

哎呀,要拿点分都这么不容易,要赚钱就更难了。
我现在想起两个可能的原因。一个是你的kernel是2.6系中的某一个有相关bug的,那你要更新核心了;另一个可能是你的系统环境用了libsafe。把uname -a和echo $LD_PRELOAD结果贴上来看看好吗?

论坛徽章:
0
20 [报告]
发表于 2007-08-29 02:48 |只看该作者
原帖由 tom_xx_hu@yahoo 于 2007-8-24 05:31 发表

哎呀,要拿点分都这么不容易,要赚钱就更难了。
我现在想起两个可能的原因。一个是你的kernel是2.6系中的某一个有相关bug的,那你要更新核心了;另一个可能是你的系统环境用了libsafe。把uname -a和echo $L ...

LZ哥们,好在这只是CU赏分,要是等这口赏饭,我得饿死了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP