Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2016-05-10

| Channels | #divine index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
08:48 xstill mornfall: zdá se že na archu i na ubuntu obsahuje libc.a relocable objekty
08:51 mornfall jo, dneska uz bych to docela ocekaval
08:51 mornfall potrebujes to aj pro aslr
09:06 xstill hm, až na to, že nejsem schopný minimální program který volá jen mmap staticky slinkovat s glibc aniž by mi to tam nablilo milion věcí a chyběl tomu unwind
09:14 mornfall to je trochu smutny
09:15 mornfall je pravda ze glibc je takova nepratelska vuci statickymu linkovani
09:15 mornfall a tahat do toho musl je asi uz docela slozity
09:15 xstill jsou tam totiž nějaký divný symboly jako _dl_x86_cpu_features a _GLOBAL_OFFSET_TABLE_
09:16 xstill no, nevím, ten musl mě právě napadl, že by to mohlo i jít
09:16 mornfall no to druhy je pro dyn. linker
09:16 mornfall to prvni vlastne asi taky
09:16 mornfall resp pro tu relokaci
09:17 mornfall kazdopadne pokud bys kopiroval syscall imllementaci tak spis z musl
09:17 xstill jen navím proč tam jsou, protože ten mmap je nepoužívá nikde podle objdumpu
09:21 mornfall GOT se pouziva implicitne pri kazdym call-u, IIRC
09:22 xstill GOT je co?
09:24 mornfall global offset table
09:25 mornfall teda pouziva se plt, ale to je nejak propojeny
09:26 xstill hm jsem nevzdělanej, plt je co? asi si budu muset zjistit jak funguje linkování
09:27 mornfall procedure linkage table
09:27 mornfall to je tabulka adres kterou ld.so prepisuje
20:10 xstill mornfall: co ten hack s tím lartem přejmenovat všechny symboly a slinkovat to s glibc normálním? Mě to začíná znít jako nejjednodušší varianta…
20:36 mornfall no, když to pak načteš do gdb bude to hodně bolet
20:37 mornfall nemluvě o tom že _start není v glibc
20:40 xstill proč to bude v gdb bolet, jako že nebudu schopnej dát breakpoint podle jména funkce?
20:41 xstill _start je prostě někde co mi clang přilinkuje když ho nechám, jestli je to glibc nebo něco jinýho je celkem irelevantní
20:42 mornfall _start je v crt0.o
20:42 xstill ono takhle totiž bude třeba hroznej problém i s tím jak vypisovat, třeba na jakém problému to padlo, uživateli a tak
20:42 mornfall docela bych se divil kdyby debuginfo přežilo přejmenování symbolů
20:42 xstill no já vím kde je, u mě je  v /usr/lib/crt1.o
20:42 mornfall no a jak to teda souvisí s tou glibc?
20:43 xstill podle mě zvládne když to bude na úrovni LLVM
20:43 mornfall nicméně demangler to nepřežije určitě a lidi ty backtracy pak taky ne
20:43 xstill tak ten výstup souvisí, celkově můžeš prostě vyblít .bc a pak ho předhodit clangu spolu s nějakou malou knihovnou která implementuje divine intrinsiky
20:43 xstill hm, pravda, demangler je horší
20:44 mornfall ale výstup je celkem ortogonální
20:44 mornfall (jsou to teda 2 syscally místo jednoho, mmap a write)
20:44 mornfall (snprintf a spol máš z divinový libc tak jako tak)
20:45 xstill ještě open nebo tak něco, ale to je asi jedno
20:45 xstill je pravda, že by to nemuselo nutně až tak hrozně bolet
20:45 mornfall stdout/stderr dostaneš typicky už otevřenej :-)
20:46 xstill hm, to bych vlastně asi mohl
20:47 xstill pak je to asi jen ten write a ten ukrást z musl nebude takovej problém :-D
20:47 xstill v tom už mám praxi
20:47 mornfall no a co je teda za problém s tím _start?
20:50 xstill no, zdá se že normálně mají programy zarovnaný stack na 16 B, ale ten můj ho má posunutej o 8 B, no a clang nejspíš předpokládá že to bude zarovnané a tak občas přiřazuje 16 B přes nějaké MMX instrukce na zarovnanout paměť
20:50 xstill a jediné co to může reálně rozhodit je _start asi
20:52 mornfall a nemáš jen nějakej bordel v tom mmapu?
20:53 xstill pochybuju, padne to na mmx loadu
20:53 xstill a když z té adresy zkusím loadnout v gdb tak to jede
20:53 mornfall no tím jsem myslel že bych se třeba nedivil kdyby se ten stack mmapoval
20:56 xstill to já taky ne, ale počítám že spíš z venku toho programu, alespoň ten pro první vlákno, navíc asi ne přes symbol mmap, ten je totiž z VFS, to by asi moc neuspěl (syscall mám v __mmap_anon)
20:57 mornfall no to záleží kde přesně je implementovaná randomizace adresy zásobníku, ale to že se to nejmenuje mmap asi dost vylučuje že to může mít na tohle vliv
20:57 mornfall (tzn. mohlo by se stát že _start dostane nějakej kousek zásobníku kterej se pak zahodí když to skočí někam dál)
20:58 mornfall ale taky to může dělat ld.so, nebo kernel
20:58 mornfall ale proč se to zarovnává jinam je dost záhada
20:58 xstill já mám hlavně vlastní _start teď
21:01 mornfall a má to správně velkej rámec? :-)
21:01 xstill no, zkusil jsem tam přidat 4B věc a výsledek stejnej
21:02 xstill ještě to budu zítra zkoumat, pro dnešek končím
21:02 mornfall proč zrovna 4B? nemělo by to být spíš 8?
21:02 xstill jsem chtěl jen vyzkoušet jestli se to nějak projeví
21:04 mornfall 80482e5: 83 e4 f0 and $0xfffffff0,%esp
21:04 mornfall ^^ s tímhle by to mohlo souviset (z _start, nějakýho, linuxovýho, ale x86 teda...)
21:05 xstill jo, to by mohlo
21:05 mornfall http://dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html (x86)

| Channels | #divine index | Today | | Search | Google Search | Plain-Text | summary