assembly - 在 64 位平台上使用 ld 生成 32 位可执行文件

标签 assembly x86 x86-64 ld

我写了一个组装的程序集:

$as --32 -o hello.o hello.s

然后我尝试生成一个可执行文件:
$ld -o hello hello.o

它给了我一个错误:
ld: i386 architecture of input file `ConditionalBranching.o' is incompatible with i386:x86-64 output

我尝试使用标志 -m32 或 --32,但 ld 不接受它们。我无法通过阅读 ld 的手册页找到解决方案。如何从我的 32 位共享对象生成 32 位二进制文​​件?

最佳答案

您的链接器正在尝试创建 64 位二进制文​​件,但您的汇编代码是为 32 位体系结构组装的。这会造成不匹配。

通过传递 -m elf_i386 解决此问题标记到您的链接器,明确指示它创建一个 32 位二进制文​​件。

关于assembly - 在 64 位平台上使用 ld 生成 32 位可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30184929/

相关文章:

c++ - 为什么在使用局部变量时这个带有 mov 算术的有效程序集不能编译?

c - 为什么 rsp 寄存器在叶函数中不像在任何其他函数的开头那样递减?

gnu - x86-64 GNU 程序集

macos - osx x64 反向 tcp shell 代码程序成功终止

c - 如何将文件指针从 c 传递到 asm 中的调用

x86 - 原子操作是如何在硬件层面实现的?

assembly - 为 x86 程序集绘制堆栈框架

gcc - 尝试使用具有多个替代约束的内联汇编在 amd64 中实现 128 位添加

计算堆栈上的帧数

linux - 如何在保护模式下清屏