centos下关于NASM i386 和x86_64的系统调用

centos下关于NASM i386 和x86_64的系统调用
    • NASM是基于英特尔 x86 架构的汇编与反汇编工具。
    • syscall是x86_64架构中专门做系统调用的指令,可参考 https://en.wikibooks.org/wiki/X86_Assembly/Interfacing_with_Linux?spm=a2c6h.12873639.article-detail.7.56175edcDtsUo0#syscall

下面是Linux系统调用列表(CentOS 7 64bits):   /usr/include/asm/unistd_32.h    i386  /usr/include/asm/unistd_64.h  x86_64

  1 #ifndef _ASM_X86_UNISTD_32_H
  2 #define _ASM_X86_UNISTD_32_H 1
  3 
  4 #define __NR_restart_syscall 0
  5 #define __NR_exit 1
  6 #define __NR_fork 2
  7 #define __NR_read 3
  8 #define __NR_write 4
  9 #define __NR_open 5
 10 #define __NR_close 6
 11 #define __NR_waitpid 7
 12 #define __NR_creat 8
 13 #define __NR_link 9
 14 #define __NR_unlink 10
 15 #define __NR_execve 11
 16 #define __NR_chdir 12
 17 #define __NR_time 13
 18 #define __NR_mknod 14
 19 #define __NR_chmod 15
 20 #define __NR_lchown 16
 21 #define __NR_break 17
 22 #define __NR_oldstat 18
 23 #define __NR_lseek 19
 24 #define __NR_getpid 20
 25 #define __NR_mount 21
 26 #define __NR_umount 22
 27 #define __NR_setuid 23
 28 #define __NR_getuid 24
 29 #define __NR_stime 25
 30 #define __NR_ptrace 26
 31 #define __NR_alarm 27
 32 #define __NR_oldfstat 28
 33 #define __NR_pause 29
 34 #define __NR_utime 30
 35 #define __NR_stty 31
 36 #define __NR_gtty 32
 37 #define __NR_access 33
 38 #define __NR_nice 34
 39 #define __NR_ftime 35
 40 #define __NR_sync 36
 41 #define __NR_kill 37
 42 #define __NR_rename 38
 43 #define __NR_mkdir 39
 44 #define __NR_rmdir 40
 45 #define __NR_dup 41
 46 #define __NR_pipe 42
 47 #define __NR_times 43
 48 #define __NR_prof 44
 49 #define __NR_brk 45
 50 #define __NR_setgid 46
 51 #define __NR_getgid 47
 52 #define __NR_signal 48
 53 #define __NR_geteuid 49
 54 #define __NR_getegid 50
 55 #define __NR_acct 51
 56 #define __NR_umount2 52
 57 #define __NR_lock 53
 58 #define __NR_ioctl 54
 59 #define __NR_fcntl 55
 60 #define __NR_mpx 56
 61 #define __NR_setpgid 57
 62 #define __NR_ulimit 58
 63 #define __NR_oldolduname 59
 64 #define __NR_umask 60
 65 #define __NR_chroot 61
 66 #define __NR_ustat 62
 67 #define __NR_dup2 63
 68 #define __NR_getppid 64
 69 #define __NR_getpgrp 65
 70 #define __NR_setsid 66
 71 #define __NR_sigaction 67
 72 #define __NR_sgetmask 68
 73 #define __NR_ssetmask 69
 74 #define __NR_setreuid 70
 75 #define __NR_setregid 71
 76 #define __NR_sigsuspend 72
 77 #define __NR_sigpending 73
 78 #define __NR_sethostname 74
 79 #define __NR_setrlimit 75
 80 #define __NR_getrlimit 76
 81 #define __NR_getrusage 77
 82 #define __NR_gettimeofday 78
 83 #define __NR_settimeofday 79
 84 #define __NR_getgroups 80
 85 #define __NR_setgroups 81
 86 #define __NR_select 82
 87 #define __NR_symlink 83
 88 #define __NR_oldlstat 84
 89 #define __NR_readlink 85
 90 #define __NR_uselib 86
 91 #define __NR_swapon 87
 92 #define __NR_reboot 88
 93 #define __NR_readdir 89
 94 #define __NR_mmap 90
 95 #define __NR_munmap 91
 96 #define __NR_truncate 92
 97 #define __NR_ftruncate 93
 98 #define __NR_fchmod 94
 99 #define __NR_fchown 95
