免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1999 | 回复: 4
打印 上一主题 下一主题

目标文件的制作 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-09 15:04 |只看该作者 |倒序浏览
请教一下,

如何生成一个目标文件(*.o)?

我的意思是,如果我要手工生成一个 *.o 的目标文件(注意,不是一般情况下的利用工具进行编译,即例如一个C的源程序会先翻译成汇编程序,然后利用nasm/gas等的工具生成对应的 *.o目标文件,最后利用ld生成ELF/AOUT格式的程序),该如何做?

此外,是否存在一定的目标文件格式(即,如果是一个ELF文件,则会存在一个ELF头;那对于一个目标文件,是否也存在一个”目标文件头“)?

论坛徽章:
0
2 [报告]
发表于 2013-08-09 15:07 |只看该作者
回复 1# landker

ding
   

论坛徽章:
0
3 [报告]
发表于 2013-08-10 12:16 |只看该作者
回复 1# landker


此外,我还有一个疑问,具体如下:

对于 hello.c , 假设代码为:

void main()
{
      int c = 1;
}

1)编译生成 hello.o,并指定该目标文件(hello.o)的格式为 elf,即带elf头

2)简单编写一个入口函数(带 _start)的汇编文件,并编译成 start.o,同样为 elf 格式

3)链接(ld)生成可执行文件 hello,并指定其格式为 elf

我相信一般的编译步骤为以上的3步(当然可以更详细的),我的疑问是关于 hello.o 和 hello 之间的区别(即 第2步 和 第3步 得出的文件),个人认为:

相同点:hello.o 和 hello 都是目标文件,且都是 elf 格式的;

不同点:hello指定了入口函数(在加载时可以直接执行),而 hello.o 却没有(只能是一个“中间”文件)。


是这样吗?
   

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
4 [报告]
发表于 2013-08-12 11:23 |只看该作者
回复 1# landker


    搜 elf文件格式

论坛徽章:
1
水瓶座
日期:2013-09-28 21:40:25
5 [报告]
发表于 2013-08-24 01:13 |只看该作者
Linux下编译器默认都是ELF格式,你可以制定成其他的。例如nasm的-f选项。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP