movl $1, %eax
movl $0, %ebx
int $0x80
#ifndef _ASM_X86_UNISTD_32_H
#define _ASM_X86_UNISTD_32_H
/*
* This file contains the system call numbers.
*/
#define __NR_restart_syscall 0
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
#define __NR_write 4
#define __NR_open 5
#define __NR_close 6
#define __NR_waitpid 7
#define __NR_creat 8
#define __NR_link 9
#define __NR_unlink 10
| 系统调用 | 描述 |
| brk | 改变数据段长度 |
| mlock | 禁止对内存部分进行分页 |
| mlockall | 禁止对调用进程进行分页 |
| mmap | 把文件或者设备映射到内存中 |
| mprotect | 控制对内存区域的许可访问 |
| mremap | 重新映射虚拟内存地址 |
| msync | 同步文件和内存映射 |
| munlock | 允许对内存部分进行分页 |
| munlockall | 允许对调用进程进行分页 |
| munmap | 取消文件或者设备在内存中的映射 |
| 系统调用 | 描述 |
| access | 检查设备权限 |
| chmod | 改变设备的权限 |
| chown | 改变设备的所有关系 |
| close | 关闭设备文件描述符 |
| dup | 复制设备文件描述符 |
| fcntl | 操作设备描述符 |
| fstat | 获得设备的状态 |
| ioctl | 控制设备的参数 |
| link | 把新的名称分配给设备描述符 |
| lseek | 重新定位读取/写入文件偏移量 |
| mknod | 为设备创建新的文件描述符 |
| open | 为设备或文件打开/创建文件描述符 |
| read | 读取设备文件描述符 |
| write | 写入设备文件描述符 |
| 系统调用 | 描述 |
| chdir | 改变工作目录 |
| chroot | 改变根目录 |
| flock | 在打开的文件上应用或者删除建议锁(advisory lock) |
| statfs | 获得文件系统的统计数据 |
| getcwd | 获得当前工作目录 |
| mkdir | 创建目录 |
| rmdir | 删除目录 |
| symlink | 生成文件的新名称 |
| umask | 设置文件创建掩码 |
| mount | 挂载和卸载文件系统 |
| swapon | 开始内存和文件系统的交换 |
| swapoff | 停止内存和文件系统的交换 |
| 系统调用 | 描述 |
| acct | 打开或者关闭进程计数 |
| capget | 获得进程功能 |
| capset | 设置进程功能 |
| clone | 创建子进程 |
| execve | 执行程序 |
| exit | 终止当前进程 |
| fork | 创建子进程 |
| getgid | 获得组标识 |
| getgrp | 获得/设置进程组 |
| getppid | 获得进程标识 |
| getpriority | 获得程序调度优先权 |
| getuid | 获得用户标识 |
| kill | 发送信号杀死进程 |
| nice | 改变进程优先级 |
| vfork | 创建子进程并且阻塞父进程 |
.section .data
output:
.ascii "This is a test message.\n"
output_end:
.equ len, output_end - output
.section .text
.global _start
_start:
movl $4, %eax
movl $1, %ebx
movl $output, %ecx
movl $len, %edx
int $0x80
movl $1, %eax
movl $0, %ebx
int $0x80
$ ./syscall
This is a test message.
.section .bss
.lcomm pid, 4
.lcomm uid, 4
.lcomm gid, 4
.section .text
.global _start
_start:
movl $20, %eax
int $0x80
movl %eax, pid
movl $24, %eax
int $0x80
movl %eax, uid
movl $47, %eax
int $0x80
movl %eax, gid
end:
movl $1, %eax
movl $0, %ebx
int $0x80
(gdb) x/d &pid
0x80490a4 <pid>: 3347
(gdb) x/d &uid
0x80490a8 <uid>: 1000
(gdb) x/d &gid
0x80490ac <gid>: 1000
#include <sys/sysinfo.h>
int sysinfo (struct sysinfo *info);
struct sysinfo {
long uptime; /* Seconds since boot */
unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
unsigned long totalram; /* Total usable main memory size */
unsigned long freeram; /* Available memory size */
unsigned long sharedram; /* Amount of shared memory */
unsigned long bufferram; /* Memory used by buffers */
unsigned long totalswap; /* Total swap space size */
unsigned long freeswap; /* swap space still available */
unsigned short procs; /* Number of current processes */
unsigned long totalhigh; /* Total high memory size */
unsigned long freehigh; /* Available high memory size */
unsigned int mem_unit; /* Memory unit size in bytes */
char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding for libc5 */
};
.section .data
result:
uptime:
.int 0
loads1:
.int 0
loads2:
.int 0
loads3:
.int 0
totalram:
.int 0
freeram:
.int 0
sharedram:
.int 0
bufferram:
.int 0
totalswap:
.int 0
freeswap:
.int 0
procs:
.byte 0x00, 0x00
totalhigh:
.int 0
freehigh:
.int 0
memunit:
.int 0
charf:
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
retu:
.int 0
.section .text
.global _start
_start:
nop
movl $result, %ebx
movl $116, %eax
int $0x80
movl $0, %ebx
movl $1, %eax
int $0x80
| 欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |