通过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. TensorFlow学习笔记——节点(constant、placeholder、Variable)

    一. constant(常量) constant是TensorFlow的常量节点,通过constant方法创建,其是计算图(Computational Graph)中的起始节点,是传入数据. 创建方式 ...

  2. (C/C++学习笔记) 十九. 模板

    十九. 模板 ● 模板的基本概念 模板(template) 函数模板:可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计. 语法: template <<模 ...

  3. sass的加减乘除

    运算 时单位要一样 否则报错 除法时 要加() width: (100px / 2); 符号在已有的数学表达式中时,也会被认作除法符号,就不要加() .box { width: 100px / 2 + ...

  4. Python发送四种格式的post请求的代码样例

    x-www-form-urlencoded: path = "/api/v1/topics/update"params={'accesstoken':'d38a77f0-6f29- ...

  5. js 冒泡事件阻止 父层事件影响子层

    当父层 与子层 有相同的事件时,但子层跟父层执行的内容却不一样时 为了 防止 父层事件对子层造成影响我们可以在子层的方法里做如下操作 function A (event){ event.stopPro ...

  6. DOM&BOM

    文档对象模型(Document Object Model) 来源:文档对象模型(Document Object Model)的历史与20世纪90年代末Netscape Navigator和Micros ...

  7. 关于ArrayList中的iterator返回的事迭代器实例问题。

    Arraylist是一个具体的类,它并没有定义它自己的iterator()方法,,它只是从AbstractList 这个抽象类中继承了iterator()这个方法,而AbstractList 中的it ...

  8. L312 难看懂的

    There are few sadder sights than 8 pile of fan letters ,lovingly decorated with hand drawings,suffer ...

  9. linux的python版本升级

    可利用Linux自带下载工具wget下载,如下所示:     # wget http://www.python.org/ftp/python/2.7.3/Python-2.7.13.tgz 下载完成后 ...

  10. php 怎样将有范围的ip转化为整型范围

    php中将IP转换成整型的函数ip2long()容易出现问题,在IP比较大的情况下,会变成负数.如下: <?php $ip = "192.168.1.2"; $ip_n = ...