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

阅读 23

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位:

gcc的默认函数调用约定是stdcall。 GNU编译器

套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU *** 作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。
Linux下对文件 *** 作有两种方式:系统调用(system call)和库函数调用(Library functions)。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api...

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

内存溢出

原文地址:

http://outofmemory.cn/yw/7667642.html
方式
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
约翰逊斯嘉丽 约翰逊斯嘉丽 一级用户组
如何在VC6.0环境下编译linux程序
上一篇
2023-04-08
Linux用户适合用HHKB键盘吗?有用过的吗?
2023-04-08

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

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