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í
×
    dnes 21:44 | Nová verze

    Byl vydán Mozilla Firefox 143.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Nově se Firefox při ukončování anonymního režimu zeptá, zda chcete smazat stažené soubory. Dialog pro povolení přístupu ke kameře zobrazuje náhled. Obzvláště užitečné při přepínání mezi více kamerami. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 143 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    dnes 17:22 | Nová verze

    Byla vydána betaverze Fedora Linuxu 43 (ChangeSet), tj. poslední zastávka před vydáním finální verze, která je naplánována na úterý 21. října.

    Ladislav Hagara | Komentářů: 0
    dnes 12:22 | Nová verze

    Multiplatformní emulátor terminálu Ghostty byl vydán ve verzi 1.2 (𝕏, Mastodon). Přehled novinek, vylepšení a nových efektů v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    dnes 00:11 | Nová verze

    Byla vydána nová verze 4.5 (𝕏, Bluesky, Mastodon) multiplatformního open source herního enginu Godot (Wikipedie, GitHub). Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    včera 21:33 | Nová verze

    Byla vydána verze 3.0 (Mastodon) nástroje pro záznam a sdílení terminálových sezení asciinema (GitHub). S novou verzí formátu záznamu asciicast v3, podporou live streamingu a především kompletním přepisem z Pythonu do Rustu.

    Ladislav Hagara | Komentářů: 0
    včera 21:00 | Komunita

    Canonical oznámil, že bude podporovat a distribuovat toolkit NVIDIA CUDA (Wikipedie) v Ubuntu.

    Ladislav Hagara | Komentářů: 0
    včera 20:44 | IT novinky

    Tržní hodnota americké společnosti Alphabet, která je majitelem internetového vyhledávače Google, dnes poprvé překonala hranici tří bilionů dolarů (62,1 bilionu Kč). Alphabet se připojil k malé skupině společností, které tuto hranici pokořily. Jsou mezi nimi zatím americké firmy Nvidia, Microsoft a Apple.

    Ladislav Hagara | Komentářů: 2
    včera 20:33 | IT novinky

    Spojené státy a Čína dosáhly dohody ohledně pokračování populární čínské platformy pro sdílení krátkých videí TikTok v USA. V příspěvku na síti Truth Social to dnes naznačil americký prezident Donald Trump. Dosažení rámcové dohody o TikToku vzápětí oznámil americký ministr financí Scott Bessent, který v Madridu jedná s čínskými představiteli o vzájemných obchodních vztazích mezi USA a Čínou. Bessentova slova později potvrdila také čínská strana.

    Ladislav Hagara | Komentářů: 0
    včera 16:55 | Komunita

    MKVToolNix, tj. sada nástrojů pro práci s formátem (medialnym kontajnerom) Matroska, byl vydán ve verzi 95.0. Podpora přehrávání formátu Matroska míří do Firefoxu [Bug 1422891, Technický popis]. Přehrávání lze již testovat ve Firefoxu Nightly.

    Ladislav Hagara | Komentářů: 0
    13.9. 17:33 | Pozvánky

    Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 211. sraz, který proběhne v pátek 19. září od 18:00 ve Studentském klubu U Kachničky na Fakultě informačních technologií Vysokého učení technického na adrese Božetěchova 2/1. Na srazu proběhne přednáška Jiřího Eischmanna o nové verzi prostředí GNOME 49. Nemáte-li možnost se zúčastnit osobně, přednáškový blok bude opět streamován živě na server VHSky.cz a následně i zpřístupněn záznam.

    Ladislav Hagara | Komentářů: 0
    Pro otevření více webových stránek ve webovém prohlížečí používám
     (81%)
     (6%)
     (4%)
     (3%)
     (4%)
     (2%)
    Celkem 187 hlasů
     Komentářů: 12, poslední 10.9. 13:00
    Rozcestník

    LD_PRELOAD a ioctl()

    6.3.2009 01:02 | Přečteno: 3030× | 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.