合并两个relocatable ELF文件的问题
汇编写的a.s编译成a.o
b.s编译成b.o
要将a.o和b.o合并成一个c.o
要求c.o中代码部分和 cat a.s b.s > c.s,
再编译c.s得到的代码是一样的(b.s中的指令紧接着a.s最后一条指令执行)
link script应该怎么写啊? 再说的清楚一点。
a.s的内容
myfunc:
instr1
instr2
instr3
instr4
b.s的内容
instr5
instr6
instr7
instr8
leave
ret
让a.o和b.o合并称c.o后里面的myfunc可以被调用, 调用后执行instr,leave,ret共10条指令
myfunc:
instr1
instr2
instr3
instr4
instr5
instr6
instr7
instr8
leave
ret
看了GNU ld的手册,link script大概意思明白,动手写的时候又不会写了。
为什么一个函数要写在两个文件里面呢。
把这个两个代码段指定到同一个段里,应该可以实现你的目的。需要在.s里面指定一下段 是的。
我只是想学学link script。我说的问题不是一个实际的问题。只是为了练习和理解link script用的 是的。
我只是想学学link script。我说的问题不是一个实际的问题。只是为了练习和理解link script用的 那你自己多尝试几次吧
自己试了试,我用了如下的链接脚本
SECTION {
.text = {
a.o (.text)
b.o (.text)
}
}
得到的elf文件中的myfunc可以在C中调用了。
但是有两个问题:
1. 生成的ELF文件时executable的,不过里面的myfunc还是可以调用。
2. 在a.s的代码后插入了一些junk代码(nopw),好像和对齐有关。
不知道怎么去除。
自己回答自己吧,link的时候指定SUBALIGN就行
页:
[1]