x80指令来执行系统调用,参数使用如下: x86_64引入了一个新指令syscall来执行系统"og:type" content="webpage">x80指令来执行系统调用,参数使用如下: x86_64引入了一个新指令syscall来执行系统" /> x80指令来执行系统调用,参数使用如下: x86_64引入了一个新指令syscall来执行系统"> LINUX系统调用_系统运维_内存溢出

阅读 7

LINUX系统调用,第1张

系统调用是用户程序和linux内核交互的接口,linux的

系统

调用有下面三种方式:

在x86与x86_64的系统中,都可以使用int $0x80指令来执行系统调用,参数

使用如下:

x86_64引入了一个新指令syscall来执行系统调用,参数使用如下:

正常调用库函数( man 3 execve ),传参方式见 x86 调用约定

查看调用号:头文件 /usr/include/asm/unistd.h 内容如下,所以32位和64位的调用号可以分别在unistd_32.h和unistd_64.h中找到

查看参数: man 2 execve

以 execve 为例, man 2 execve 查看其接口如下: int execve(const char *pathname, char *const argv[], char *const envp[])

下面汇编实现了 execve("/bin/sh", 0, 0) :

32位:

64位:
标准的c函数库是所有的编译都要具有的函数库,(实际上还是略有不同),但是这些基本上实现方法略有不同,但是结果和标准是一样的。但是linux的系统调用,调用是linux的系统库,比如说unistd.h下的fork这个是Linux下特有,你在vs上,就没有这个库,也没有这个函数。同样在vs上写c,你可以引入头文件比如windows.h,显然这个库是Linux不具有的。简单说系统调用库根据具体的 *** 作系统环境不同而不同,而c标准库,是所有支持c语言编译器都有的。

欢迎分享,转载请注明来源:

内存溢出

原文地址:

http://outofmemory.cn/yw/7337008.html
略有
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
比特率 比特率 一级用户组
说说在 Linux 中如何修改某个文件所属群组
上一篇
2023-04-04
linux服务器中木马怎么处理
2023-04-04

发表评论
请登录后评论... 登录
提交

    评论列表(0条)
保存
{label} {label} x80指令来执行系统调用,参数使用如下: x86_64引入了一个新指令syscall来执行系统', author : '比特率', cat_name : '系统运维', time_y_m : '2023年04月', time_d : '04', site_motto : '内存溢出' }; {script} {script}