linux编译汇编程序

linux编译汇编程序

方法一 gcc编译

由于使用as和ld来编译链接汇编程序,在使用C库的时候比较麻烦,
需要输入比较多的指令,所以使用gcc进行编译链接。

注意
32位汇编和64位汇编在调用C库的时候,32位使用pushl指令来压栈传递参数,而64位汇编是使用通用寄存器来传递参数的。

同时还可以使用gcc编译C程序来获得汇编程序,进而观察汇编语法特点。
gcc -S -o main.S main.c

gcc编译asm文件
gcc -o main main.S

as与ld编译

as -o main.o main.s
ld -dynamic-linker /lib/ld-linux.so.2 -o main -lc mian.o
  • 标准的 C 动态库位于 libc.so.x 文件中,其中 x 表示库的版本。
    这个库文件包含了标准 C 函数,包括 printf 和 exit。
    在使用 gcc 时,这个文件会被自动连接到 C 程序中。但是在汇编程序中,必须手动把它连接到程序目标代码中以便 C 函数能够操作。为了连接 libc.so 文件,必须使用 GNU 连接器的 -l 参数
  • 连接器能够解析 C 函数,但是函数本身没有包含到最终的可执行程序中,我们使用的是动态链接库,连接器假设运行时能够找到必须的库文件。
    为解决这个问题,还必须指定在运行时加载动态库的程序
posted @ 2020-05-31 16:03  friedCoder  阅读(1529)  评论(0)    收藏  举报