【linux – 如何查找程序使用的系统调用类型】教程文章相关的互联网学习教程文章

在linux中没有超过6个参数的系统调用是真的吗?【代码】

在unistd.h中有_syscall0~_syscall6:_syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6)我的结论是对还是不对?解决方法:看起来该功能接受7个参数(0-6),但这个网页说6 从这里:http://www.win.tue.nl/~aeb/linux/lk/lk-4.htmlEarlier versions of Linux could handleonly four or five system callparameters, and therefore the systemcalls select() (5 parameters) andmmap() (6 parame...

errno,strerror和Linux系统调用【代码】

在使用CRT函数(如fopen)之后,我可以使用strerror来获取errno值的文本表示.如果我使用开放的Linux系统调用而不是CRT函数,它也会在失败时设置errno值.将strerror应用于此errno值是否正确?如果没有,是否有一些Linux系统调用,它与strerror相同?解决方法:是 是 在那里是恐怖的if (-1 == open(....)) {perror("Could not open input file");exit(255) }

替换linux内核3中的系统调用

我有兴趣用我将在linux内核3中实现的自定义替换系统调用.我读到sys调用表不再暴露. 有任何想法吗? 任何对此http://www.linuxtopia.org/online_books/linux_kernel/linux_kernel_module_programming_2.6/x978.html示例的引用,但对于内核3将不胜感激:) 谢谢!解决方法:我建议使用kprobes来完成这种工作,你可以轻松打破任何内核地址(或符号……)并在运行时改变执行路径,所有这一切都需要内核模块,如果你需要:) Kprobes通过中断(例如x...

Linux内核系统调用返回-1而不是{-1,-256}【代码】