100 #define __NR_getpriority 96
101 #define __NR_setpriority 97
102 #define __NR_profil 98
103 #define __NR_statfs 99
104 #define __NR_fstatfs 100
105 #define __NR_ioperm 101
106 #define __NR_socketcall 102
107 #define __NR_syslog 103
108 #define __NR_setitimer 104
109 #define __NR_getitimer 105
110 #define __NR_stat 106
111 #define __NR_lstat 107
112 #define __NR_fstat 108
113 #define __NR_olduname 109
114 #define __NR_iopl 110
115 #define __NR_vhangup 111
116 #define __NR_idle 112
117 #define __NR_vm86old 113
118 #define __NR_wait4 114
119 #define __NR_swapoff 115
120 #define __NR_sysinfo 116
121 #define __NR_ipc 117
122 #define __NR_fsync 118
123 #define __NR_sigreturn 119
124 #define __NR_clone 120
125 #define __NR_setdomainname 121
126 #define __NR_uname 122
127 #define __NR_modify_ldt 123
128 #define __NR_adjtimex 124
129 #define __NR_mprotect 125
130 #define __NR_sigprocmask 126
131 #define __NR_create_module 127
132 #define __NR_init_module 128
133 #define __NR_delete_module 129
134 #define __NR_get_kernel_syms 130
135 #define __NR_quotactl 131
136 #define __NR_getpgid 132
137 #define __NR_fchdir 133
138 #define __NR_bdflush 134
139 #define __NR_sysfs 135
140 #define __NR_personality 136
141 #define __NR_afs_syscall 137
142 #define __NR_setfsuid 138
143 #define __NR_setfsgid 139
144 #define __NR__llseek 140
145 #define __NR_getdents 141
146 #define __NR__newselect 142
147 #define __NR_flock 143
148 #define __NR_msync 144
149 #define __NR_readv 145
150 #define __NR_writev 146
151 #define __NR_getsid 147
152 #define __NR_fdatasync 148
153 #define __NR__sysctl 149
154 #define __NR_mlock 150
155 #define __NR_munlock 151
156 #define __NR_mlockall 152
157 #define __NR_munlockall 153
158 #define __NR_sched_setparam 154
159 #define __NR_sched_getparam 155
160 #define __NR_sched_setscheduler 156
161 #define __NR_sched_getscheduler 157
162 #define __NR_sched_yield 158
163 #define __NR_sched_get_priority_max 159
164 #define __NR_sched_get_priority_min 160
165 #define __NR_sched_rr_get_interval 161
166 #define __NR_nanosleep 162
167 #define __NR_mremap 163
168 #define __NR_setresuid 164
169 #define __NR_getresuid 165
170 #define __NR_vm86 166
171 #define __NR_query_module 167
172 #define __NR_poll 168
173 #define __NR_nfsservctl 169
174 #define __NR_setresgid 170
175 #define __NR_getresgid 171
176 #define __NR_prctl 172
177 #define __NR_rt_sigreturn 173
178 #define __NR_rt_sigaction 174
179 #define __NR_rt_sigprocmask 175
180 #define __NR_rt_sigpending 176
181 #define __NR_rt_sigtimedwait 177
182 #define __NR_rt_sigqueueinfo 178
183 #define __NR_rt_sigsuspend 179
184 #define __NR_pread64 180
185 #define __NR_pwrite64 181
186 #define __NR_chown 182
187 #define __NR_getcwd 183
188 #define __NR_capget 184
189 #define __NR_capset 185
190 #define __NR_sigaltstack 186
191 #define __NR_sendfile 187
192 #define __NR_getpmsg 188
193 #define __NR_putpmsg 189
194 #define __NR_vfork 190
195 #define __NR_ugetrlimit 191
196 #define __NR_mmap2 192
197 #define __NR_truncate64 193
198 #define __NR_ftruncate64 194
199 #define __NR_stat64 195
200 #define __NR_lstat64 196
201 #define __NR_fstat64 197
202 #define __NR_lchown32 198
203 #define __NR_getuid32 199
204 #define __NR_getgid32 200
205 #define __NR_geteuid32 201
206 #define __NR_getegid32 202
207 #define __NR_setreuid32 203
208 #define __NR_setregid32 204
209 #define __NR_getgroups32 205
210 #define __NR_setgroups32 206
211 #define __NR_fchown32 207
212 #define __NR_setresuid32 208
213 #define __NR_getresuid32 209
214 #define __NR_setresgid32 210
215 #define __NR_getresgid32 211
216 #define __NR_chown32 212
217 #define __NR_setuid32 213
218 #define __NR_setgid32 214
219 #define __NR_setfsuid32 215
220 #define __NR_setfsgid32 216
221 #define __NR_pivot_root 217
222 #define __NR_mincore 218
223 #define __NR_madvise 219
224 #define __NR_getdents64 220
225 #define __NR_fcntl64 221
226 #define __NR_gettid 224
227 #define __NR_readahead 225
228 #define __NR_setxattr 226
229 #define __NR_lsetxattr 227
230 #define __NR_fsetxattr 228
231 #define __NR_getxattr 229
232 #define __NR_lgetxattr 230
233 #define __NR_fgetxattr 231
234 #define __NR_listxattr 232
235 #define __NR_llistxattr 233
236 #define __NR_flistxattr 234
237 #define __NR_removexattr 235
238 #define __NR_lremovexattr 236
239 #define __NR_fremovexattr 237
240 #define __NR_tkill 238
241 #define __NR_sendfile64 239
242 #define __NR_futex 240
243 #define __NR_sched_setaffinity 241
244 #define __NR_sched_getaffinity 242
245 #define __NR_set_thread_area 243
246 #define __NR_get_thread_area 244
247 #define __NR_io_setup 245
248 #define __NR_io_destroy 246
249 #define __NR_io_getevents 247
250 #define __NR_io_submit 248
251 #define __NR_io_cancel 249
252 #define __NR_fadvise64 250
253 #define __NR_exit_group 252
254 #define __NR_lookup_dcookie 253
255 #define __NR_epoll_create 254
256 #define __NR_epoll_ctl 255
257 #define __NR_epoll_wait 256
258 #define __NR_remap_file_pages 257
259 #define __NR_set_tid_address 258
260 #define __NR_timer_create 259
261 #define __NR_timer_settime 260
262 #define __NR_timer_gettime 261
263 #define __NR_timer_getoverrun 262
264 #define __NR_timer_delete 263
265 #define __NR_clock_settime 264
266 #define __NR_clock_gettime 265
267 #define __NR_clock_getres 266
268 #define __NR_clock_nanosleep 267
269 #define __NR_statfs64 268
270 #define __NR_fstatfs64 269
271 #define __NR_tgkill 270
272 #define __NR_utimes 271
273 #define __NR_fadvise64_64 272
274 #define __NR_vserver 273
275 #define __NR_mbind 274
276 #define __NR_get_mempolicy 275
277 #define __NR_set_mempolicy 276
278 #define __NR_mq_open 277
279 #define __NR_mq_unlink 278
280 #define __NR_mq_timedsend 279
281 #define __NR_mq_timedreceive 280
282 #define __NR_mq_notify 281
283 #define __NR_mq_getsetattr 282
284 #define __NR_kexec_load 283
285 #define __NR_waitid 284
286 #define __NR_add_key 286
287 #define __NR_request_key 287
288 #define __NR_keyctl 288
289 #define __NR_ioprio_set 289
290 #define __NR_ioprio_get 290
291 #define __NR_inotify_init 291
292 #define __NR_inotify_add_watch 292
293 #define __NR_inotify_rm_watch 293
294 #define __NR_migrate_pages 294
295 #define __NR_openat 295
296 #define __NR_mkdirat 296
297 #define __NR_mknodat 297
298 #define __NR_fchownat 298
299 #define __NR_futimesat 299
300 #define __NR_fstatat64 300
301 #define __NR_unlinkat 301
302 #define __NR_renameat 302
303 #define __NR_linkat 303
304 #define __NR_symlinkat 304
305 #define __NR_readlinkat 305
306 #define __NR_fchmodat 306
307 #define __NR_faccessat 307
308 #define __NR_pselect6 308
309 #define __NR_ppoll 309
310 #define __NR_unshare 310
311 #define __NR_set_robust_list 311
312 #define __NR_get_robust_list 312
313 #define __NR_splice 313
314 #define __NR_sync_file_range 314
315 #define __NR_tee 315
316 #define __NR_vmsplice 316
317 #define __NR_move_pages 317
318 #define __NR_getcpu 318
319 #define __NR_epoll_pwait 319
320 #define __NR_utimensat 320
321 #define __NR_signalfd 321
322 #define __NR_timerfd_create 322
323 #define __NR_eventfd 323
324 #define __NR_fallocate 324
325 #define __NR_timerfd_settime 325
326 #define __NR_timerfd_gettime 326
327 #define __NR_signalfd4 327
328 #define __NR_eventfd2 328
329 #define __NR_epoll_create1 329
330 #define __NR_dup3 330
331 #define __NR_pipe2 331
332 #define __NR_inotify_init1 332
333 #define __NR_preadv 333
334 #define __NR_pwritev 334
335 #define __NR_rt_tgsigqueueinfo 335
336 #define __NR_perf_event_open 336
337 #define __NR_recvmmsg 337
338 #define __NR_fanotify_init 338
339 #define __NR_fanotify_mark 339
340 #define __NR_prlimit64 340
341 #define __NR_name_to_handle_at 341
342 #define __NR_open_by_handle_at 342
343 #define __NR_clock_adjtime 343
344 #define __NR_syncfs 344
345 #define __NR_sendmmsg 345
346 #define __NR_setns 346
347 #define __NR_process_vm_readv 347
348 #define __NR_process_vm_writev 348
349 #define __NR_kcmp 349
350 #define __NR_finit_module 350
351 #define __NR_sched_setattr 351
352 #define __NR_sched_getattr 352
353 #define __NR_seccomp 354
354 #define __NR_getrandom 355
355 #define __NR_memfd_create 356
356 #define __NR_bpf 357
357 #define __NR_userfaultfd 374
358 #define __NR_membarrier 375
359 #define __NR_mlock2 376
360 #define __NR_copy_file_range 377
361 #define __NR_pkey_mprotect 380
362 #define __NR_pkey_alloc 381
363 #define __NR_pkey_free 382
364 
365 #endif /* _ASM_X86_UNISTD_32_H */

