Programovací jazyk Rust (Wikipedie) dnes slaví 10 let od vydání verze 1.0. Přímo na oslavě byla vydána nová verze 1.87.0. Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Evropská komise obvinila provozovatele čínské platformy TikTok z porušování pravidel EU kvůli netransparentnosti v reklamě. Komise, která v EU plní i funkci antimonopolního úřadu, to dnes uvedla v tiskové zprávě. TikTok, který patří čínské firmě ByteDance, se může k předběžnému nálezu vyjádřit. Pokud ale podezření komise nevyvrátí, hrozí mu pokuta až do šesti procent z ročního globálního obratu.
Sovereign Tech Agency (Wikipedie), tj. agentura zabezpečující financování svobodného a otevřeného softwaru německou vládou, podpoří GFortran částkou 360 000 eur.
Microsoft hodlá zrušit zhruba tři procenta pracovních míst. Microsoft na konci loňského června zaměstnával kolem 228.000 lidí. Tři procenta z tohoto počtu představují téměř 7000 pracovních míst.
V říjnu loňského roku provedl Úřad pro ochranu hospodářské soutěže (ÚOHS) místní šetření u společnosti Seznam.cz. Krajský soud v Brně tento týden konstatoval, že toto šetření bylo nezákonné.
Branch Privilege Injection (CVE-2024-45332, Paper) je nejnovější bezpečnostní problém procesorů Intel. Intel jej řeší ve včerejším opravném vydání 20250512 mikrokódů pro své procesory. Neprivilegovaný uživatel si například může přečíst /etc/shadow (YouTube).
Dle plánu byl vývoj Firefoxu přesunut z Mercurialu na Git. Oficiální repozitář se zdrojovými kódy je na GitHubu.
V terminálovém multiplexoru GNU Screen byly nalezeny a v upstreamu ve verzi 5.0.1 už opraveny bezpečnostních chyby CVE-2025-23395, CVE-2025-46802, CVE-2025-46803, CVE-2025-46804 a CVE-2025-46805. Podrobnosti na blogu SUSE Security Teamu.
Training Solo (Paper, GitHub) je nejnovější bezpečnostní problém procesorů Intel s eIBRS a některých procesorů ARM. Intel vydal opravnou verzi 20250512 mikrokódů pro své procesory.
Byla vydána nová verze 25.05.11 svobodného multiplatformního video editoru Shotcut (Wikipedie) postaveného nad multimediálním frameworkem MLT. Nejnovější Shotcut je již vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.
/** * @file kontrolni.c */ void hello(void) { printf("Hello, library world.\n"); }Tu si prelozim a nahraju jako dynamicky sdilenou knihovnu kontrolni.so:
gcc -Wall -fPIC -c kontrolni.c gcc -shared -Wl,-soname,kontrolni.so.0 -o kontrolni.so.0.0.1 kontrolni.oNo a dle nekolika manualu jsem se znazil tu mou fci hello z knihovny kontrolni.so zavolat:
typedef void* (*arbitrary)(); arbitrary my_function; void* handle = dlopen(0,RTLD_NOW|RTLD_GLOBAL); *(void**)(&my_function) = dlsym(handle,"hello"); my_function(); dlclose(handle);Nasel jsem si i manual, kde se vola fce takto:
void *handle; int *iptr, (*fptr)(int); /* open the needed object */ handle = dlopen("/usr/home/me/libfoo.so", RTLD_LOCAL | RTLD_LAZY); /* find the address of function and data objects */ *(void **)(&fptr) = dlsym(handle, "my_function"); iptr = (int *)dlsym(handle, "my_object"); /* invoke function, passing value of integer as a parameter */ (*fptr)(*iptr);Jenomze jsem se jeste nedocet, co by mely byt ty data objects. POstradam nejaky konkretni priklad. Mohl by mi nekdo ukazat svetlo v tunelu a navest me? :) Fakt nevim, co delam spatne.
Řešení dotazu:
#include <kontrolni.h> int main(void) { hello(); return 0; }kde v kontrolni.h je příslušná deklarace hello a pak gcc -o program program.o -lkontrolni Pokud chceš napoak otevřít knihovnu až za běhu pomocí dlopen(), tak první argument je jméno souboru s knihovnou, tedy "/cesta/někam/kontrolni.so". NULL znamená otevřít tímto způsobem sám program, aby mohl hledat symboly sám v sobě (což má smysl pouze při linkování s --export-dynamic); 0 je totéž co NULL + zblbost C++... Konvence pojmenování je (a) Dynamická knihovna s verzovaným interface: libfoo.so.1.2.3, kde čísla definují verze interface, viz sekci Versioning v dokumentaci libtoolu. (b) Dynamická knihovna, kde se na verzování interface nehraje, protože není kompatibilní s předchozími ani následujícími: libfoo-1.2.3.so, kde 1.2.3 je prostě verze. (c) Dynamický modul pro dlopen()ování: foo.so, bez lib a bez verzí (případné verzování se tady řeší až něčím, co se po otevření modulu najde uvnitř). Důvod prefixu lib v (a) a (b) je, že ho linker zase odstraňuje, tj. -lfoo hledá libfoo; taky ti v tom případě něco musí udělat ten smylink z libfoo.so.0 na libfoo.so.0.0.0 (normálně ldconfig) a ta knihovna musí být v LD_LIBRARY_PATH nebo musíš použít -rpath (což ostatně platí i pro dlopenování, i když tam se spíš používá plná cesta, případně můžeš napsat "./kontrolni.so" pro aktuální adresář). Název kontrolni.so.0.0.0 do toho nezapadá a opět těžko říci, o kterou z tech tří věci se snažíš. Konečně, ta deklarace arbitrary je blbě, pokud funkce vrací void, protože ji máš deklarovánu jako funkci vracející ukazatel (navíc nemá deklarovány argumenty), a program neřeší kontrolu chyb, ani nepíšeš, co vlastně nefunguje, takže těžko říci. Mi to po opravení chyb a upravení na případ (c) normálně funguje.
void (*my_function)(void); //PRoc takovato deklarace? Potoze fce hello je deklarovana jako void hello(void) void* handle = dlopen("/home/.../.../Vyvoj_C/libkontrolni.so", RTLD_NOW); //misto tri tecek je cesta k souboru if(handle==NULL) { fputs (dlerror(), stderr); exit(1); } my_function = dlsym(handle,"hello"); if(my_function==NULL) { fputs(error, stderr); exit(1); } my_function(); dlclose(handle);Diky osetreni chb mi ted pocitac nadava, ze ta knihovna vubec neexistuje:
Vyvoj_C/kontrolni.so: cannot open shared object file: No such file or directoryPokud ovsem prepisu volani dlopen na:
dlopen(".../Vyvoj_C/libkontrolni.so.0.0.1", RTLD_NOW)Tak se mi ta ma fce zavola a Hello, world, se vytiskne... Funguje tedy pripad (a), ale ne pripad (c). Mohl bys mi jeste osvetlit proc? Zajimalo by me, co mi uniklo, co jsem nepochopil. Diky.
NAME=pokusny CC=gcc CFLAGS=-ldl -std=c99 -pedantic -Wall -Wextra -D_GNU_SOURCE #kompilace programu $(NAME): main.c $(CC) $(CFLAGS) main.c -o $(NAME) pokusne.o: pokusne.c $(CC) $(CFLAGS) convertions.c -c #kompilace sdilene knihovny convert.o : convert.c $(CC) -Wall -fPIC -c kontrolni.c convert.o : convert.c $(CC) -shared -Wl,-soname,kontrolni.so.0 -o libkontrolni.so.0.0.1 kontrolni.oPriznam se, ze to s Makefile moc neumim. Nic jsem poradne k psani makefile pro shared libaries nevygooglil. Vyse zmineny Makefile mi udela binarku s programem, ale knihovnu nevytvori. V prikazove radce mi to ale pekne tu knihovnu vytvori:
gcc -Wall -fPIC -c pokusny.c gcc -shared -Wl,-soname,kontrolni.so.0 -o libconvert.so.0.0.1 convert.o
make -C subprojekt
) a na začátku all, které závisí na všem. Pokud používáš git, lehce se pak dají použít jeho submoduly. Stejně pak můžeš přibalit testy, dokumentaci, další nástroje,...
my_function = dlsym(handle, "hello");a mělo by to být v pohodě. Rozhodně však přidej kontrolu, zda se
dlopen
a dlsym
povedly, neboť se aspoň dozvíš, co je špatně.
Jinak to vypadá celkem v pořádku. Tedy za předpokladu, že v době kompilace nevíš, zda tu knihovnu opravdu potřebuješ (volitelná součást/výběr dle architektury) nebo v případě, že se jedná o nějaký plugin.
Tiskni
Sdílej: