# An example Retrieving system information via kernel system calls (通过内核系统调用检索系统信息)
#
# 使用结构体
#
# sysinfo系统调用返回在关于系统如何配置以及可用资源的信息。
#
# struct sysinfo
# {
# long uptime;
# unsigned long loads[3];
# ...
# unsigned int mem_unit;
# char _f[20-2*sizeof(long)-sizeof(int)];
# };
#
.section .data
result:
uptime: # 此处有两个标签。当对程序进行汇编时,它们都指向相同的内存位置。
# result可以用于引用整个结构。
# uptime可以用于引用结构中的第一个值。
.int 0
load1:
.int 0
load5:
.int 0
load15:
.int 0
totalram:
.int 0
freeram:
.int 0
sharedram:
.int 0
bufferram:
.int 0
totalswab:
.int 0
freeswap:
.int 0
procs:
.byte 0x00, 0x00
totalhigh:
.int 0
memunit:
.int 0
.section .text
.globl main
main:
nop
movl $116, %eax # sysinfo()
movl $result, %ebx
int $0x80
movl $1, %eax
movl $0, %ebx
int $0x80
# gcc -g -o 03 03-sysinfo.s -m32
#
# (gdb) x/d &uptime
#
# strace -c ./03 # 截取程序发出的系统调用并且显示它们以供查看。 -c 创建一个报告
# strace -o outfile id # 监视程序系统调用
# strace -e trace=open, connect id # 查看错误系统调用open的原因