下面是x86_64:

  1 #ifndef _ASM_X86_UNISTD_64_H
  2 #define _ASM_X86_UNISTD_64_H 1
  3 
  4 #define __NR_read 0
  5 #define __NR_write 1
  6 #define __NR_open 2
  7 #define __NR_close 3
  8 #define __NR_stat 4
  9 #define __NR_fstat 5
 10 #define __NR_lstat 6
 11 #define __NR_poll 7
 12 #define __NR_lseek 8
 13 #define __NR_mmap 9
 14 #define __NR_mprotect 10
 15 #define __NR_munmap 11
 16 #define __NR_brk 12
 17 #define __NR_rt_sigaction 13
 18 #define __NR_rt_sigprocmask 14
 19 #define __NR_rt_sigreturn 15
 20 #define __NR_ioctl 16
 21 #define __NR_pread64 17
 22 #define __NR_pwrite64 18
 23 #define __NR_readv 19
 24 #define __NR_writev 20
 25 #define __NR_access 21
 26 #define __NR_pipe 22
 27 #define __NR_select 23
 28 #define __NR_sched_yield 24
 29 #define __NR_mremap 25
 30 #define __NR_msync 26
 31 #define __NR_mincore 27
 32 #define __NR_madvise 28
 33 #define __NR_shmget 29
 34 #define __NR_shmat 30
 35 #define __NR_shmctl 31
 36 #define __NR_dup 32
 37 #define __NR_dup2 33
 38 #define __NR_pause 34
 39 #define __NR_nanosleep 35
 40 #define __NR_getitimer 36
 41 #define __NR_alarm 37
 42 #define __NR_setitimer 38
 43 #define __NR_getpid 39
 44 #define __NR_sendfile 40
 45 #define __NR_socket 41
 46 #define __NR_connect 42
 47 #define __NR_accept 43
 48 #define __NR_sendto 44
 49 #define __NR_recvfrom 45
 50 #define __NR_sendmsg 46
 51 #define __NR_recvmsg 47
 52 #define __NR_shutdown 48
 53 #define __NR_bind 49
 54 #define __NR_listen 50
 55 #define __NR_getsockname 51
 56 #define __NR_getpeername 52
 57 #define __NR_socketpair 53
 58 #define __NR_setsockopt 54
 59 #define __NR_getsockopt 55
 60 #define __NR_clone 56
 61 #define __NR_fork 57
 62 #define __NR_vfork 58
 63 #define __NR_execve 59
 64 #define __NR_exit 60
 65 #define __NR_wait4 61
 66 #define __NR_kill 62
 67 #define __NR_uname 63
 68 #define __NR_semget 64
 69 #define __NR_semop 65
 70 #define __NR_semctl 66
 71 #define __NR_shmdt 67
 72 #define __NR_msgget 68
 73 #define __NR_msgsnd 69
 74 #define __NR_msgrcv 70
 75 #define __NR_msgctl 71
 76 #define __NR_fcntl 72
 77 #define __NR_flock 73
 78 #define __NR_fsync 74
 79 #define __NR_fdatasync 75
 80 #define __NR_truncate 76
 81 #define __NR_ftruncate 77
 82 #define __NR_getdents 78
 83 #define __NR_getcwd 79
 84 #define __NR_chdir 80
 85 #define __NR_fchdir 81
 86 #define __NR_rename 82
 87 #define __NR_mkdir 83
 88 #define __NR_rmdir 84
 89 #define __NR_creat 85
 90 #define __NR_link 86
 91 #define __NR_unlink 87
 92 #define __NR_symlink 88
 93 #define __NR_readlink 89
 94 #define __NR_chmod 90
 95 #define __NR_fchmod 91
 96 #define __NR_chown 92
 97 #define __NR_fchown 93
 98 #define __NR_lchown 94
 99 #define __NR_umask 95
