abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

19.1. 18:55 | Komunita

NHSbuntu (Joinup, prezentace) měla být z Ubuntu vycházející linuxová distribuce přizpůsobená pro potřeby britské Národní zdravotní služby (NHS). NHS se název nelíbil, nejednalo se o oficiální projekt NHS, a proto bylo NHSbuntu v září loňského roku přejmenováno na NHoS. Vývojáři NHoS tento týden oznámili, že NHS se nelíbí ani název NHoS a už nemají sílu na další přejmenování a pokračování v projektu. Dodávají, že několik jednání s vedením

… více »
Ladislav Hagara | Komentářů: 5
19.1. 18:44 | Pozvánky

Koncem ledna, 29. 1. 2018 od 17 do 20 hodin se v Akademii CZ.NIC uskuteční večer s Turrisem.

Co bude na programu?… více »
Miška | Komentářů: 5
19.1. 18:33 | Pozvánky

Na tri dni sa hlavné mesto Slovenska po tretíkrát zmení na miesto s najväčšou koncentráciou profesionálnych programátorov, systémových administrátorov, učiteľov informatiky aj technologických nadšencov. Hlavným lákadlom bude konferencia PyCon SK 2018, určená záujemcom o Python, jeden z najpopulárnejších programovacích jazykov na svete.

… více »
RicCo386 | Komentářů: 1
19.1. 18:22 | Pozvánky

Letošní ročník konference Prague PostgreSQL Developer Day se koná ve dnech 14. 2. a 15. 2. 2018. Zveřejněn byl program s přednáškami a školeními. Otevřena byla také registrace na konferenci.

TomasVondra | Komentářů: 0
19.1. 11:33 | Komunita

Společnost Canonical stojící za linuxovou distribucí Ubuntu oznámila dostupnost nástroje pro týmovou spolupráci Slack (Wikipedie) ve formátu snap. Instalovat jej lze ze Snapcraftu. Slack pro Linux je dostupný také ve formátu klasických balíčků pro Ubuntu a Fedoru.

Ladislav Hagara | Komentářů: 10
18.1. 17:33 | Nová verze

Po roce vývoje od vydání verze 2.0 a 6 000 změnách byla vydána nová stabilní verze 3.0 softwaru, který vytváří aplikační rozhraní umožňující chod aplikací pro Microsoft Windows také pod GNU/Linuxem, Wine (Wikipedie). Z novinek lze zdůraznit například podporu Direct3D 10 a 11. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 14
18.1. 13:44 | Zajímavý projekt

V říjnu loňského roku úspěšně skončila kampaň na podporu chytrého telefonu Librem 5, jenž by měl respektovat bezpečnost, svobodu a soukromí uživatelů. Společnost Purism informuje o aktuálním vývoji tohoto telefonu. Místo plánovaného SoC i.MX6 by měl být použit úspornější i.MX8.

Ladislav Hagara | Komentářů: 4
18.1. 12:33 | Zajímavý projekt

V květnu loňského roku měl na YouTube premiéru krátký animovaný film Agent 327: Operation Barbershop. Blender Animation Studio včera zveřejnilo alternativní konec tohoto filmu.

Ladislav Hagara | Komentářů: 0
18.1. 05:55 | Bezpečnostní upozornění

Společnost Oracle vydala čtvrtletní bezpečnostní aktualizaci svých softwarových produktů (CPU, Critical Patch Update). Opraveno bylo celkově 237 bezpečnostních chyb. V Oracle Java SE je například opraveno 21 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 18 z nich. V Oracle MySQL je opraveno 25 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 6 z nich.

Ladislav Hagara | Komentářů: 0
17.1. 20:55 | Komunita

Linux ve VirtualBoxu nebude potřebovat Přídavky pro hosta (Guest Additions). Budou součástí linuxového jádra. Ovladač vboxguest by se měl dostat do Linuxu 4.16. Ovladač vboxsf by měl následovat.

Ladislav Hagara | Komentářů: 27
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (7%)
 (1%)
 (1%)
 (1%)
 (77%)
 (13%)
Celkem 1356 hlasů
 Komentářů: 53, poslední 17.1. 16:55
    Rozcestník

    LD_PRELOAD a ioctl()

    6.3.2009 01:02 | Přečteno: 2055× | Programování | Výběrový blog | poslední úprava: 10.3.2009 13:29

    Občas se hodí zavolat vlastní verzi ioctl() bez rekompilace binárky (např. pro ladící účely a teprve poté zavolat reálné ioctl()), jako ukázku přikládám návrat MAC adresy:

    $ ./get_mac 
    00:0a:e4:a9:36:d8
    $ LD_PRELOAD="libwrap_ioctl.so.1.0" ./get_mac 
    0a:0b:0c:0d:0e:0f
    

    Makefile:

    all: libwrap_ioctl.so get_mac
    
    libwrap_ioctl.so: ioctlw.c
    	gcc -Wall -fPIC -shared -Wl,-soname,libwrap_ioctl.so.1           \
    		-I/usr/lib/oss/include -I/usr/include                        \
    		-o libwrap_ioctl.so.1.0 -ldl ioctlw.c
    
    get_mac: get_mac.c
    	gcc -Wall -o get_mac get_mac.c
    

    ioctlw.c:

    #define _GNU_SOURCE
    #include <dlfcn.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <net/if.h>
    
    #define SIOCGIFHWADDR   0x8927      /* Get hardware address     */
    
    static int (*next_ioctl)(int fd, int request, void *data) = NULL;
    
    int ioctl(int fd, int request, void *data)
    {
        struct ifreq ifr;
        char *msg;
    
        if (request == SIOCGIFHWADDR) {
            memcpy(&ifr, data, sizeof(struct ifreq));
    
            ifr.ifr_hwaddr.sa_data[0] = 0x0A; 
            ifr.ifr_hwaddr.sa_data[1] = 0x0B;
            ifr.ifr_hwaddr.sa_data[2] = 0x0C;
            ifr.ifr_hwaddr.sa_data[3] = 0x0D;
            ifr.ifr_hwaddr.sa_data[4] = 0x0E;
            ifr.ifr_hwaddr.sa_data[5] = 0x0F;
    
            memcpy(data, &ifr, sizeof(struct ifreq));
            return 0;
        }
    
        if (next_ioctl == NULL) {
            fprintf(stderr, "ioctl: wrapping ioctl\n");
            fflush(stderr);
    
            next_ioctl = dlsym(RTLD_NEXT, "ioctl");
    
            fprintf(stderr, "next_ioctl = %p\n", next_ioctl);
            fflush(stderr);
    
            if ((msg = dlerror()) != NULL) {
                fprintf(stderr, "ioctl: dlopen failed: %s\n", msg);
                fflush(stderr);
                exit(1);
            }
            else {
                fprintf(stderr, "ioctl: wrapping done\n");
            }
    
            fflush(stderr);
        }
    
        return next_ioctl(fd, request, data);
    }
    
    //void *dlsym(void *handle, const char *symbol)
    //{
    //    void* result = __libc_dlsym(handle, symbol);
    //
    //    printf("%s\n", symbol);
    //
    //    return result;
    //}
    

    get_mac.c

    #include <stdio.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/ioctl.h>
    #include <netinet/in.h>
    #include <net/if.h>
    
    int main()
    {
       int fd;
       struct ifreq ifr;
      
       fd = socket(AF_INET, SOCK_DGRAM, 0);
      
       ifr.ifr_addr.sa_family = AF_INET;
       strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
      
       ioctl(fd, SIOCGIFHWADDR, &ifr);
      
       close(fd);
      
       /* display result */
       printf("%.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
               (unsigned char)ifr.ifr_hwaddr.sa_data[0],
               (unsigned char)ifr.ifr_hwaddr.sa_data[1],
               (unsigned char)ifr.ifr_hwaddr.sa_data[2],
               (unsigned char)ifr.ifr_hwaddr.sa_data[3],
               (unsigned char)ifr.ifr_hwaddr.sa_data[4],
               (unsigned char)ifr.ifr_hwaddr.sa_data[5]);
      
       return 0;
    }
    

    Zdroje:

    Using LD_PRELOAD libraries and glibc backtrace function for debugging
    Simple sample of getting MAC address information
    Wrapping dlsym()

           

    Hodnocení: 88 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    6.3.2009 07:45 ...
    Rozbalit Rozbalit vše Re: LD_PRELOAD a ioctl()
    LD_PRELOAD je sikovna vec. Zrovna vcera som si tak pisal firewall pre jedneho guesta vo vserveri, ktory sa inak k iptables nedostane. Pridal som LD_PRELOAD na kniznicu s vlastnym connect, send, recv, sento, recvfrom a mozem si kontrolovat koho pustim a koho nie. Iptables to nie je, ale lepsie ako nic.
    Jardík avatar 6.3.2009 18:48 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: LD_PRELOAD a ioctl()
    Hlavně iptables nenastavíš pro jednotlivé programy (?), ale s LD_PRELOAD to půjde (až na nefunkčnost s rootem).
    Věřím v jednoho Boha.
    9.3.2009 23:25  
    Rozbalit Rozbalit vše Re: LD_PRELOAD a ioctl()
    Nevedeli by ste o nejakom riešení pre staticky linkované binárky? Potreboval by som presne to isté - meniť MAC adresu, ale tu mi, žiaľ, LD_PRELOAD nepomôže.

    Ďakujem.
    Fuky avatar 10.3.2009 00:50 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: LD_PRELOAD a ioctl()

    Funkce ioctl() je v libc:

    $ readelf -a /lib/i686/cmov/libc.so.6 |grep ioctl
      1361: 000d8040    63 FUNC    WEAK   DEFAULT   11 ioctl@@GLIBC_2.0
    

    Co říká:

    $ ldd tvoje_binarka
    	linux-gate.so.1 =>  (0xb7f30000)
    	libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7db8000)
    	/lib/ld-linux.so.2 (0xb7f31000)
    

    Myslím, že i Tvá binárka bude využívat libc, i když ostatní knihovny jsou přilinkovány staticky.

    11.3.2009 15:29
    Rozbalit Rozbalit vše Re: LD_PRELOAD a ioctl()

    Žiaľ, nie. Nesie so sebou vlastnú C knižnicu, ldd na ňu vôbec nefunguje.

    Jardík avatar 16.3.2009 21:43 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: LD_PRELOAD a ioctl()
    Já myslel, že alespoň s jednou knihovnou to musí být slinkované vždy - a tou je ld-linux.so.*
    Věřím v jednoho Boha.
    17.3.2009 12:46 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: LD_PRELOAD a ioctl()
    ptrace(2) a přepisovat výsledky volání systému.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.