繁体   English   中英

尽管指定了相同的索书号,为什么 NASM 系统索书号会执行 2 种不同的操作

[英]Why does NASM system call number perform 2 different operations despite specifying the same call number

我有以下用 NASM x86_64 程序集编写的“hello world”代码:

section .data
    msg     db "Hello World", 0xa
    msg_L   equ $-msg

section .text
    global _start

_start:
    mov     eax, 4      ; sys_write call
    mov     ebx, 1      ; stdout
    mov     ecx, msg
    mov     edx, msg_L
    int     0x80        ; call kernel

    mov     eax, 1      ; sys_exit call
    int     0x80        ; call kernel

_start:部分下的第一个“函数”中, mov ebx, 1用于指定打印的标准输出。 稍后,在第一次内核调用之后, mov eax, 1用于指定sys_exit系统调用。 我不明白在调用内核时指定相同的系统调用号如何产生 2 个不同的结果。 这个 NASM 教程将 1 指定为sys_exit的系统调用号,但程序在第一次使用该号码后不会退出,而是将其用于stdout 有人可以向我解释这是为什么吗?

您没有指定相同的系统调用号。

eax而非ebx用于指定系统调用号。

mov ebx, 1设置ebx的值而不设置eax的值。

使用mov ebx, 1设置的标准输出时,系统调用号通过mov eax, 4设置为4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM