库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 《Linux内核分析》笔记 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 《Linux内核分析》笔记内核态和系统调用操作系统将进程划分为内核态和用户态,用户的程序运行在用户态下,而涉及低级和设备资源的调用在内核态中完成。为了方便用户程序使用各种系统资源,操作系统为我们提供了系统调用,而避免用户之间操作各种系统资源所带来的隐患。实验原理使用系统调用的方式通常有使用库函数调用和中断传入系统调用号的方式两种。库函 阅读详情

<span style="font-family: Arial, 'Hiragino Sans GB', SimSun, 宋体, serif; background-color: rgb(255, 255, 255);">张磊+原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 </span>

使用库函数调用 API。

#include <stdio.h>
#include <unistd.h>

int main()
{
	pid_t fpid;//fpid表示 fork 函数返回的值
	fpid = fork();
	
	if(fpid < 0)
		printf("error in fork!\n");
	else if (fpid == 0)
		printf("I am the child process,my process id is %d\n",getpid());
	else 
		printf("I am the parent process, my process id is %d\n",getpid());

	return 0;

}

调用 fork()后,返回一个 fpid 的值,根据 fpid 的值来判断是父进程还是子进程,或者是库函数 API调用错误。

下面是 C 语言中嵌入汇编代码调用库函数 fork()函数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
pid_t _fork_asm_()
{
	pid_t tt;
	asm volatile(
			"mov $0x2, %%eax\n\t"
			"int $0x80\n\t"
			"mov %%eax, %0\n\t"
			:"=m" (tt)
			);
	return tt;
}
int main(int argc, const char *argv[])
{
	pid_t tt;
	tt = _fork_asm_();
	if (tt == 0)
	{
		printf("I am the child process,my pid is %d\n",getpid());
	}
	else
	{
		printf("I am the parent process,my pid is %d\n",getpid());
	}
	return 0;
}
由于没有参数传入,在嵌入汇编代码时,直接调用
mov $0x2, %%eax

2	i386	fork			sys_fork			stub32_fork
由于 fork 函数在 i386机器中为2号系统调用,所有直接调用2号进程。

int $0x80
系统调用函数结束会产生80号系统中断来还原系统调用之前的现场,程序继续往下执行。

mov %%eax, %0
返回值存储到 eax 中。

执行结果如图






LAP-D协议概述 Q.921协议由称为LAPD(链路访问协议-D通道),与HDLC的关系密切,它是在ISDN D通道上使用的数据链路协议。 注:http://www.freesoft.org/CIE/Topics/125.htm LAP-D的帧格式 标志、位填充技术和FCS校验计算与HDLC一致。 16位的地址包括C/R字段、SAPI(服务访问点标识)和TEI(端点标识)。TEI用于区分使用相同ISDN... 阅读详情

相关推荐

手把手教你用U盘给海信IP501H刷机:GK6323V100C芯片的4.4.2和9.0固件实战

本文详细介绍了海信IP501H电视盒子基于GK6323V100C芯片的刷机实战指南,涵盖Android 4.4.2强刷和Android 9.0免拆刷机两种方案。从工具准备、短接操作到ADB调试,提供全流程解析和常见问题解决方案,帮助用户安全高效地完成刷机操作。

lemon的博客 1456

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

刘森林 原创作品转载请注明出处《Linux内核分析》MOOC课程实验目的 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,理解系统调用的工作机制。 实验过程这一次的实验使用的是我的Linux虚拟机Ubuntu 14.04.2 LTS 64bit 实验截图 time的系统调用号为13,获取当前的系统时间。 编写两段代码,分别使用库函数API和C代码中嵌入汇编代码,源码如下: tim

lsl180236的博客 904

ubuntu安装eigen3.3.7

查看已安装版本: gedit /usr/include/eigen3/Eigen/src/Core/util/Macros.h 或 gedit /usr/local/include/eigen3/Eigen/src/Core/util/Macros.h 卸载先前版本: sudo updatedb locate eigen3 得到eigen库的位置 卸载: sudo rm -rf /usr/include/eigen3 /usr/lib/cmake/eigen3 ...

reason的博客 1万+

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(Linux)

------------------------------------------------------------------- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 -------------------------------------------------------------------

NaiveOrange的博客 1345

浅谈python反序列化漏洞

0x01 python序列化与反序列化 Python 的序列化和反序列化是将一个类对象向字节流转化从而进行存储和传输,然后使用的时候再将字节流转化回原始的对象的一个过程。python中的序列化操作是通过pickle模块,而该模块主要包含l dumps将dict转化为str格式,loads将str格式转化为dict格式。 dump和load与文件操作结合起来, pickle.dump(obj, f...

Lethe's Blog 3220

Material Studio 2024安装避坑指南:从证书配置到权限设置的完整解决方案

本文详细解析了Material Studio 2024的安装流程,从环境准备到权限优化的完整解决方案。针对证书配置、系统权限和计算服务等常见问题,提供了12个关键风险点的避坑指南,帮助科研工作者高效完成安装,提升材料模拟工作的效率。

moon9的博客 772

程序员节开心的学习使用两种方式进行同一系统调用

库函数 API 和 C 代码中嵌入汇编代码两种方式使用同一个系统调用C语言库函数号使用库函数API实现需要用到的函数和头文件说明代码实现过程复现使用C语言中嵌入汇编实现系统调用代码实现过程复现汇编代码调用系统调用的工作过程总结 C语言库函数号 以下是基于linux/x86/arch下的系统调用 系统调用 比如1号就是退出,2号就是read等等。一般要引入库文件比如经典的库文件time.h,math.h,string.h等。 使用库函数API实现 需要用到的函数和头文件说明 接下来我要实现第20号的调用(注

weixin_44240981的博客 331

5nm制程的CV5芯片实测:用它给无人机做8K拍摄和实时避障,功耗和性能到底怎么样?

本文深度评测了5nm制程的CV5芯片在无人机8K拍摄和实时避障中的表现。通过实测数据展示了CV5的异构计算架构、8K视频编码性能和CVflow®AI引擎的加速效果,同时提供了开发中的优化技巧和散热建议,为无人机开发者提供了实用的参考。

weixin_30861797的博客 358

使用库函数 API 和 C 代码中嵌入汇编代码两种方式使用同一个系统调用

直接调用库函数API 首先,进入github的torvalds/linux页面进行syscall_32.tbl文件的查看。该文件即是系统调用列表文件,包含了一系列的定义,例如系统调用的编号、名称、参数列表和实现方法等等内容。在本实验,选择了getpid和getppid系统调用来实现直接调用库函数API。 getpid用于获取调用进程的进程标识号(Process ID,PID),而getppid用于获取调用进程的父进程的进程标识号(Parent Process ID,PPID)。getpid可以帮助进

weixin_67677183的博客 564

多模态论文笔记——VQ-VAE和VQ-VAE-2

本文详细介绍VQ-VAE和VQ-VAE-2的原理和训练过程,为后面的dVAE在DALLE中的使用打下坚实的基础。

haopinglianlian的博客 3299

蓝牙功耗优化实战:连接蓝牙耳机时高耗电问题的深度排查与解决

连接任意一款蓝牙耳机, 进行插入实网SIM卡, 同时连接蓝牙耳机后, 进入IDLE模式, 测试时间为10分钟的测试结果, 平均电流毫安在8左右. 测试结果1: 平均电流 8.84mA 测试结果2: 平均电流 7.39mA 厘清问题: 由于出现上两幅图中 绿色线圈中的 20mA 左右高耗电时段, 从而将整体的平均电流抬高. 于是在记录IDLE下电流出现绿色线圈中的 20mA 左右高耗电时段, 同时录制UART1 Catcher log. Filter: MOD_BT/MOD_ATC.

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 1001

实验四——使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用...

实验目的: 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 实验过程: 查看系统调用列表 get pid 函数 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(int argc, co...

weixin_34178244的博客 263

基于Qt C++开发一款国产化的福昕风格PDF编辑工具

QString text = QInputDialog::getText(this, "文本批注", "输入批注内容:", QLineEdit::Normal, "", &ok);QString savePath = QFileDialog::getSaveFileName(this, "保存加密PDF", "", "PDF文件 (*.pdf)");QAction* zoomInAct = new QAction(QIcon::fromTheme("zoom-in"), "放大", this);

寒寒豆豆软件公司的博客 236

实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

贺邦+原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,理解系统调用的工作机制。 实验过程: 本文实验选择24号和47号系统调用,分别获取当前用户uid(用户ID)和gid(组ID),即模拟...

diluxiao0876的博客 584

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

《Linux操作系统分析》之使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

本篇文章分析的是使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,来说明在Linux系统中,系统调用的实现机制。

WSYW126的博客 1630

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

第4节 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用【Linux内核分析】

原创作品转载请注明出处 +《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000一、实验要求 选择一个系统调用(13号系统调用time除外),系统调用列表参见Cross Reference: syscall_32.tbl 参考视频中的方式使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 二、基础知识 系统调用

林沐风的技术学习专栏 673

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: 跟踪分析Linux内核的启动过程
下一篇: system_call中断处理过程分析
头发吹乱了
博客等级 码龄14年 0粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值