我有在Linux的用戶空間運行一個很基本的彙編程序:爲什麼'syscall'指令不能在Linux下工作?
section .text
global _start
_start:
mov edx, 14
mov ecx, msg
mov ebx, 1
mov eax, 4
syscall
mov eax, 1
syscall
section .data
msg db "Hello, World!", 0xA
然而,這不起作用,因爲它是,但只有當我int 0x80
更換syscall
秒。不要這些做同樣的事情嗎?我知道syscall
被設計爲低延遲,但除此之外,我不認爲有什麼區別。爲什麼它不起作用?
也許您在尋找'sysenter'? Linux將包含用戶空間「sysenter」包裝的頁面映射到32位進程的虛擬地址空間中。這是VDSO。 –
有你所需要查看的所謂的人工頁面。特別是關於'syscall','syscalls'和你想調用的系統調用。你會發現你在那裏必須知道的一切。 – sivizius