【发布时间】:2017-12-01 22:57:23
【问题描述】:
我正在尝试用两个文件制作一个可执行文件:
-
vm.o,里面包含了一堆不可重定位的函数, -
launcher.c,它有一个main函数来启动我的虚拟机。
vm.o 是一个 elf32 文件,其中包含预期在 0x401000 加载的 .text 代码段,如 objdump -x vm.o 所示。
...
SYMBOL TABLE:
00401000 l d .text 00000000 .text
00401000 g .text 00000000 _binary_vm_o_start
....
我正在像这样运行 gcc:
gcc -no-pie -m32 -o vm vm.o loader.c -ldl
但是生成的文件忽略了vm.o中指定的位置。如果我这样做了
gcc -no-pie -m32 -o vm vm.o loader.c -ldl -Ttext 0x401000
我接近了,但 _start 被放在 0x401000 并且我的 vm.o 被放在 0x4010fb。
有没有一种简单的方法来告诉 gcc 将 vm.o 的 .text 部分放在所需的位置?我知道用 ld 做这件事的方法,但我宁愿使用 gcc 来链接。
【问题讨论】: