ld:警告:找不到条目符号_start;默认为 0000000000401000

ld: warning: cannot find entry symbol _start; defaulting to 0000000000401000

这是我在 Linux Ubuntu 中编写汇编语言代码时遇到的错误。谁能帮我解决这个错误?

这是我使用命令ld -o quadratic quadratic.o

时出现的错误

The image of Error that's coming.

我的 asm 文件的代码是这样的:

https://github.com/vedantdawange/ASM-Files/blob/main/quadratic.asm

ld 本身 links 没有库或启动代码。它适用于您使用 _start 作为入口点并通过直接调用内核而不是标准 C 库函数来执行 I/O 的程序。但是你的程序使用 main 作为它的入口点,所以它期望被 C 启动代码调用,它调用像 printf 这样的库函数。因此你应该 link 它像一个 C 程序:

gcc -no-pie -o quadratic quadratic.o

需要 -no-pie 选项,因为您的代码对静态数据进行绝对引用,例如fld qword[b]。默认情况下,gcc 假定您要构建一个与位置无关的可执行文件,但它不能这样做;您需要编写 fld qword[rel b] 来生成相对于 rip 的有效地址。所以 -no-pie 要求 gcc link 一个非位置无关的可执行文件。有关详细信息,请参阅