linux开源打印系统,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 1

Param 2

Param 3

Param 4

Param 5

Param 6

eax

ebx

ecx

edx

esi

edi

ebp

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 1

Param 2

Param 3

Param 4

Param 5

Param 6

rax

rdi

rsi

rdx

r10

r8

r9

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值