栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

2020-2021-1 20212824《Linux内核原理与分析》第五周作业

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2020-2021-1 20212824《Linux内核原理与分析》第五周作业

前置知识 系统调用

指令级别

参数传值顺序

EBX,EXC,EDX,ESI,EDI,EBP

系统调用 time系统调用

time_asm.c

#include
#include

int main(){
	time_t tt;
	struct tm *t;
	asm volatile(
		"mov $0,%%ebxnt"
		"mov $0xd,%%eaxnt"
		"int 0x80nt"
		"mov %%eax,%0nt"
		:"=m"(tt)
	);
	t = localtime(&tt);
	printf("time:%d:%d:%d:%d:%d:%d:n",t->tm_year+1900,t->tm_mon,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
	return 0;
}

这个代码有个地方好像是错的
t->tm_mda===>t->tm_mday

rename 系统调用

rename.c

#include
int main(){
	int ret;//承接系统返回值
	char *oldname="hello.c";
	char *newname="newhello.c";
	ret = rename(oldname,newname);
	if(ret == 0)
		printf("Rename ok");
	else
		printf("Rename failed");
	
	return 0;
}



rename_asm.c

#include
int main(){
	int ret;
	char *oldname="hello.c";
	char *newname="newhello.c";
	asm volatile(
		"movl %2,%%ecxnt" //newname是第二个值,所以赋给ecx 
		"movl %1,%%ebxnt" //oldname 是第一个值,所以赋给ebx
		"movl $0x26,%%eaxnt" //rename的系统调用号是38
		:"=a"(ret)
		:"b"(oldname),"c"(newname)
	);
	if(ret ==0 )
		printf("Rename ok!");
	else
		printf("Rename failed");
		return 0;
}


syscall.c

#include
#include
int main(){
	int ret;
	char *oldname="hello.c";
	char *newname="newhello.c";
	ret = syscall(SYS_reanme,oldname,newname);
		if(ret ==0 )
		printf("Rename ok!");
	else
		printf("Rename failed");
		return 0;
遇到问题


估计是因为 实验楼的环境是64位,所以会出错
加上这个,应该就行gcc rename_asm.c -o rename_asm -m32

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/335236.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号