.section .data
a:
.long 10
b:
.long 20
.section .text
.globl main
.type main,@function #别忘了这句,因为main汇编函数也是被crt0.s调用的,
main本质上也是个函数
main:
mov $a, %esi
mov $b, %edi
call swapint #不要写成 _swapint
movl $1,%eax
movl $0,%ebx
int $0x80
[descent@asm]$ gcc -o m m.s f.c
[descent@asm]$ ./m
success!!
end!
output??
[descent@asm]$ file m
m: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked
(uses shared libs), for GNU/Linux 2.6.32,
BuildID[sha1]=0xe20028448ed677fa683eef8db006b324c4421c6e, not stripped
x64 使用 register 和 stack 来传递变量。
※ 引述《yshihyu (yshihyu)》之铭言:
: http://blog.csdn.net/mirage1993/article/details/39759003
: 我想测试Linux汇编GAS调用C语言函数实例照上面网址代码步骤做
: 在32bit主机可以正常编译过 , 但是在64bit 会发生Segmentation fault (core dumped)
: 我使用 gdb ./a.out core 去看发现是是死在
: Program terminated with signal SIGSEGV, Segmentation fault.
: #0 0x00000000004005b6 in swapint (a=0x1, b=0x7fffcc70fb68) at pro.c:6
: 6 c=*a;
: 想请问一下发生SIGSEGV原因是什么?
: 谢谢