Voor een oefening probeer ik een parameter in /proc/sys/kernel te overschrijven.
Het volgende programma build zonder errors: (gcc -Wall):
Alleen als ik het uitvoer (onder root, want die permissies zijn nodig voor deze update) dan blijft de waarde on geupdated. Het volgende programma in C werkt wel precies zoals het moet:
Iemand een idee waarom het eerste programma niet werkt?
(Source voorbeeld code p1): https://www.codeblog.org/...include/asm-i386/unistd.h
Het volgende programma build zonder errors: (gcc -Wall):
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| #include "/usr/include/asm/unistd.h" #include <stdio.h> #include <sys/sysctl.h> int main() { int res = 0; int name[] = { CTL_KERN, KERN_RANDOMIZE }; int new_params[1]; new_params[0] = 0; __asm__ volatile ("push %%ebp ; movl %%eax,%%ebp ; movl %1,%%eax ; int $0x80 ; pop %%ebp" : "=a" (res) : "i" (149),"b" ((long)(name)),"c" ((long)(2)), "d" ((long)(0)),"S" ((long)(0)),"D" ((long)(new_params)), "0" ((long)(4)) : "memory"); return res; } |
Alleen als ik het uitvoer (onder root, want die permissies zijn nodig voor deze update) dan blijft de waarde on geupdated. Het volgende programma in C werkt wel precies zoals het moet:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| #include <stdio.h> #include <sys/sysctl.h> int name[] = { CTL_KERN, KERN_RANDOMIZE }; int printk_params[1]; int new_params[1]; int main() { int paramlth = sizeof(printk_params); new_params[0] = 0; if (sysctl(name, 2, 0, 0, new_params, 4)) { perror("sysctl"); exit(1); } return 0; } |
Iemand een idee waarom het eerste programma niet werkt?
(Source voorbeeld code p1): https://www.codeblog.org/...include/asm-i386/unistd.h