linux 汇编打印 Hello World!

文件名: b.s 

.data
    msg: .ascii "Hello World\n"
.text

.globl main

main:
    movq $1, %rax
    movq $1, %rdi
    movq $msg, %rsi
    movq $12, %rdx
    syscall

    movq $60, %rax
    movq $0, %rdi
    syscall

编译运行:

user_00@centos:asm> gcc -s b.s -o b
user_00@centos:asm> ./b
Hello World

 

int 0x80[edit]

On both Linux x86 and Linux x86_64 systems you can make a syscall by calling interrupt 0x80 using the int $0x80 command. Parameters are passed by setting the general purpose registers as following:

Syscall #Param 1Param 2Param 3Param 4Param 5Param 6
eaxebxecxedxesiediebp
Return value
eax

The syscall numbers are described in the Linux generated file $build/arch/x86/include/generated/uapi/asm/unistd_32.h or $build/usr/include/asm/unistd_32.h. The latter could also be present on your Linux system, just omit the $build.

All registers are preserved during the syscall.

syscall[edit]

The x86_64 architecture introduced a dedicated instruction to make a syscall. It does not access the interrupt descriptor table and is faster. Parameters are passed by setting the general purpose registers as following:

Syscall #Param 1Param 2Param 3Param 4Param 5Param 6
raxrdirsirdxr10r8r9
Return value
rax

The syscall numbers are described in the Linux generated file $build/usr/include/asm/unistd_64.h. This file could also be present on your Linux system, just omit the $build.

All registers, except rcx and r11 (and the return value, rax), are preserved during the syscall.

转载于:https://my.oschina.net/tsh/blog/1615352

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值