Toon posts:

[C/ASM] syscall 149, 6 arguments struct

Pagina: 1
Acties:

Onderwerpen


  • shad0w_crash
  • Registratie: januari 2006
  • Laatst online: 26-08-2019
Voor een oefening probeer ik een parameter in /proc/sys/kernel te overschrijven.
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

  • Vaan Banaan
  • Registratie: februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Ik zou zweren dat eerst in het ASM ding int new_param[0] stond, maar dat zal dan wel niet.
Ik heb even het stukje syscall6 uit de source gehaald, dat maakt het voor anderen misschien wat makkelijker de regels te vergelijken met wat je nu hebt.
maak je eigen code tags even [code=C], dat leest wat prettiger
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
157: #define __NR__sysctl            149

383: #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
384:           type5,arg5,type6,arg6) \
385: type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \
386: { \
387: long __res; \
388: __asm__ volatile ("push %%ebp ; movl %%eax,%%ebp ; movl %1,%%eax ; int $0x80 ; pop %%ebp" \
389:         : "=a" (__res) \
390:         : "i" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
391:           "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5)), \
392:           "0" ((long)(arg6)) : "memory"); \
393: __syscall_return(type,__res); \
394: }

Maar aangezien je een res returned: wat is daar de waarde van?

[Voor 3% gewijzigd door Vaan Banaan op 02-10-2010 18:18]

500 "The server made a boo boo"


  • shad0w_crash
  • Registratie: januari 2006
  • Laatst online: 26-08-2019
C:
1
printf("%d", res);
resulteert in -20

$? geeft 236

C:
1
printf ("Error: %s\n",strerror(errno));


Error: Unknown error 4294967276


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee