使用库函数API和C代码中嵌入汇编代码两种方式实现对sysinfo的系统调用
来源:互联网 发布:字符串数组拷贝 编辑:程序博客网 时间:2024/06/05 15:45
本例对116号系统调用sysinfo,通过c语言和嵌入式汇编语言来实现。
1.C语言实现过程如下:
打开VIM编辑器边集sysinfo.c文件,如下
#include<stdio.h>#include<sys/sysinfo.h>int main(){ struct sysinfo info; if(sysinfo(&info)<0) { perror("sysinfo failed!"); return -1; } printf("uptime %ld\n",info.uptime); printf("totalram %ld\n",info.totalram); printf("freeswap %ld\n",info.freeswap); return 0;}编译:gcc sysinfo.c -o sysingfo
执行:./sysinfo得到如下结果
2.嵌入式汇编如下:
打开VIM编辑器边集sysinfo_asm.c文件,如下
#include <stdio.h>#include <sys/sysinfo.h>int main(){ struct sysinfo info; asm volatile( "mov $0,%%ebx\n\t" "mov $0xd,%%eax\n\t" "int $0x80\n\t" "mov %%eax,%0\n\t" :"=m"(info) ); printf("uptime %ld\n",info.uptime); printf("totalram %ld\n",info.totalram); printf("freeswap %ld\n",info.freeswap); return 0;}
编译:gcc sysinfo_asm.c -o sysingfo_asm
执行:./sysinfo_asm得到如下结果
sysinfo系统调用的定义文件在sysinfo.h中,结构体如下,
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 */};
本文选择了其中的三个参数,uptime,totalram,freeswap,其他参数的使用方式类同。
0 0
- 使用库函数API和C代码中嵌入汇编代码两种方式实现对sysinfo的系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用系统调用
- 库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- Linux内核分析:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(Linux)
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 《Effective C++》 目录
- java substring与js substr、substring和C# substring的区别
- 第4课时,实践5
- 黑马程序员——零基础学习iOS开发——08 结构体、枚举、typedef
- poj 3211 Washing Cloth 分组背包
- 使用库函数API和C代码中嵌入汇编代码两种方式实现对sysinfo的系统调用
- 为什么Unity5打的空包有17mb?
- 线性回归
- C# 显示过去了多长时间的函数
- 用摊还分析来解决计算成本:Effective c++
- BASIS模块-后台配置的传输
- 单例延迟加载模式
- 可以用信号实现父、子进程之间的同步
- Ubuntu14.04安装ssh服务