【发布时间】:2014-10-27 09:16:59
【问题描述】:
我正在阅读关于操作系统的 the following book。在第 43 页,他们使用以下命令将带注释的机器代码转换为原始机器代码文件:
$ ld -o basic.bin -Ttext 0x0 --oformat binary basic.o
在我的 MacBook Pro(运行 Mavericks)中运行该命令时,我得到:
ld: unknown option: -Ttext
我做了一些研究,发现 OS X 的链接器不允许使用脚本文件作为链接器脚本。
互联网上的其他一些帖子建议使用以下“正确”格式:
$ ld -T text 0x0 --o format binary -o basic.bin basic.o
虽然它对我也不起作用。
我也尝试通过homebrew 安装binutils,但它似乎不附带GNU 链接器。
该命令在 Ubuntu 14.04 中正确运行,但如果可能,我想继续在 OS X 中开发。
有没有办法使用 OS X 的链接器获得相同的结果,可能使用不同的标志?
更新:
我能够使用来自binutils 的gobjcopy 使用以下命令生成一个bin:
$ gobjcopy -j .text -O binary basic.o basic.bin
但是我找不到一种方法来偏移代码中的标签地址,例如我可以使用 GNU ld 和 -Ttext 0x1000。
我尝试使用 --set-start <hex> 没有任何运气:
$ gobjcopy -j .text --set-start 0x1000 -O binary basic.o basic.bin
【问题讨论】:
-
查看 MacPorts 版本,available selection 可能会让您更加幸运。
-
我认为 gnu binutils ld 不支持 osx。见stackoverflow.com/questions/1608009/… 和quora.com/How-do-I-get-GNU-ld-on-OS-X
-
有没有办法在不使用 GNU ld 特定功能的情况下获得相同的结果?