Linux x86平台i386架构汇编调用号列表

Linux x86平台i386架构下,系统调用分为如下三步:

把系统调用号放在eax寄存器内,不同的系统调用号对应不同的功能。系统调用号定义在/usr/include/asm/unistd_32.h头文件中。

根据系统调用的需要,把对应的参数放入ebx, ecx, edx, esi, edi和ebp寄存器。

调用int 0x80中断,这会触发系统调用机制,内核会根据eax寄存器中的系统调用号,来调用对应的内核函数处理该系统调用。

举个例子,open系统调用的汇编如下:

mov eax, 5 ; sys_open系统调用号      
mov ebx, filename ; 文件名     
mov ecx, flags ; 文件标志  
mov edx, mode ; 文件权限模式  
int 0x80 ; 调用中断    

主要步骤:

eax寄存器中放入sys_open的系统调用号5

因为open系统调用需要文件名、文件标志和权限模式三个参数,所以分别放入ebx, ecx 和edx寄存器

调用int 0x80系统调用中断,内核就会调用对应的open系统调用函数

系统调用返回值会放在eax寄存器中。

总的来说,Linux x86平台的系统调用通过使用系统调用号和相应的参数,调用int 0x80中断,从而跳转到内核实现具体的系统调用功能。

调用号名称系统名称
0restart_syscallsys_restart_syscall
1exitsys_exit
2forksys_fork
3readsys_read
4writesys_write
5opensys_open
6closesys_close
7waitpidsys_waitpid
8creatsys_creat
9linksys_link
10unlinksys_unlink
11execvesys_execve
12chdirsys_chdir
13timesys_time32
14mknodsys_mknod
15chmodsys_chmod
16lchownsys_lchown16
17break
18oldstatsys_stat
19lseeksys_lseek
20getpidsys_getpid
21mountsys_mount
22umountsys_oldumount
23setuidsys_setuid16
24getuidsys_getuid16
25stimesys_stime32
26ptracesys_ptrace
27alarmsys_alarm
28oldfstatsys_fstat
29pausesys_pause
30utimesys_utime32
31stty
32gtty
33accesssys_access
34nicesys_nice
35ftime
36syncsys_sync
37killsys_kill
38renamesys_rename
39mkdirsys_mkdir
40rmdirsys_rmdir
41dupsys_dup
42pipesys_pipe
43timessys_times
44prof
45brksys_brk
46setgidsys_setgid16
47getgidsys_getgid16
48signalsys_signal
49geteuidsys_geteuid16
50getegidsys_getegid16
51acctsys_acct
52umount2sys_umount
53lock
54ioctlsys_ioctl
55fcntlsys_fcntl
56mpx
57setpgidsys_setpgid
58ulimit
59oldoldunamesys_olduname
60umasksys_umask
61chrootsys_chroot
62ustatsys_ustat
63dup2sys_dup2
64getppidsys_getppid
65getpgrpsys_getpgrp
66setsidsys_setsid
67sigactionsys_sigaction
68sgetmasksys_sgetmask
69ssetmasksys_ssetmask
70setreuidsys_setreuid16
71setregidsys_setregid16
72sigsuspendsys_sigsuspend
73sigpendingsys_sigpending
74sethostnamesys_sethostname
75setrlimitsys_setrlimit
76getrlimitsys_old_getrlimit
77getrusagesys_getrusage
78gettimeofdaysys_gettimeofday
79settimeofdaysys_settimeofday
80getgroupssys_getgroups16
81setgroupssys_setgroups16
82selectsys_old_select
83symlinksys_symlink
84oldlstatsys_lstat
85readlinksys_readlink
86uselibsys_uselib
87swaponsys_swapon
88rebootsys_reboot
89readdirsys_old_readdir
90mmapsys_old_mmap
91munmapsys_munmap
92truncatesys_truncate
93ftruncatesys_ftruncate
94fchmodsys_fchmod
95fchownsys_fchown16
96getprioritysys_getpriority
97setprioritysys_setpriority
98profil
99statfssys_statfs
100fstatfssys_fstatfs
101iopermsys_ioperm
102socketcallsys_socketcall
103syslogsys_syslog
104setitimersys_setitimer
105getitimersys_getitimer
106statsys_newstat
107lstatsys_newlstat
108fstatsys_newfstat
109oldunamesys_uname
110ioplsys_iopl
111vhangupsys_vhangup
112idle
113vm86oldsys_vm86old
114wait4sys_wait4
115swapoffsys_swapoff
116sysinfosys_sysinfo
117ipcsys_ipc
118fsyncsys_fsync
119sigreturnsys_sigreturn
120clonesys_clone
121setdomainnamesys_setdomainname
122unamesys_newuname
123modify_ldtsys_modify_ldt
124adjtimexsys_adjtimex_time32
125mprotectsys_mprotect
126sigprocmasksys_sigprocmask
127create_module
128init_modulesys_init_module
129delete_modulesys_delete_module
130get_kernel_syms
131quotactlsys_quotactl
132getpgidsys_getpgid
133fchdirsys_fchdir
134bdflushsys_ni_syscall
135sysfssys_sysfs
136personalitysys_personality
137afs_syscall
138setfsuidsys_setfsuid16
139setfsgidsys_setfsgid16
140_llseeksys_llseek
141getdentssys_getdents
142_newselectsys_select
143flocksys_flock
144msyncsys_msync
145readvsys_readv
146writevsys_writev
147getsidsys_getsid
148fdatasyncsys_fdatasync
149_sysctlsys_ni_syscall
150mlocksys_mlock
151munlocksys_munlock
152mlockallsys_mlockall
153munlockallsys_munlockall
154sched_setparamsys_sched_setparam
155sched_getparamsys_sched_getparam
156sched_setschedulersys_sched_setscheduler
157sched_getschedulersys_sched_getscheduler
158sched_yieldsys_sched_yield
159sched_get_priority_maxsys_sched_get_priority_max
160sched_get_priority_minsys_sched_get_priority_min
161sched_rr_get_intervalsys_sched_rr_get_interval_time32
162nanosleepsys_nanosleep_time32
163mremapsys_mremap
164setresuidsys_setresuid16
165getresuidsys_getresuid16
166vm86sys_vm86
167query_module
168pollsys_poll
169nfsservctl
170setresgidsys_setresgid16
171getresgidsys_getresgid16
172prctlsys_prctl
173rt_sigreturnsys_rt_sigreturn
174rt_sigactionsys_rt_sigaction
175rt_sigprocmasksys_rt_sigprocmask
176rt_sigpendingsys_rt_sigpending
177rt_sigtimedwaitsys_rt_sigtimedwait_time32
178rt_sigqueueinfosys_rt_sigqueueinfo
179rt_sigsuspendsys_rt_sigsuspend
180pread64sys_ia32_pread64
181pwrite64sys_ia32_pwrite64
182chownsys_chown16
183getcwdsys_getcwd
184capgetsys_capget
185capsetsys_capset
186sigaltstacksys_sigaltstack
187sendfilesys_sendfile
188getpmsg
189putpmsg
190vforksys_vfork
191ugetrlimitsys_getrlimit
192mmap2sys_mmap_pgoff
193truncate64sys_ia32_truncate64
194ftruncate64sys_ia32_ftruncate64
195stat64sys_stat64
196lstat64sys_lstat64
197fstat64sys_fstat64
198lchown32sys_lchown
199getuid32sys_getuid
200getgid32sys_getgid
201geteuid32sys_geteuid
202getegid32sys_getegid
203setreuid32sys_setreuid
204setregid32sys_setregid
205getgroups32sys_getgroups
206setgroups32sys_setgroups
207fchown32sys_fchown
208setresuid32sys_setresuid
209getresuid32sys_getresuid
210setresgid32sys_setresgid
211getresgid32sys_getresgid
212chown32sys_chown
213setuid32sys_setuid
214setgid32sys_setgid
215setfsuid32sys_setfsuid
216setfsgid32sys_setfsgid
217pivot_rootsys_pivot_root
218mincoresys_mincore
219madvisesys_madvise
220getdents64sys_getdents64
221fcntl64sys_fcntl64
# 222 is unused
# 223 is unused
224gettidsys_gettid
225readaheadsys_ia32_readahead
226setxattrsys_setxattr
227lsetxattrsys_lsetxattr
228fsetxattrsys_fsetxattr
229getxattrsys_getxattr
230lgetxattrsys_lgetxattr
231fgetxattrsys_fgetxattr
232listxattrsys_listxattr
233llistxattrsys_llistxattr
234flistxattrsys_flistxattr
235removexattrsys_removexattr
236lremovexattrsys_lremovexattr
237fremovexattrsys_fremovexattr
238tkillsys_tkill
239sendfile64sys_sendfile64
240futexsys_futex_time32
241sched_setaffinitysys_sched_setaffinity
242sched_getaffinitysys_sched_getaffinity
243set_thread_areasys_set_thread_area
244get_thread_areasys_get_thread_area
245io_setupsys_io_setup
246io_destroysys_io_destroy
247io_geteventssys_io_getevents_time32
248io_submitsys_io_submit
249io_cancelsys_io_cancel
250fadvise64sys_ia32_fadvise64
# 251 is available for reuse (was briefly sys_set_zone_reclaim)
252exit_groupsys_exit_group
253lookup_dcookiesys_lookup_dcookie
254epoll_createsys_epoll_create
255epoll_ctlsys_epoll_ctl
256epoll_waitsys_epoll_wait
257remap_file_pagessys_remap_file_pages
258set_tid_addresssys_set_tid_address
259timer_createsys_timer_create
260timer_settimesys_timer_settime32
261timer_gettimesys_timer_gettime32
262timer_getoverrunsys_timer_getoverrun
263timer_deletesys_timer_delete
264clock_settimesys_clock_settime32
265clock_gettimesys_clock_gettime32
266clock_getressys_clock_getres_time32
267clock_nanosleepsys_clock_nanosleep_time32
268statfs64sys_statfs64
269fstatfs64sys_fstatfs64
270tgkillsys_tgkill
271utimessys_utimes_time32
272fadvise64_64sys_ia32_fadvise64_64
273vserver
274mbindsys_mbind
275get_mempolicysys_get_mempolicy
276set_mempolicysys_set_mempolicy
277mq_opensys_mq_open
278mq_unlinksys_mq_unlink
279mq_timedsendsys_mq_timedsend_time32
280mq_timedreceivesys_mq_timedreceive_time32
281mq_notifysys_mq_notify
282mq_getsetattrsys_mq_getsetattr
283kexec_loadsys_kexec_load
284waitidsys_waitid
# 285 sys_setaltroot
286add_keysys_add_key
287request_keysys_request_key
288keyctlsys_keyctl
289ioprio_setsys_ioprio_set
290ioprio_getsys_ioprio_get
291inotify_initsys_inotify_init
292inotify_add_watchsys_inotify_add_watch
293inotify_rm_watchsys_inotify_rm_watch
294migrate_pagessys_migrate_pages
295openatsys_openat
296mkdiratsys_mkdirat
297mknodatsys_mknodat
298fchownatsys_fchownat
299futimesatsys_futimesat_time32
300fstatat64sys_fstatat64
301unlinkatsys_unlinkat
302renameatsys_renameat
303linkatsys_linkat
304symlinkatsys_symlinkat
305readlinkatsys_readlinkat
306fchmodatsys_fchmodat
307faccessatsys_faccessat
308pselect6sys_pselect6_time32
309ppollsys_ppoll_time32
310unsharesys_unshare
311set_robust_listsys_set_robust_list
312get_robust_listsys_get_robust_list
313splicesys_splice
314sync_file_rangesys_ia32_sync_file_range
315teesys_tee
316vmsplicesys_vmsplice
317move_pagessys_move_pages
318getcpusys_getcpu
319epoll_pwaitsys_epoll_pwait
320utimensatsys_utimensat_time32
321signalfdsys_signalfd
322timerfd_createsys_timerfd_create
323eventfdsys_eventfd
324fallocatesys_ia32_fallocate
325timerfd_settimesys_timerfd_settime32
326timerfd_gettimesys_timerfd_gettime32
327signalfd4sys_signalfd4
328eventfd2sys_eventfd2
329epoll_create1sys_epoll_create1
330dup3sys_dup3
331pipe2sys_pipe2
332inotify_init1sys_inotify_init1
333preadvsys_preadv
334pwritevsys_pwritev
335rt_tgsigqueueinfosys_rt_tgsigqueueinfo
336perf_event_opensys_perf_event_open
337recvmmsgsys_recvmmsg_time32
338fanotify_initsys_fanotify_init
339fanotify_marksys_fanotify_mark
340prlimit64sys_prlimit64
341name_to_handle_atsys_name_to_handle_at
342open_by_handle_atsys_open_by_handle_at
343clock_adjtimesys_clock_adjtime32
344syncfssys_syncfs
345sendmmsgsys_sendmmsg
346setnssys_setns
347process_vm_readvsys_process_vm_readv
348process_vm_writevsys_process_vm_writev
349kcmpsys_kcmp
350finit_modulesys_finit_module
351sched_setattrsys_sched_setattr
352sched_getattrsys_sched_getattr
353renameat2sys_renameat2
354seccompsys_seccomp
355getrandomsys_getrandom
356memfd_createsys_memfd_create
357bpfsys_bpf
358execveatsys_execveat
359socketsys_socket
360socketpairsys_socketpair
361bindsys_bind
362connectsys_connect
363listensys_listen
364accept4sys_accept4
365getsockoptsys_getsockopt
366setsockoptsys_setsockopt
367getsocknamesys_getsockname
368getpeernamesys_getpeername
369sendtosys_sendto
370sendmsgsys_sendmsg
371recvfromsys_recvfrom
372recvmsgsys_recvmsg
373shutdownsys_shutdown
374userfaultfdsys_userfaultfd
375membarriersys_membarrier
376mlock2sys_mlock2
377copy_file_rangesys_copy_file_range
378preadv2sys_preadv2
379pwritev2sys_pwritev2
380pkey_mprotectsys_pkey_mprotect
381pkey_allocsys_pkey_alloc
382pkey_freesys_pkey_free
383statxsys_statx
384arch_prctlsys_arch_prctl
385io_pgeteventssys_io_pgetevents_time32
386rseqsys_rseq
393semgetsys_semget
394semctlsys_semctl
395shmgetsys_shmget
396shmctlsys_shmctl
397shmatsys_shmat
398shmdtsys_shmdt
399msggetsys_msgget
400msgsndsys_msgsnd
401msgrcvsys_msgrcv
402msgctlsys_msgctl
403clock_gettime64sys_clock_gettime
404clock_settime64sys_clock_settime
405clock_adjtime64sys_clock_adjtime
406clock_getres_time64sys_clock_getres
407clock_nanosleep_time64sys_clock_nanosleep
408timer_gettime64sys_timer_gettime
409timer_settime64sys_timer_settime
410timerfd_gettime64sys_timerfd_gettime
411timerfd_settime64sys_timerfd_settime
412utimensat_time64sys_utimensat
413pselect6_time64sys_pselect6
414ppoll_time64sys_ppoll
416io_pgetevents_time64sys_io_pgetevents
417recvmmsg_time64sys_recvmmsg
418mq_timedsend_time64sys_mq_timedsend
419mq_timedreceive_time64sys_mq_timedreceive
420semtimedop_time64sys_semtimedop
421rt_sigtimedwait_time64sys_rt_sigtimedwait
422futex_time64sys_futex
423sched_rr_get_interval_time64sys_sched_rr_get_interval
424pidfd_send_signalsys_pidfd_send_signal
425io_uring_setupsys_io_uring_setup
426io_uring_entersys_io_uring_enter
427io_uring_registersys_io_uring_register
428open_treesys_open_tree
429move_mountsys_move_mount
430fsopensys_fsopen
431fsconfigsys_fsconfig
432fsmountsys_fsmount
433fspicksys_fspick
434pidfd_opensys_pidfd_open
435clone3sys_clone3
436close_rangesys_close_range
437openat2sys_openat2
438pidfd_getfdsys_pidfd_getfd
439faccessat2sys_faccessat2
440process_madvisesys_process_madvise
441epoll_pwait2sys_epoll_pwait2
442mount_setattrsys_mount_setattr
443quotactl_fdsys_quotactl_fd
444landlock_create_rulesetsys_landlock_create_ruleset
445landlock_add_rulesys_landlock_add_rule
446landlock_restrict_selfsys_landlock_restrict_self
447memfd_secretsys_memfd_secret
448process_mreleasesys_process_mrelease
449futex_waitvsys_futex_waitv
450set_mempolicy_home_nodesys_set_mempolicy_home_node
451pmadv_ksmsys_pmadv_ksm
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 汇编代码实现输出 "Hello World!" 的方式有很多,这里是一个例子: ``` ; Windows 平台下的汇编代码,使用 Microsoft Macro Assembler (MASM) 汇编器 ; 在 Windows 平台下,使用 WriteConsoleA 函数输出字符串 .data hello_world db 'Hello World!', 0 ; 定义字符串变量 hello_world,以 0 结尾 .code mov eax, 4 ; 调用 WriteConsoleA 函数,eax=4 mov ebx, 1 ; 输出到控制台,ebx=1 mov ecx, offset hello_world ; 字符串地址,ecx=&hello_world mov edx, 13 ; 字符串长度,edx=13 int 0x80 ; 调用中断,执行 Write consoleA 函数 ``` 上述代码将会输出 "Hello World!" 到控制台。 需要注意的是,需要使用 Microsoft Macro Assembler (MASM) 汇编器来汇编这段代码。这段代码的输出方式是通过调用 Windows API 函数 WriteConsoleA 实现的,这个函数是在 Windows 平台下常用的输出函数。 希望这段代码能帮到你! ### 回答2: 在Windows平台下使用汇编语言编写代码输出“Hello World!”可以使用汇编语言中的系统调用来实现。以下是一种可能的汇编代码示例: ```assembly section .data message db 'Hello World!',0 message_len equ $-message section .text global _start _start: ; 使用系统调用4(即write)将字符串输出到标准输出 mov eax, 4 mov ebx, 1 mov edx, message_len mov ecx, message int 0x80 ; 使用系统调用1(即exit)退出程序 mov eax, 1 xor ebx, ebx int 0x80 ``` 该代码使用了Linux系统调用接口,因此需要使用Linux下的汇编工具进行汇编和链接。在Windows平台上,可选择使用MinGW-w64等工具链。 可以将上述代码保存为一个文件,例如`hello.asm`,然后使用以下命令进行汇编和链接: ```bash $ nasm -f elf32 hello.asm -o hello.o $ ld -m elf_i386 hello.o -o hello ``` 最后,执行生成的可执行文件: ```bash $ ./hello ``` 执行结果将在命令行中输出“Hello World!”。 ### 回答3: 在Windows平台下,可以使用汇编语言编写一个简单的代码来输出"Hello World!"字符串。以下是一个示例代码: ```assembly section .data hello db 'Hello World!', 0 section .text global _start _start: ; 将字符串"Hello World!"的地址存储到 EDX 寄存器中 mov edx, hello ; 获取字符串长度 mov ecx, 13 ; 文件句柄 stdout 是 1 mov ebx, 1 ; 系统调用 4 表示写入文件 mov eax, 4 ; 执行系统调用,将字符串输出到屏幕 int 0x80 ; 退出程序 mov eax, 1 xor ebx, ebx int 0x80 ``` 以上代码使用x86汇编语言编写,在.data段中定义了一个存储字符串的变量`hello`。在.text段中,使用`mov`指令将字符串地址存储到寄存器EDX中,然后使用`mov`指令将字符串长度存储到寄存器ECX中,将文件句柄stdout存储到寄存器EBX中。接下来,使用`mov`指令将系统调用4存储到寄存器EAX中,表示将要执行的系统调用是写入文件。最后通过`int 0x80`指令触发系统调用,将字符串输出到屏幕上。然后使用`mov`指令将退出程序调用1存储到寄存器EAX中,并使用`int 0x80`指令退出程序。 需要注意的是,汇编语言是与特定的体系结构和操作系统相关的低级语言。所以上述代码仅适用于基于x86体系结构的Windows操作系统。在其他体系结构或操作系统上运行此代码可能会导致错误。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值