我是一个内核新手,面临着一个奇怪的问题.我编写了一个概念验证计算器系统调用,虽然它适用于大多数计算,但当SUBTRACTION结果介于-1到-256之间时它返回-1.如果有人可以对可能发生的事情有所了解,那就会很感激.下面是系统调用代码.SYSCALL_DEFINE3(calc, int, a, int, b , char, op) {int res_int;switch(op) {case '+': res_int = a + b;break;case '-': res_int = a - b;break;case '*': res_int = a * b;break;case '/': res_int =...

复制/移动文件并在Linux中使用系统调用的C应用程序【代码】

我很难进行系统调用来取消链接我的C代码中的文件工作.我希望在复制代码后从文件系统中删除该文件.我收到的错误是:declared here extern int unlink (const char *__name) __THROW __nonnull ((1));#include <stdio.h>#include <unistd.h>#include <errno.h>#include <fcntl.h> int main(int argc, char * args []) {int infile, outfile;int numofbytesread;char buffer[20];infile = open(args[1], O_RDONLY, 0700);if (infile =...

是否有可能实时监控linux下的所有系统调用?

例如,在linux-machine中有很多进程.每个人都可以使用系统调用,但通常很少使用.那么,有一种工具或方式可以显示何时使用系统调用以及哪个进程相关联?解决方法:您可以使用各种工具,如strace,ltrace和许多其他工具,但我不确定您是否希望同时跟踪所有进程. 通常,您会附加到一个感兴趣的进程并跟随其系统调用.

linux – 系统调用如何知道文件描述符属于哪个进程?

我听说文件描述符对每个进程都是唯一的.但是,它们对整个系统来说是独一无二的吗?它们如何在内核中处理?如果文件描述符在系统范围内不是唯一的,那么系统调用(如读,写,关闭等)如何知道它们接收的文件描述符属于哪个进程?解决方法:调用系统调用不涉及更改PID;系统调用只是查看当前PID的FD表.

linux – 如何监控内核执行的系统调用次数?【代码】

我需要监视Linux执行的系统调用量.我知道vmstat能够为BSD和AIX系统显示它,但对于Linux它不能(根据手册页). / proc中有任何计数器吗?或者有没有其他方法来监控它?解决方法:我写了一个简单的SystemTap脚本(基于syscalls_by_pid.stp).它产生如下输出:ProcessName #SysCallsmunin-graph 38609 munin-cron 8160 fping 4502 check_http_demo 2584 check_nrpe 2045 ...

如何通过静态分析找出二进制文件是否在Linux上使用某些系统调用?

我需要找出一个二进制文件是否在Linux上使用epoll或select for socket处理.二进制文件没有被剥离,但我不能在我的linux框中运行它所以没有strace.解决方法:nm< binary>将告诉您哪些符号已定义,更重要的是,这些符号由给定的二进制文件使用.您可以通过检查输出中列出的poll或select中的哪一个来获得保守的猜测. 您可能会发现您的应用程序与两者相关联.在这种情况下,它可能正在做出运行时决定调用哪一个,如果你运行它,你将无法轻易告诉...

Linux系统调用全过程详解【图】

系统调用(SYSTEM CALL) OS内核中都有一组实现系统功能的过程,系统调用就是对上述过程的调用。编程人员利用系统调用,向OS提出服务请求,由OS代为完成。 一般情况下,进程是不能够存取系统内核的。它不能存取内核使用的内存段,也不能调用内核函数,CPU的硬件结构保证了这一点。只有系统调用是一个例外。 统调用是用户态进入内核态的唯一入口:一夫当关,万夫莫开。常用系统调用: 控制硬件:如write/read调用。 设置系统状态或读取...

如何将int / char传递给system()一个Linux系统调用【代码】

好吧,它可能听起来很愚蠢,但我无法想出一种方法将int / char传递给这个系统调用 这是我希望它如何工作system ("cal %d %d", month, year);我希望这会在终端“cal 3 2009”上给我以下命令 终端将向我显示2009年3月的日历. 但编译器抱怨它有太多的论点 有任何想法吗?我需要让这个方法系统(“cal”)给我一个动态日历. 注意:cal取参数cal月份年份解决方法:您需要构建正确的命令行字符串,system()不会为您执行此操作:char cmd[64];sn...

如何在linux中使用execv系统调用?【代码】

我正在编写一个程序,使用execl来执行我的exe文件,该文件正在测试并且它的工作非常好,并在Linux CLI中显示输出.但我不知道如何将execl更改为execv,虽然我知道两个系统调用都会给出相同的值.我对execv系统调用的数组参数感到困惑 这是我的execl示例程序int main(void) {int childpid;if((childpid = fork()) == -1 ) {perror("can't fork");exit(1); }else if(childpid == 0) {execl("./testing","","",(char *)0);exit(0); } else {...

linux – 添加通常对非root用户不可用的“有用”系统调用

我已经实现了一个功能有限的简单Hello World系统调用 – 它只是从用户模式转换到内核模式,打印一条用内核消息记录的消息,然后转换回用户模式. 额外功劳的下一步是添加一个非root用户通常无法使用的有用(新)系统调用. 系统调用可以很简单,但是我很难想出任何想法……有人能指出我正确的方向还是想要轻松实现的东西? (我们给出的提示是使用新的系统调用进行调试!)解决方法:内核结构中有大量关于进程的信息:页面位置,内存统计信息,...

linux – seccomp-bpf如何过滤系统调用?【代码】

我正在调查seccomp-bpf的实现细节,这是自3.5版以来引入Linux的系统调用过滤机制.我查看了Linux 3.10中kernel / seccomp.c的源代码,并想询问一些有关它的问题. 从seccomp.c开始,似乎从__secure_computing()调用seccomp_run_filters()来测试当前进程调用的系统调用.但是查看seccomp_run_filters(),作为参数传递的系统调用号不会在任何地方使用. 似乎sk_run_filter()是BPF过滤器机器的实现,但是从seccomp_run_filters()调用sk_run_fil...

linux – 使用waitid系统调用在程序集中等待克隆的子进程【代码】

我正在尝试等待我克隆的过程.但是,当父进程使syscall等待时,我在使用strace时得到-1 ECHILD.尽管克隆调用返回了创建的子节点的PID,如下所示:clone(child_stack=0x7ffe2b412d10, flags=CLONE_NEWNS|CLONE_NEWUTS|CLONE_NEWIPC|CLONE_NEWPID) = 3735 waitid(P_PID, 3735, NULL, WEXITED, NULL) = -1 ECHILD (No child processes)如果我创建一个重复调用waitid的循环,它最终会给出等待孩子的预期结果.这让我相信,有一些竞争条件,孩子...