[英]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.