系统调用(system_call)

chapter 0: 举个栗子

在Linux中写程序,如果使用系调用,通常的方法是使用C库。这里用汇编直接使用中断指令写系统调用。

第一个例子是x86架构的:


.data
    mesg: .string "Hello World\n"
    len = . - mesg

.text
.global _start

_start:
    movl $len, %edx
    movl $mesg, %ecx
    movl $1, %ebx
    movl $4, eax
    int  0x80

    movl $0, %ebx
    movl $1, %eax
    int  $0x80




第二个例子是Arm架构的:


.section    .rodata
.str: .ascii "Hello world!\n"

.text
.global main

main:
    mov r7, #4
    mov r0, #1
    ldr r1, .mesg
    mov r2, #0x0d
    swi 0

    mov r7, #1
    mov r0, #0
    swi 0


上面的两个例子可以直接使用 gcc call.s编译,但是需要特定的编译工具和特定的硬件平台才能正确编译和运行。如果在笔记本或者台式机上面,第一个例子可以通过,如果在ARM核心的开发板上,请编译第二个例子。



你可能感兴趣的:(汇编,系统调用,linux系统调用)