使用gcc和as编译汇编有什么区别
What are the differences between compiling assembly using gcc and as
我正在学习如何使用汇编语言(顺便在 Raspberry Pi 上),我想知道使用 gcc
和 as
进行编译之间的区别是什么。
到目前为止,我注意到的差异是:
- 我应该使用
as
进行额外的链接步骤。
- 在 Raspberry Pi 上,
as
似乎比 gcc
本身更能识别架构。在使用整数除法等指令之前,我必须告诉 gcc
架构。
- 使用
gcc
我可以轻松访问 C 标准库函数。我认为使用 as
是可能的,但我还没有弄明白。
我想坚持使用特定的编译器。我还应该注意哪些其他差异。使用其中任何一种都有优势/劣势吗?
gcc
只是一个运行 as
的 front-end(和 ld
,除非你使用 -c
在没有 [=38= 的情况下停止目标文件]ing).使用 gcc -v
查看它运行的内容以及它传递的命令行选项。
如果要 link 库,一般使用 gcc
。它知道传递给 ld
的正确 command-line 选项以设置库路径,以及在 ld
命令行上放置内容的顺序。
您可能会发现 gcc -nostdlib
或 -nostartfiles
有用,例如如果您想编写自己的 _start
但仍然 link 库。还有 -no-pie
and/or -static
取决于你想怎样 link.
如果您想了解有关工具链和 linking 的更多信息,请务必尝试使用 ld
选项,看看更改选项时会出现什么问题。 And/or 使用 readelf -a
检查生成的可执行文件。
您也可以在汇编中访问 C 标准库函数。只需关注 GCC calling convention and use the standard printf
call。
你必须先用 as
编译你的汇编程序来创建一个目标文件。之后,您可以使用 linker 来 link 所有必需的库(例如 stdio
)。
我正在学习如何使用汇编语言(顺便在 Raspberry Pi 上),我想知道使用 gcc
和 as
进行编译之间的区别是什么。
到目前为止,我注意到的差异是:
- 我应该使用
as
进行额外的链接步骤。 - 在 Raspberry Pi 上,
as
似乎比gcc
本身更能识别架构。在使用整数除法等指令之前,我必须告诉gcc
架构。 - 使用
gcc
我可以轻松访问 C 标准库函数。我认为使用as
是可能的,但我还没有弄明白。
我想坚持使用特定的编译器。我还应该注意哪些其他差异。使用其中任何一种都有优势/劣势吗?
gcc
只是一个运行 as
的 front-end(和 ld
,除非你使用 -c
在没有 [=38= 的情况下停止目标文件]ing).使用 gcc -v
查看它运行的内容以及它传递的命令行选项。
如果要 link 库,一般使用 gcc
。它知道传递给 ld
的正确 command-line 选项以设置库路径,以及在 ld
命令行上放置内容的顺序。
您可能会发现 gcc -nostdlib
或 -nostartfiles
有用,例如如果您想编写自己的 _start
但仍然 link 库。还有 -no-pie
and/or -static
取决于你想怎样 link.
如果您想了解有关工具链和 linking 的更多信息,请务必尝试使用 ld
选项,看看更改选项时会出现什么问题。 And/or 使用 readelf -a
检查生成的可执行文件。
您也可以在汇编中访问 C 标准库函数。只需关注 GCC calling convention and use the standard printf
call。
你必须先用 as
编译你的汇编程序来创建一个目标文件。之后,您可以使用 linker 来 link 所有必需的库(例如 stdio
)。