我目前正在研究X86_Intel 64位程序集,并且我想在macOS上运行我的程序集代码。我使用以下代码在Ubuntu VM上正确编译并链接了我的代码:
yasm -f elf64 -g dwarf2 -l div.lst div.asm
ld -o div div.o
但是,当我使用上面相同的命令时,我在macOS上遇到了问题。有什么明显的我很想念的东西吗?
Jonathans-MacBook-Pro:Practical 2 jonathancopeland$ yasm --version
yasm 1.3.0
Compiled on Sep 15 2017.Copyright (c) 2001-2014 Peter Johnson and other Yasm developers.
Run yasm --license for licensing overview and summary.
Jonathans-MacBook-Pro:Practical 2 jonathancopeland$ yasm -f elf64 -g dwarf2 -l div.lst div.asm
Jonathans-MacBook-Pro:Practical 2 jonathancopeland$ ld -o div div.o
**ld: warning: -arch not specified
ld: warning: -macosx_version_min not specified, assuming 10.11ld: warning: ignoring file div.o, file was built for unsupportedfile format ( 0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ) which is not the architecture being linked (x86_64): div.o
Undefined symbols for architecture x86_64:
"start", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for inferred architecture x86_64
Jonathans-MacBook-Pro:Practical 2 jonathancopeland$**
Here is a screenshot of my code, file structure and terminal
答案 0 :(得分:1)
首先,即使在相同的CPU体系结构上,汇编代码通常也不可在平台之间移植。如果您确切知道自己在做什么,则可以使汇编代码具有可移植性,但这需要对系统有充分的了解。
您的代码存在三个主要问题:
yasm
生成macOS链接编辑器无法理解的ELF对象。您需要生成一个Mach-O对象才能成功创建二进制文件。请参阅汇编程序的文档以了解操作方法。start
。有关详细信息,请参阅链接编辑器的文档。write
的符号命名为_write
。