Kanadský vývojář Anthony Sistilli vytvořil ironický DIY projekt parodující kamerové systémy Flock, s cílem názorně demonstrovat rizika masového sledování jaké provozují tyto komerční ALPR systémy. Z levné IP kamery a vlastního ML softwaru (napsaného s pomocí SI circa za 20 minut, kód se mi bohužel nepodařilo dohledat) běžícího v laptopu sestavil jednoduchý systém, který detekuje výhradně policejní vozidla, zaznamenává jejich SPZ a
… více »Část údajů uživatelů internetového supermarketu Rohlík byla odcizena. Kyberútočníci napadli nástroj zákaznické podpory Rohlíku, odcizili tak jména, e-mailové adresy, v některých případech také telefonní čísla nebo přepisy komunikace mezi klienty a zákaznickou podporou. Rohlík incident nahlásil příslušným orgánům a přijal příslušné opatření, aby zamezil podobným případům v budoucnosti, uvedla firma.
Aplikace eDoklady fungovala v obou volebních dnech stabilně a prakticky bez front. Digitální a informační agentura (DIA) odhaduje, že se digitálním dokladem prokázalo více než 100.000 voličů. Aplikaci si před volbami či během nich aktualizovalo 247.517 uživatelů. Nových registrací bylo 19.431 a do aplikace se přihlásilo 357.879 lidí. Největší nápor přišel bezprostředně po otevření volebních místností mezi 14. a 16. hodinou, kdy si
… více »Začal semestr, začal i podzim a kromě hub rostou jako po dešti i veřejné dílny v Praze. Nedávno strahováci referovali o hackerspacu Bordel, nyní se otevřela dílna Dejvice Lab jen kousek od ČVUT. Na blížící Virtuální Bastlírně tak uslyšíte nejen report z návštěvy dílny HWLab, ale i řadu novinek, událostí a úsměvných momentů, které se za poslední měsíc ve světě techniky, ale i vědy udály. Připojte se tedy již v úterý 13.10. od 20:00 a zapojte se do
… více »Byl vydán LineageOS 24 (Mastodon). LineageOS (Wikipedie) je svobodný operační systém pro chytré telefony, tablety a set-top boxy založený na Androidu. Jedná se o nástupce CyanogenModu. LineageOS 24 je založený na Androidu 17.
Společnost Valve publikovala na svém GitLabu nákresy a schémata zapojení headsetu Steam Frame. Pro nekomerční účely.
Soutěž Pwn2Own Ireland 2026 skončila 9. října. Bezpečnostní výzkumníci získali celkem 1 262 000 dolarů na odměnách. Během soutěže bylo předvedeno zneužití 98 zero-day zranitelností. Testování zahrnovalo různé kategorie zařízení a software. Výzkumníci předváděli prakticky fungující útoky podle pravidel soutěže. Výsledky následně slouží výrobcům při přípravě oprav. Mezi pokořenými jsou: Samsung Galaxy S26, OpenAI Codex, Oracle Autonomous AI Database, Google Pixel 10, u iPhone 17 neuspěli.
Programovací jazyk Python byl vydán v nové verzi 3.15.0. Podrobný přehled novinek v aktualizované dokumentaci.
BIGWORDS.PAGE je open-source webová aplikace, která po otevření odkazu v prohlížeči vykreslí přes celou obrazovku jednoduché informační sdělení. Zpráva i její nastavení jsou uložené v části URL za znakem #, například odkaz https://bigwords.page/#abclinuxu zobrazí jako velký bílý nápis 'abclinuxu' na černém pozadí. Obsah odkazu lze upravovat i vestavěným editorem, ten umožňuje nastavovat formátování a vizuální efekty textu, časovače, QR kódy a obrázky. Zdrojový kód je dostupný pod licencí MIT na GitHubu.
V neděli 11. října proběhne rotace klíče kořenové zóny. Podruhé v historii. Ondřej Filip na blogu CZ.NIC: "Pokud je pro Vás DNS protokol spíše výzva, ale přesto spravujete nějakou síť či DNS resolver, zkuste si jednoduchý test, který připravila firma Cloudflare na této adrese. Obzvláště zbystřit byste měli, pokud uvidíte nějaká červená políčka."
Programming stuff. And stuff.
size -A -d binary
section size addr
.interp 20 33076
.hash 2992 33096
.dynsym 7728 36088
.dynstr 6788 43816
.gnu.version 966 50604
.gnu.version_r 32 51572
.rel.dyn 1328 51604
.rel.plt 2248 52932
.init 16 55180
.plt 3392 55196
.text 16186316 58588
.fini 16 16244904
.rodata 6959461 16244920
.ARM.extab 46264 23204384
.ARM.exidx 285072 23250648
.eh_frame 4 23535720
.tbss 4 23568492
.init_array 4 23568492
.fini_array 4 23568496
.jcr 4 23568500
.data.rel.ro 2388 23568504
.dynamic 288 23570892
.got 1772 23571180
.data 9250956 23572952
.bss 5225372 32823912
.comment 74 0
.ARM.attributes 45 0
Total 37983554
Zde je vidět, že největší sekce jsou .data (read-write data), .rodata (read-only data), a .text (kód programu). Sekce .bss je sice celkem veliká, ale ta se na disk neukládá - je inicializována po spuštění v RAM na samé nuly.
Seřazení symbolů podle velikosti:
nm --print-size --size-sort --radix=d binary
27403032 00290304 D soc_mem_list
39231600 00295008 B dsv6DbCfgData
36415100 00296808 b mgmdv3Msg.26775
38049132 00498024 B lb2_work
36877696 00514332 B ssi
37477704 00528768 B lb_work
28134264 01720384 D soc_reg_list
Druhý sloupec je velikost symbolu, třetí je typ. Zde je důležité dívat se na typ, typ B je z .bss sekce, která se do ELF neukládá a je tvořena samými nulami. Typ D je globálně viditelný datový symbol, který zabírá příslušné místo (modulo alignment). Výčet typů viz manuálu nm (podstatné pro nás jsou d/D, g/G, t/T, r/R, v/V, w/W). Z předchozího výčtu je patrné, že se podle možnosti chceme zbavit např. soc_reg_list, který zabírá 1.7 MB.
.text.ERR_load_crypto_strings
0x0000000000f8a938 0x6c
0x0000000000f8a938 ERR_load_crypto_strings
.text.ERR_print_errors_cb
0x0000000000f8a9a4 0xd0
0x0000000000f8a9a4 ERR_print_errors_cb
.text.ERR_load_EVP_strings
0x0000000000f8aa74 0x38
0x0000000000f8aa74 ERR_load_EVP_strings
Teď linker udělal asi maximum, dále musíme symboly vyklestit ručně. To lze udělat ručně pomocou analýzy kódu, ale já jsem narazil na spoustu generovaného a těžce o-ifdefovaného kódu o statisících LOC, který byl absolutně nečitelný.
#!/bin/bash
objdump -d "$1" \
| grep '<' \
| sed -e 's/^[^<]*//' \
| sed 's/<\([^+]*\)[^>]*>/\1/' \
| awk 'BEGIN { FS = ":" } \
NF>1 { w=$1; } \
NF==1 && w != $1 { print w " " $0 }' \
| sort -u
Nejprve jsem si říkal, že to je takový divný awk/sed/grep hack, že to nemůže fungovat. Jaké bylo mé překvapení, když to vygenerovalo závislosti mezi symbolama
Když budete mít chvíli, projděte si jak to funguje, je to překvapivě jednoduché a vynalézavé. V té odpovědi se sice píše, že to vygeneruje caller-callee závislosti, ale generuje to i závislosti i funkce na datech (o tom ještě dále).
Použít graphviz na graf o stovkách tisíc hran fakt nefunguje (zkoušel jsem), tak jsem si napsal krátký pythoní kód, který mi ten graf prolezl od main a spočítal kumulativní velikosti symbolů, kde co na čem závisí.
Zde by byl šťastný konec, kdyby se neobjevilo pár zádrhelů:
Tiskni
Sdílej:
-fdata-sections a -ffunction-sections naopak zvětšení binárky, když má každá funkce svou sekci, která je uvedena ve výsledkem souboru, nebo ty sekce linker nakonec spojí do jedné?
objdump -d "$1" | perl -lne 'if(/<([^+]*).*?>(:?)/){if($2){$w=$1}elsif($w ne$1){print"$w $1"}}' | sort -u
mainu, posbírám jen 1/3 velikosti programu. Ověřil jsem si, že to je problém v objdump, kde minimálně jedna funkce nemá jiný odkaz než sama na sebe. Nějaké nápady, co s tím?
#!/bin/sh
objdump -d "$1" | perl -lne 'next unless/<([^+]*).*?>(:?)/;
if($2){$w=$1}elsif($w ne$1){print"$w $1"}' | sort -u > deps
nm --synthetic --print-size --size-sort --radix=d "$1" | awk '
function collect(name, set, i) {
used[name]++
if (set[name]++)
return
for (i = 0; i < deps[name]; i++)
collect(deps[name, i], set)
}
function run(name, set, sum, i) {
set[name] = sum = 0
collect(name, set)
for (i in set) sum += sizes[i]
print name, sizes[name], sum
}
{ sizes[$4] = $2 + 0 } END {
while ((getline < "deps") > 0) { deps[$1, deps[$1]++] = $2 }
for (name in sizes) run(name)
for (name in used) if (used[name] < 2) print name > "unreferenced"
}' | sort -nk3
000000000041865f <my_funny_callback>: 41865f: 55 push %rbp[...]
418739: be 5f 86 41 00 mov $0x41865f,%esiVypadá to, že to bude chtít mnohem víc Perlu.
objdump neresolvuje callbacky předávané argumentem – lze vyřešitobjdump neresolvuje callbacky z dat – nelze vyřešit
.
objdump -d "$1" | perl -lne '
if (/^0*([\da-f]+) <(.+?)>:/) { $a{$1} = $w = $2
} elsif (/<([^+]*).*?>/) { print "$w $1" if $w ne $1
} elsif (/0x([\da-f]+),/) { push @{$deps{$w}}, $1
} END { while (my ($w, $refs) = each %deps) {
for (@$refs) { print "$w $a{$_}" if exists $a{$_} }
}}' | sort -u > deps
Skóre: main vzrostl z 26.1% na 35.6% velikosti sstripnuté binárky. _start začal být větší než main. Konkrétní program obsahuje callbacky v datech s nemalým podstromem.
objdump -d "$1" | perl -lne '
if (/^0*([\da-f]+) <(.+?)>:/) { $a{$1} = $w = $2; next }
print "$w $1" if /<([^+]*).*?>/ && $w ne $1;
push @{$deps{$w}}, $1 if /0x([\da-f]+),/;
END { while (my ($w, $refs) = each %deps) {
for (@$refs) { print "$w $a{$_}" if exists $a{$_} }
}}' | sort -u > deps
nm "$1" | perl -lne 'print for /^0*(\S+) . (\S+)/' > addresses
objdump -d "$1" | perl -lne '
if (/<([^+]*).*?>(:?)/) { $w = $1 if $2; print "$w $1" if $w ne $1 }
BEGIN { %a = (split " ", `cat addresses`) }
print "$w $a{$1}" if /0x([\da-f]+),/ && exists $a{$1}' | sort -u > deps
Další krok je omílaný linker nebo potenciálně DWARF.
objdump -x. Člověk si ze "symbol table" posbírá offsety a velikosti a pak projíždí "relocation records" a zpětně resolvuje. Object soubory jenom už může být trochu problém posbírat, možná přes nějaký falešný kompilátor/linker jak to dělá scan-build analyzátor, ccache a podobné, a pořád to nemusí být triviální (více object files na jedny zdrojáky s různými defines), tak možná počkat na finální link příkaz do binárky a poprat se i s .a soubory. Teoreticky by se to dalo sledovat i přes strace/ptrace místo wrapperů.
LOAD s názvy souborů se dají docela snadno vyparsovat. Problém je, když se linkuje víc věcí, pak se ty output.map přepisují.
.