汇编1

.data
hello:.ascii "hello"
.text
.global _start
_start:
movl $4,%eax
movl $1,%ebx
movl $hello,%ecx
movl $5,%edx
int $0x80

eax:4 ebx:1,write系统调用,1代表STDOUT_FILENO

.global _start
_start:
movl $1,%eax
movl $2,%ebx
int $0x80

编译:as -o m.o m.s

链接:ld -o m m.s

看出的问题:

没有.text,.data,.bss三个段也可以,不过最后生成的可执行文件还是会有这几个段的,而且还会多加几个段。

问题1:直接as m.s会生成a.out,但是不能执行。

问题2:直接gcc m.s,_start重定义了

.global main
main:
mov $1,%eax
mov $2,%ebx
int $0x80

由这个对比,可以知道

gcc只要有main函数就行,因为他默认会链接一个包含有_start函数的模块(额,没搞清楚是哪个模块)。

ld只要有_start函数就行,因为他不会多链接什么函数。

总结:加载器加载的时候肯定_start函数,这个应该是链接脚本决定的。

问题1:_start是在哪个模块?

问题2:链接脚本,加载器,glibc是什么关系?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值