100 #define __NR_gettimeofday 96
101 #define __NR_getrlimit 97
102 #define __NR_getrusage 98
103 #define __NR_sysinfo 99
104 #define __NR_times 100
105 #define __NR_ptrace 101
106 #define __NR_getuid 102
107 #define __NR_syslog 103
108 #define __NR_getgid 104
109 #define __NR_setuid 105
110 #define __NR_setgid 106
111 #define __NR_geteuid 107
112 #define __NR_getegid 108
113 #define __NR_setpgid 109
114 #define __NR_getppid 110
115 #define __NR_getpgrp 111
116 #define __NR_setsid 112
117 #define __NR_setreuid 113
118 #define __NR_setregid 114
119 #define __NR_getgroups 115
120 #define __NR_setgroups 116
121 #define __NR_setresuid 117
122 #define __NR_getresuid 118
123 #define __NR_setresgid 119
124 #define __NR_getresgid 120
125 #define __NR_getpgid 121
126 #define __NR_setfsuid 122
127 #define __NR_setfsgid 123
128 #define __NR_getsid 124
129 #define __NR_capget 125
130 #define __NR_capset 126
131 #define __NR_rt_sigpending 127
132 #define __NR_rt_sigtimedwait 128
133 #define __NR_rt_sigqueueinfo 129
134 #define __NR_rt_sigsuspend 130
135 #define __NR_sigaltstack 131
136 #define __NR_utime 132
137 #define __NR_mknod 133
138 #define __NR_uselib 134
139 #define __NR_personality 135
140 #define __NR_ustat 136
141 #define __NR_statfs 137
142 #define __NR_fstatfs 138
143 #define __NR_sysfs 139
144 #define __NR_getpriority 140
145 #define __NR_setpriority 141
146 #define __NR_sched_setparam 142
147 #define __NR_sched_getparam 143
148 #define __NR_sched_setscheduler 144
149 #define __NR_sched_getscheduler 145
150 #define __NR_sched_get_priority_max 146
151 #define __NR_sched_get_priority_min 147
152 #define __NR_sched_rr_get_interval 148
153 #define __NR_mlock 149
154 #define __NR_munlock 150
155 #define __NR_mlockall 151
156 #define __NR_munlockall 152
157 #define __NR_vhangup 153
158 #define __NR_modify_ldt 154
159 #define __NR_pivot_root 155
160 #define __NR__sysctl 156
161 #define __NR_prctl 157
162 #define __NR_arch_prctl 158
163 #define __NR_adjtimex 159
164 #define __NR_setrlimit 160
165 #define __NR_chroot 161
166 #define __NR_sync 162
167 #define __NR_acct 163
168 #define __NR_settimeofday 164
169 #define __NR_mount 165
170 #define __NR_umount2 166
171 #define __NR_swapon 167
172 #define __NR_swapoff 168
173 #define __NR_reboot 169
174 #define __NR_sethostname 170
175 #define __NR_setdomainname 171
176 #define __NR_iopl 172
177 #define __NR_ioperm 173
178 #define __NR_create_module 174
179 #define __NR_init_module 175
180 #define __NR_delete_module 176
181 #define __NR_get_kernel_syms 177
182 #define __NR_query_module 178
183 #define __NR_quotactl 179
184 #define __NR_nfsservctl 180
185 #define __NR_getpmsg 181
186 #define __NR_putpmsg 182
187 #define __NR_afs_syscall 183
188 #define __NR_tuxcall 184
189 #define __NR_security 185
190 #define __NR_gettid 186
191 #define __NR_readahead 187
192 #define __NR_setxattr 188
193 #define __NR_lsetxattr 189
194 #define __NR_fsetxattr 190
195 #define __NR_getxattr 191
196 #define __NR_lgetxattr 192
197 #define __NR_fgetxattr 193
198 #define __NR_listxattr 194
199 #define __NR_llistxattr 195
200 #define __NR_flistxattr 196
201 #define __NR_removexattr 197
202 #define __NR_lremovexattr 198
203 #define __NR_fremovexattr 199
204 #define __NR_tkill 200
205 #define __NR_time 201
206 #define __NR_futex 202
207 #define __NR_sched_setaffinity 203
208 #define __NR_sched_getaffinity 204
209 #define __NR_set_thread_area 205
210 #define __NR_io_setup 206
211 #define __NR_io_destroy 207
212 #define __NR_io_getevents 208
213 #define __NR_io_submit 209
214 #define __NR_io_cancel 210
215 #define __NR_get_thread_area 211
216 #define __NR_lookup_dcookie 212
217 #define __NR_epoll_create 213
218 #define __NR_epoll_ctl_old 214
219 #define __NR_epoll_wait_old 215
220 #define __NR_remap_file_pages 216
221 #define __NR_getdents64 217
222 #define __NR_set_tid_address 218
223 #define __NR_restart_syscall 219
224 #define __NR_semtimedop 220
225 #define __NR_fadvise64 221
226 #define __NR_timer_create 222
227 #define __NR_timer_settime 223
228 #define __NR_timer_gettime 224
229 #define __NR_timer_getoverrun 225
230 #define __NR_timer_delete 226
231 #define __NR_clock_settime 227
232 #define __NR_clock_gettime 228
233 #define __NR_clock_getres 229
234 #define __NR_clock_nanosleep 230
235 #define __NR_exit_group 231
236 #define __NR_epoll_wait 232
237 #define __NR_epoll_ctl 233
238 #define __NR_tgkill 234
239 #define __NR_utimes 235
240 #define __NR_vserver 236
241 #define __NR_mbind 237
242 #define __NR_set_mempolicy 238
243 #define __NR_get_mempolicy 239
244 #define __NR_mq_open 240
245 #define __NR_mq_unlink 241
246 #define __NR_mq_timedsend 242
247 #define __NR_mq_timedreceive 243
248 #define __NR_mq_notify 244
249 #define __NR_mq_getsetattr 245
250 #define __NR_kexec_load 246
251 #define __NR_waitid 247
252 #define __NR_add_key 248
253 #define __NR_request_key 249
254 #define __NR_keyctl 250
255 #define __NR_ioprio_set 251
256 #define __NR_ioprio_get 252
257 #define __NR_inotify_init 253
258 #define __NR_inotify_add_watch 254
259 #define __NR_inotify_rm_watch 255
260 #define __NR_migrate_pages 256
261 #define __NR_openat 257
262 #define __NR_mkdirat 258
263 #define __NR_mknodat 259
264 #define __NR_fchownat 260
265 #define __NR_futimesat 261
266 #define __NR_newfstatat 262
267 #define __NR_unlinkat 263
268 #define __NR_renameat 264
269 #define __NR_linkat 265
270 #define __NR_symlinkat 266
271 #define __NR_readlinkat 267
272 #define __NR_fchmodat 268
273 #define __NR_faccessat 269
274 #define __NR_pselect6 270
275 #define __NR_ppoll 271
276 #define __NR_unshare 272
277 #define __NR_set_robust_list 273
278 #define __NR_get_robust_list 274
279 #define __NR_splice 275
280 #define __NR_tee 276
281 #define __NR_sync_file_range 277
282 #define __NR_vmsplice 278
283 #define __NR_move_pages 279
284 #define __NR_utimensat 280
285 #define __NR_epoll_pwait 281
286 #define __NR_signalfd 282
287 #define __NR_timerfd_create 283
288 #define __NR_eventfd 284
289 #define __NR_fallocate 285
290 #define __NR_timerfd_settime 286
291 #define __NR_timerfd_gettime 287
292 #define __NR_accept4 288
293 #define __NR_signalfd4 289
294 #define __NR_eventfd2 290
295 #define __NR_epoll_create1 291
296 #define __NR_dup3 292
297 #define __NR_pipe2 293
298 #define __NR_inotify_init1 294
299 #define __NR_preadv 295
300 #define __NR_pwritev 296
301 #define __NR_rt_tgsigqueueinfo 297
302 #define __NR_perf_event_open 298
303 #define __NR_recvmmsg 299
304 #define __NR_fanotify_init 300
305 #define __NR_fanotify_mark 301
306 #define __NR_prlimit64 302
307 #define __NR_name_to_handle_at 303
308 #define __NR_open_by_handle_at 304
309 #define __NR_clock_adjtime 305
310 #define __NR_syncfs 306
311 #define __NR_sendmmsg 307
312 #define __NR_setns 308
313 #define __NR_getcpu 309
314 #define __NR_process_vm_readv 310
315 #define __NR_process_vm_writev 311
316 #define __NR_kcmp 312
317 #define __NR_finit_module 313
318 #define __NR_sched_setattr 314
319 #define __NR_sched_getattr 315
320 #define __NR_renameat2 316
321 #define __NR_seccomp 317
322 #define __NR_getrandom 318
323 #define __NR_memfd_create 319
324 #define __NR_kexec_file_load 320
325 #define __NR_bpf 321
326 #define __NR_userfaultfd 323
327 #define __NR_membarrier 324
328 #define __NR_mlock2 325
329 #define __NR_copy_file_range 326
330 #define __NR_pkey_mprotect 329
331 #define __NR_pkey_alloc 330
332 #define __NR_pkey_free 331
333 
334 #endif /* _ASM_X86_UNISTD_64_H */

