64位AT&T汇编语言as汇编ld链接,执行报错Segmentation fault

absCallAndPrintAbsAsLd.s里边的内容如下:

bash 复制代码
.section .data
    stringToShow:
      .ascii "The abs of number is %d\n\0"
.global _start
.section .text
_start:
   pushq %rbp
   movq %rsp,%rbp
   movq $-5,%rdi
   call abs

   movq $stringToShow,%rdi
   movq %rax,%rsi
   call printf

   popq %rbp
   movq %rax,%rdi
   movq $0x3c,%rax
   syscall

as -g absCallAndPrintAbsAsLd.s -o absCallAndPrintAbsAsLd.o进行汇编。
ld -g absCallAndPrintAbsAsLd.o -o absCallAndPrintAbsAsLd -lc -I /usr/lib64/ld-linux-x86-64.so.2进行链接。
./absCallAndPrintAbsAsLd执行报错Segmentation fault

我把rsp中的地址加上8之后,就不报错了,因为这属于平栈了。

bash 复制代码
.section .data
    stringToShow:
      .ascii "The abs of number is %d\n\0"
.global _start
.section .text
_start:
   pushq %rbp
   movq %rsp,%rbp
   movq $-5,%rdi
   call abs

   subq $8,%rsp
   movq $stringToShow,%rdi
   movq %rax,%rsi
   call printf
   
   addq $8,%rsp
   popq %rbp
   movq %rax,%rdi
   movq $0x3c,%rax
   syscall

as -g absCallAndPrintAbsAsLd.s -o absCallAndPrintAbsAsLd.o进行汇编。
ld -g absCallAndPrintAbsAsLd.o -o absCallAndPrintAbsAsLd -lc -I /usr/lib64/ld-linux-x86-64.so.2进行链接。
./absCallAndPrintAbsAsLd执行

相关推荐
xiaozhiwise14 小时前
ARM base instruction -- ccmp (immediate)
汇编
zzj_2626103 天前
masm汇编字符串输出演示
汇编
xiaozhiwise4 天前
ARM base instruction -- cls
汇编
R6bandito_4 天前
C/C++常用编译工具链:GCC,Clang
c语言·开发语言·汇编·c++·经验分享·gnu
xiaozhiwise5 天前
ARM base instruction -- cinc
汇编
CYRUS STUDIO5 天前
详解ARM64可执行程序的生成过程
android·c语言·汇编·c++·gdb·arm64
漠北的哈士奇6 天前
32位汇编——通用寄存器
汇编
xiaozhiwise7 天前
ARM base instruction -- bfi
汇编
xiaozhiwise7 天前
ARM base instruction -- adcs
汇编
xiaozhiwise7 天前
ARM base instruction -- adc
汇编