Использование Ubuntu 18.04.3 LTS (GNU / Linux 5.0.21+ x86_64)
Я создал простой системный вызов и пытаюсь передать через него ввод (целое число 5), вызвав его в c запрограммируйте, а затем посмотрите, смогу ли я вернуть ввод. Я получаю случайный мусор как мой вывод, а не как ввод.
Простой системный вызов:
#include<linux/kernel.h>
#include<linux/init.h>
#include<linux/sched.h>
#include<linux/syscalls.h>
#include<linux/signal.h>
#include "tags.h"
asmlinkage int sys_get_tag(int pid)
{
return pid;
}
мой тестовый код пользовательского пространства:
#define _GNU_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>
int main()
{
int pid = syscall(335, 5); // 335 is the syscall number, 5 is the input to the syscall that I am trying to return
printf("return: %d \n", pid);
return 0;
}
мой вывод:
return: 4980568
Я заставляю его работать, когда возвращаю некоторое целое число в моем системном вызове, например return 5; например; так что я знаю, что системный вызов используется.