可以看到 i386 的 1 号调用是exit , x86_64的1号调用是write , 60号调用才是exit , 这是二者系统调用表的区别

让我们来看下二者调用的参数顺序以及系统调用的指令:man syscall

可以看到 i386系统调用指令是 int 0x80 , 参数是 eax , 返回值是 eax ,  x86_64 的系统调用指令是 syscall , 参数是 rax, 返回值是 rax

i386的参数顺序依次是:ebx,ecx,edx,esi,edi,ebp, x86_64的参数顺序依次是 rdi,rsi,rdx,r10,r8,r9

 

section .data
msg: db "HELLO WORLD"
section .text
global main
main:
        mov edx,11      ;length of the message, and the 3rd parameter
        mov ecx,msg     ; the 2nd parameter
        mov ebx,1       ;syscall write 1st parameter
        mov eax,4       ; the 4th syscall function
        int 0x80        ; syscall instruction

        mov ebx,0       ; return 0
        mov eax,1       ; the 1st syscall function
        int 0x80        ; syscall instruction

 调试指令是: nasm -felf -F dwarf  hello.s -o hello.o && ld -m elf_i386 -g hello.o -o hello && gdb hello

下面是x86_64的代码:

section .data
msg: db "HELLO WORLD"
section .text
global main
main:
        ;mov edx,11     ;length of the message, and the 3rd parameter
        ;mov ecx,msg    ; the 2nd parameter
        ;mov ebx,1      ;syscall write 1st parameter
        ;mov eax,4      ; the 4th syscall function
        ;int 0x80       ; syscall instruction

        ;mov ebx,0      ; return 0
        ;mov eax,1      ; the 1st syscall function
        ;int 0x80       ; syscall instruction

        mov rax,1       ; parameter of  1st syscall function
        mov rdi,1       ; 1st parameter
        mov rsi,msg     ; 2nd parameter
        mov rdx,11      ; 3rd parameter
        syscall

        mov rax,60      ; call 60th function called exit
        mov rdi,0       ; exit with returned 0
        syscall

编译命令是:        nasm -felf64 -F dwarf  hello.s -o hello.o && gcc -o hello hello.o
或者:nasm -f elf64 -F dwarf  hello.s -o hello.o && ld -m  elf_x86_64 -o hello hello.o -lc --dynamic-linker /usr/lib64/ld-2.17.so
如果使用了c 库函数,则需要连接时加上 -lc --dynamic-linker /usr/lib64/ld-2.17.so

posted @ 2023-10-07 13:30  fingerecho  阅读(173)  评论(0)    收藏  举报