通过glibc提供的库函数

[23:02:14] gcc chmodtest.c
[23:02:17] ls -l kali //记得先创建这个文件
-rwxrwxrwx. 1 root root 0 May 10 22:56 kali
[23:02:25] ./a.out
chmod succeed
[23:02:29] ls -l kali
-rw-rw-rw-. 1 root root 0 May 10 22:56 kali
[23:02:34] cat chmodtest.c
#include<stdio.h>
int main()
{
int rc=chmod("./kali",0666); //这个必须是4个数字,我用三个数,发现修改的权限对不上
if(rc==-1)
{
perror("chmod fail\n"); //这个是用来打印错误的
}
else
printf("chmod succeed\n");
return 0;
}
[23:02:46]

通过syscall直接调用

[23:10:58] gcc chmodtest1.c
[23:11:01] ls -l kali
-rw-rw-rw-. 1 root root 0 May 10 22:56 kali
[23:11:06] ./a.out
chmod succeed
[23:11:09] ls -l kali
-rwxrwxrwx. 1 root root 0 May 10 22:56 kali
[23:11:13] cat chmodtest1.c
#include<stdio.h>
#include<unistd.h>
#include<sys/syscall.h>
int main()
{
int rc=syscall(SYS_chmod,"./kali",0777);//syscall在头文件unistd.h中,SYS_chmod在头文件syscall.h中
if(rc==-1)
{
perror("chmod fail\n");
}
else
printf("chmod succeed\n");
return 0;
}
[23:11:18]

通过 int 指令陷入(还没有理解是什么意思)

#include <stdio.h>
#include <sys/types.h>
#include <sys/syscall.h>
#include <errno.h> int main()
{
long rc;
char *file_name = "/etc/passwd";
unsigned short mode = 0444; asm(
"int $0x80"
: "=a" (rc)
: "0" (SYS_chmod), "b" ((long)file_name), "c" ((long)mode)
); if ((unsigned long)rc >= (unsigned long)-132) {
errno = -rc;
rc = -1;
} if (rc == -1)
fprintf(stderr, "chmode failed, errno = %d\n", errno);
else
printf("success!\n"); return 0;
}

linux系统调用的三种方法的更多相关文章

  1. Linux 下系统调用的三种方法

    系统调用(System Call)是操作系统为在用户态运行的进程与硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口.当用户进程需要发生系统调用时,CPU 通过软中断切换到内核态开始执行内核系 ...

  2. linux 安装软件三种方法

    引言 在ubuntu当中,安装应用程序我所知道的有三种方法,分别是apt-get,dpkg安装deb和make install安装源码包三种.下面针对每一种方法各举例来说明. apt-get方法 使用 ...

  3. linux设置网络三种方法

    http://blog.csdn.net/u010003835/article/details/52233296

  4. linux 环境变量PATH路径的三种方法

    转:http://www.jb51.net/LINUXjishu/150167.html 总结:修改1.#PATH=$PATH:/etc/apache/bin  或者#vi /etc/profile ...

  5. Linux系统下修改环境变量PATH路径的三种方法

    这里介绍Linux的知识,比如把/etc/apache/bin目录添加到PATH中有三种方法,看完之后你将学会Linux系统下如何修改环境变量PATH路径,需要的朋友可以参考下 电脑中必不可少的就是操 ...

  6. linux动态库默认搜索路径设置的三种方法

    众所周知, Linux 动态库的默认搜索路径是 /lib 和 /usr/lib .动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库, 并且该动态库还未加载到内存中,则系统会自动到这两 ...

  7. Linux添加系统调用的两种方法

    前言 系统调用的基本原理 系统调用其实就是函数调用,只不过调用的是内核态的函数,但是我们知道,用户态是不能随意调用内核态的函数的,所以采用软中断的方式从用户态陷入到内核态.在内核中通过软中断0X80, ...

  8. linux清空文件内容的三种方法

    linux系统中清空文件内容的三种方法 1.使用vi/vim命令打开文件后,输入"%d"清空,后保存即可.但当文件内容较大时,处理较慢,命令如下:vim file_name:%d: ...

  9. Ubuntu Linux系统三种方法添加本地软件库

    闲着没事教教大家以Ubuntu Linux系统三种方法添加本地软件库,ubuntu Linux使用本地软件包作为安装源——转2007-04-26 19:47新手重新系统的概率很高,每次重装系统后都要经 ...

随机推荐

  1. 当你有双网络(内部网+互联网)时,如何透明NAT给其他电脑上网。虚拟机+爱快

    一:简介 具体环境是这样的:单位没有提供互联网连接,都是内部网,linux服务器,无法连接源更新,docker无法pull镜像,python无法在线pip安装包. 真是郁闷到想死啊. 好在我的笔记本有 ...

  2. Java 整体测试重点题 错题积累

    重点题    错题积累 1: 解析: %d:用来设置输出日志的日期和时间 %m:用来输出代码中指定的消息 %n:用来输出一个回车换行符 %l:用来输出日志事件的发生位置 %p:用来输出优先级 %f:用 ...

  3. webView 的种种

    1.关于UI 我们在设置webview的时候,有时候会发现在加载的过程中会出现一个黑色的条条,在加载完成的时候有得时候继续存在,有得时候消失不见. 这个黑边是由于webView.scrollview向 ...

  4. Scrapy结构

    http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html scrapy 使用Twisted 这个异步网络库来处理网络通信,使用pyt ...

  5. Cracking The Coding Interview3.3

    //Imagine a (literal) stack of plates. If the stack gets too high, it might topple. Therefore, in re ...

  6. 3.4 C++名字隐藏

    参数:http://www.weixueyuan.net/view/6361.html 总结: 如果派生类中新增一个成员变量,该成员变量与基类中的成员变量同名,则新增的成员变量就会遮蔽从基类中继承过来 ...

  7. chmod +x 和 chmod u+x的区别

    常用: chmod a+x tomcat u 代表用户. g 代表用户组. o 代表其他. a 代表所有. 这意味着chmod u+x somefile 只授予这个文件的所属者执行的权限 而 chmo ...

  8. easyui再学习的一部分代码

    <%-- Created by IntelliJ IDEA. User: zhen Date: // Time: : To change this template use File | Set ...

  9. Spring学习三

    Spring注解来注入bean 在classpath中扫描组件 组件扫描,即componetscanning 利用注解来扫描的组件有  @Component  :基本注解,表示一个受Spring管理的 ...

  10. L259 合同

    We are satisfied with the terms of this contract for the most part, but we feel that your terms of p ...