< 1553212821 500264 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net JOIN :#esoteric < 1553213846 819799 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :@metar ENVA < 1553213848 285315 :lambdabot!~lambdabot@haskell/bot/lambdabot PRIVMSG #esoteric :ENVA 212350Z 18011KT CAVOK 01/M04 Q1024 RMK WIND 670FT 21018KT < 1553214095 330827 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :`` doag | grep '> #' | awk '{print $2}' < 1553214098 196996 :HackEso!~HackEso@techne.zem.fi PRIVMSG #esoteric :​ \ \ \ \ \ < 1553214254 822548 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :`doag src/hello3.c < 1553214256 335014 :HackEso!~HackEso@techne.zem.fi PRIVMSG #esoteric :11756:2019-03-21 # Preserve fizzie\'s repaired version//`mk src/hello3.c//const char main[] = "%0000%HELOPPPPPPT]5Hell1E XP5o wo1E$XP5rld!1E(XP4@4J1E,4@4GPZ$AP_^^^^T^\\x0f\\x05XX\\xc3"; < 1553214286 134540 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :`` doag | grep '> #' | grep copp < 1553214288 846460 :HackEso!~HackEso@techne.zem.fi PRIVMSG #esoteric :1181:2012-12-18 addquote < zzo38> What is portable way of load/save floating points in files, using a C code? < kmc> #ifndef __STDC_IEC_559__ #error Here\'s a nickel, kid. Buy a real computer. #endif < 1553214297 163692 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :aha < 1553214313 894076 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :i don't think coppro has used that nick since i added `# < 1553214560 449207 :Lord_of_Life_!~Lord@unaffiliated/lord-of-life/x-0885362 JOIN :#esoteric < 1553214712 814232 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 QUIT :Ping timeout: 250 seconds < 1553214714 392138 :Lord_of_Life_!~Lord@unaffiliated/lord-of-life/x-0885362 NICK :Lord_of_Life < 1553214816 547445 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :hehe I'm happy with that quote < 1553214822 551108 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :it stands the test of time < 1553215358 236263 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net QUIT :Remote host closed the connection < 1553215611 693961 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :`sled src/hello3.c//s/x0f/17/;s/x05/5/;s/xc3/303/ < 1553215613 38682 :HackEso!~HackEso@techne.zem.fi PRIVMSG #esoteric :src/hello3.c//const char main[] = "%0000%HELOPPPPPPT]5Hell1E XP5o wo1E$XP5rld!1E(XP4@4J1E,4@4GPZ$AP_^^^^T^\17\5XX\303"; < 1553218446 575543 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :fizzie: i advertized that on PPCG's chat < 1553218462 868848 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :(s?) < 1553218472 83629 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :s. < 1553218483 908925 :moony!moony@hellomouse/dev/moony PRIVMSG #esoteric :i just found a known working MC88110 for sale. < 1553218486 999600 :moony!moony@hellomouse/dev/moony PRIVMSG #esoteric :yes < 1553218491 450084 :moony!moony@hellomouse/dev/moony PRIVMSG #esoteric :ACTION celebrate < 1553218610 881755 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :^celebrate < 1553218610 921364 :fungot!~fungot@2a01:4b00:82bb:1341::2 PRIVMSG #esoteric :\o| c.c \o/ ಠ_ಠ \m/ \m/ \o_ c.c _o/ \m/ \m/ ಠ_ಠ \o/ c.c |o/ < 1553218653 107613 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :not the same since the monqy exodus. < 1553218705 326734 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :`? monqy < 1553218706 176210 :HackEso!~HackEso@techne.zem.fi PRIVMSG #esoteric :monqy is no longer extant. He lives in concept, hidden, unfindable. You could ask itidus21 for details, if you find him. < 1553218722 66251 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :hm i think i may be confusing people < 1553218736 618444 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :`grwp feet < 1553218738 48154 :HackEso!~HackEso@techne.zem.fi PRIVMSG #esoteric :limerick:A limerick is a verse with two left metrical feet and three right metrical feet. \ myndzi:myndzi used to keep us all on our feet. < 1553218745 13766 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :myndzi it was. < 1553218760 995196 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :oerjan: I've been working on a "proper" printable version, in the something that fits in the same 'const char main[]' form but uses only valid UTF-8 printable Unicode characters (to make 'ret' available). < 1553218767 792915 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :But since it can't use syscall (0f 05 is just not okay), it's a lot more complicated. I have a non-printable version now for looking up "puts" and "exit" via ELF auxiliary vector -> program header -> PT_DYNAMIC section -> DT_DEBUG entry -> struct link_map list of linked libs -> string/symbol tables of all loaded libraries. < 1553218776 275157 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :It's already 214 bytes without any work to make it printable. < 1553218809 949881 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :is it cheating to use the dynamic linker? < 1553218815 746933 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :because you could look for a PLT entry < 1553218818 951830 :zestymug!43572133@gateway/web/freenode/ip.67.87.33.51 PRIVMSG #esoteric :yes < 1553218821 900804 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :mm < 1553218828 382864 :zestymug!43572133@gateway/web/freenode/ip.67.87.33.51 PRIVMSG #esoteric :I think it is < 1553218829 829841 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :there's also a syscall instruction in the VDSO isn't there < 1553218837 379793 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :kmc: Not in x86-64 any more. < 1553218844 33355 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :or... you could just scan all of +x memory for 0f 05 < 1553218848 621614 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :kmc: Or, I mean, yes, there's three syscall instructions, but not one just for calling. < 1553218858 209833 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :fizzie: but you can jump to any point can't you < 1553218862 493255 :j4cbo!sid186930@gateway/web/irccloud.com/x-jvuunpjzubdepftz PRIVMSG #esoteric :you’ve read the tom7 printable compiler paper right? < 1553218864 894006 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :i guess it might be hard to get control back < 1553218866 315118 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :oh yes < 1553218875 650478 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :tom7 is a mad genius < 1553218879 124316 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :kmc: Yes, but there's usually annoying code after, and in any case it doesn't feel right relying on those sort of offsets. < 1553218888 113368 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :fizzie: well, fair enough < 1553218893 795918 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Scanning memory for the right thing would presumably work though. < 1553218968 338738 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :. o O ( until the compilers start putting in traps to prevent it ) < 1553219008 178851 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Also, I gave some thought about using the int 0x80 syscall interface, because "int 0x80" is printable (U+0340 COMBINING GRAVE TONE MARK), but the problem with that is that there's no mappings below the 2G limit, and that thing's "write" can only push through 32 bits of pointers. < 1553219009 926771 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :or kernels, whatever < 1553219044 229997 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :And the mmap syscall on x86-32 takes the arguments packed into a struct, so you'd need a pointer in order to get some memory you can point at. < 1553219222 241342 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :can't you use the stack for that, though? < 1553219249 246651 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :No, because the stack is somewhere around 0x7ffe70532000. < 1553219281 510396 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :So a pointer to something on it would get truncated. < 1553219307 134370 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :I mean, it's very arbitrary that I'm trying to make this a x86-64 binary. If I just compiled it with -m32, it'd be simple. < 1553219354 767341 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :ah yeah < 1553219378 19284 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :and you're not allowed to define any symbols but 'main', right? < 1553219399 271637 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Well, it's not like there's a law. But that's what I've been operating under. < 1553221963 134691 :zestymug!43572133@gateway/web/freenode/ip.67.87.33.51 QUIT :Ping timeout: 256 seconds < 1553222218 648195 :FreeFull!~freefull@defocus/sausage-lover QUIT : > 1553222233 357995 PRIVMSG #esoteric :14[[07Special:Log/newusers14]]4 create10 02 5* 03W3Rn1ckz 5* 10New user account > 1553222406 600282 PRIVMSG #esoteric :14[[07Esolang:Introduce yourself14]]4 10 02https://esolangs.org/w/index.php?diff=60556&oldid=60540 5* 03W3Rn1ckz 5* (+258) 10/* Introductions */ > 1553224492 278620 PRIVMSG #esoteric :14[[07Functasy14]]4 M10 02https://esolangs.org/w/index.php?diff=60557&oldid=60552 5* 03Hakerh400 5* (-43) 10/* Advanced examples */ < 1553225868 176789 :izabera!~izabera@unaffiliated/izabera NICK :redbutt < 1553226844 420275 :danieljabailey!~danieljab@cpc75709-york6-2-0-cust725.7-1.cable.virginm.net JOIN :#esoteric < 1553226979 468696 :redbutt!~izabera@unaffiliated/izabera NICK :izabera < 1553229093 611043 :^[!sid43445@ircpuzzles/2015/april-fools/sixth/zgrep QUIT :Ping timeout: 250 seconds < 1553229127 325977 :ProofTechnique!sid79547@gateway/web/irccloud.com/x-uxucyhmbsiwggoqq QUIT :Ping timeout: 240 seconds < 1553229188 344534 :dingwat!uid70835@gateway/web/irccloud.com/x-necthraxpzglljqy QUIT :Ping timeout: 268 seconds < 1553229265 17914 :ProofTechnique!sid79547@gateway/web/irccloud.com/x-ygqddjrygpqluieg JOIN :#esoteric < 1553229265 616059 :^[!sid43445@ircpuzzles/2015/april-fools/sixth/zgrep JOIN :#esoteric < 1553229366 1745 :dingwat!uid70835@gateway/web/irccloud.com/x-dwskxtowtqvdastb JOIN :#esoteric < 1553230058 654993 :oerjan!oerjan@sprocket.nvg.ntnu.no QUIT :Quit: Nite < 1553230307 813469 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net JOIN :#esoteric < 1553230599 727887 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net QUIT :Ping timeout: 268 seconds < 1553234192 474176 :danieljabailey!~danieljab@cpc75709-york6-2-0-cust725.7-1.cable.virginm.net QUIT :Ping timeout: 244 seconds < 1553236807 45537 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net JOIN :#esoteric < 1553237063 972863 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net QUIT :Ping timeout: 252 seconds < 1553240868 253507 :b_jonas!~x@catv-176-63-24-20.catv.broadband.hu PRIVMSG #esoteric :" If I just compiled it with -m32, it'd be simple." => no, it wouldn't be, because HackEso doesn't have the necessary system headers installed so you can't easily compile to x86_32 with gcc with the default options < 1553241751 484908 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net JOIN :#esoteric < 1553242524 495234 :b_jonas!~x@catv-176-63-24-20.catv.broadband.hu PRIVMSG #esoteric :"And the mmap syscall on x86-32 takes the arguments packed into a struct" => are you sure? because it only has six arguments, and the linux man-pages don't mention that. can you use the ipc system call to map a sysvipc shared memory segment instead? < 1553242657 727680 :b_jonas!~x@catv-176-63-24-20.catv.broadband.hu PRIVMSG #esoteric :I think it's the socket syscalls that take argument the way you describe: http://man7.org/linux/man-pages/man2/socketcall.2.html < 1553242866 286681 :b_jonas!~x@catv-176-63-24-20.catv.broadband.hu PRIVMSG #esoteric :fizzie: and http://man7.org/linux/man-pages/man2/syscall.2.html confirms that syscalls take up to six arguments on x86_32 < 1553242877 674562 :b_jonas!~x@catv-176-63-24-20.catv.broadband.hu PRIVMSG #esoteric :with the int80 interface < 1553243005 531644 :b_jonas!~x@catv-176-63-24-20.catv.broadband.hu PRIVMSG #esoteric :http://man7.org/linux/man-pages/man2/mmap.2.html and http://man7.org/linux/man-pages/man2/mmap2.2.html describe the specific syscall < 1553245436 812889 :b_jonas!~x@catv-176-63-24-20.catv.broadband.hu QUIT :Quit: leaving < 1553245534 604251 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net QUIT :Remote host closed the connection < 1553247005 185670 :arseniiv!~arseniiv@136.169.202.72 JOIN :#esoteric < 1553247405 571463 :nfd9001!~nfd9001@c-73-157-90-101.hsd1.wa.comcast.net QUIT :Read error: Connection reset by peer < 1553247494 591760 :nfd9001!~nfd9001@c-73-157-90-101.hsd1.wa.comcast.net JOIN :#esoteric < 1553247499 79453 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net JOIN :#esoteric < 1553248675 732103 :danieljabailey!~danieljab@cpc75709-york6-2-0-cust725.7-1.cable.virginm.net JOIN :#esoteric < 1553249398 237810 :ais523!~ais523@unaffiliated/ais523 JOIN :#esoteric < 1553249580 259957 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :@tell b_jonas No, the man pages describe the C wrappers. See https://github.com/torvalds/linux/blob/master/mm/mmap.c#L1624 < 1553249580 341106 :lambdabot!~lambdabot@haskell/bot/lambdabot PRIVMSG #esoteric :Consider it noted. < 1553249586 917924 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :@tell b_jonas However, it seems like only the "legacy" mmap call uses the struct wrapper, and the more modern mmap_pgoff (the one that takes page offset and is behind mmap2) is defined via SYSCALL_DEFINE6, so should in fact be callable: https://github.com/torvalds/linux/blob/master/mm/mmap.c#L1616 < 1553249587 1823 :lambdabot!~lambdabot@haskell/bot/lambdabot PRIVMSG #esoteric :Consider it noted. < 1553249596 36359 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :@tell b_jonas I know you can pass 6 arguments via the in 0x80 interface, I don't know why the old_mmap call packs them in a struct. Maybe the interface was slightly different in olden times. < 1553249596 107768 :lambdabot!~lambdabot@haskell/bot/lambdabot PRIVMSG #esoteric :Consider it noted. < 1553249754 813356 :AnotherTest!~turingcom@d51A4B8E1.access.telenet.be JOIN :#esoteric < 1553251427 393632 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I vaguely remember that an old, old syscall interface took fewer arguments than that < 1553252137 183226 :int-e!~noone@int-e.eu PRIVMSG #esoteric :naturally; x86 simply had fewer registers to spare < 1553252376 49106 :dingwat!uid70835@gateway/web/irccloud.com/x-dwskxtowtqvdastb QUIT :Ping timeout: 252 seconds < 1553252461 565263 :dingwat!uid70835@gateway/web/irccloud.com/x-ugcbaelohapwjhdf JOIN :#esoteric < 1553254488 916015 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Well, or so I thought. They're using all 7 of them now, even ebp, which I expected to be left out. < 1553255357 825212 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :oh wow, why did I never see ELVM before? https://github.com/shinh/elvm < 1553255361 960709 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :somehow I am not surprised at the author < 1553255391 689852 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(it's a C compiler modified to support a range of esolangs as backends, e.g. it can compile to BF, INTERCAL or Whitespace) < 1553255461 496784 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :also, sizeof(char) == sizeof(int) == sizeof(void*), and CHAR_BIT varies but is usually 24 :-D < 1553255711 268661 :int-e!~noone@int-e.eu PRIVMSG #esoteric :ais523: did you see the reference that I added to https://esolangs.org/wiki/Talk:Interfrac ? (I was almost giddy when I finally found it. It's actually a different source than I originally had for ILP in NP.) < 1553255736 792055 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(And I still don't know where that was.) < 1553255738 494064 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :no, but I've seen it now < 1553256432 657300 :mich181189_!sid268336@gateway/web/irccloud.com/x-ncutvljorlezltpb JOIN :#esoteric < 1553256545 390607 :S_Gautam!uid286066@gateway/web/irccloud.com/x-rzzvsfynnisuzebp JOIN :#esoteric < 1553256874 343615 :Cale!~cale@2607:fea8:995f:fb71:89e7:e726:3d21:6a1c QUIT :*.net *.split < 1553256874 578982 :mich181189!sid268336@gateway/web/irccloud.com/x-dchpbxiiauajhgba QUIT :*.net *.split < 1553256877 70172 :mich181189_!sid268336@gateway/web/irccloud.com/x-ncutvljorlezltpb NICK :mich181189 < 1553257054 384067 :HackEso!~HackEso@techne.zem.fi QUIT :Ping timeout: 255 seconds < 1553257061 814097 :HackEso!~HackEso@techne.zem.fi JOIN :#esoteric < 1553257248 550407 :Cale!~cale@2607:fea8:995f:fb71:80e4:4cde:2f4c:fbfc JOIN :#esoteric < 1553257651 4436 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 JOIN :#esoteric < 1553257685 463941 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :fizzie: was that old_mmap syscall even used on x86_32? < 1553257726 619663 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I'll try to look this up later < 1553257779 463679 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :wati < 1553257785 969215 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :there's a note about mmap in http://man7.org/linux/man-pages/man2/syscalls.2.html < 1553257853 157826 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :fizzie: sorry, you're right. that note tells that because the original mmap is a very old syscall, it used to be called with a parameter block on x86_32, despite that six arguments can be passed in syscalls in x86_32 now < 1553257946 604360 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :fizzie: ok, so you can call the mmap2 system call, or the ipc system call in the shmget mode, to get a memory mapping. < 1553257959 374473 :Lord_of_Life_!~Lord@unaffiliated/lord-of-life/x-0885362 JOIN :#esoteric < 1553258000 535556 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 QUIT :Ping timeout: 244 seconds < 1553258103 448298 :Lord_of_Life_!~Lord@unaffiliated/lord-of-life/x-0885362 NICK :Lord_of_Life < 1553258744 822117 :danieljabailey!~danieljab@cpc75709-york6-2-0-cust725.7-1.cable.virginm.net QUIT :Ping timeout: 272 seconds < 1553260277 327679 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: yes, you're right, apparently there is a historical artifact there in the original mmap syscall. < 1553263425 692218 :int-e!~noone@int-e.eu PRIVMSG #esoteric :shachaf: ftr, you're an evil person ;-) (I relented and bought Baba is You and I've already sunk 11 hours into it) < 1553263521 763758 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :int-e: how many levels does that have? I hope they improved level design since that demo < 1553263584 447761 :int-e!~noone@int-e.eu PRIVMSG #esoteric :more than a hundred < 1553263620 73548 :int-e!~noone@int-e.eu PRIVMSG #esoteric :and at least one level is impossible (probably not really but I have no clue how it's supposed to work) < 1553264940 965988 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :int-e: I see < 1553265229 147959 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :suppose you're writing an esolang which does I/O as individual bits; should bits within a byte be big- or little-endian? < 1553265244 151044 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :unlike bytes within a word, for which there are several good reasons to be little-endian, I can't see a reason to break the symmetry here < 1553265290 541167 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I guess I'd prefer big endian for human readability: 00100000 for a space < 1553265353 112711 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I guess big endian is slightly easier for input, little endian slightly easier for output? At least when doing the standard multiplication/division based base conversions. < 1553265361 329062 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I'm wondering whether one particular endianness might be easier to produce from within esolang code < 1553265380 837977 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :hmm, yes, you save a temporary in both cases, don't you? < 1553265408 932564 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :although not really, because you need a loop counter anyway, and you can use the same temporary for the loop counter and for remembering which bit you've reached < 1553265411 390716 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: yeah, that's the sort of thing I have to decide for specifying (and implementing) a standard library for consumer society, although it's not necessarily base 2, I can use larger bases (3 or 4 or 5 or 8 or 16), and not only for IO, but for arithmetic too < 1553265493 350913 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :so far I think I'll be using the endianness where the code emits the higher order bits first < 1553265494 90976 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :also you can shift the bits into the number backwards, if you have 256/128 as a constant or wrapping storage < 1553265498 71233 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :in BF it's often easier to read the top bit of a number than the bottom bit… < 1553265501 813346 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :or, hmm, now I'm not sure; the top bit (for some fixed bitwidth) is easier to read in a non-wrappinig impl, but you can read the bottom bit in a wrapping impl by multiplying by 128 and checking to see whether you have 0 < 1553265512 617878 :ais523!~ais523@unaffiliated/ais523 QUIT :Quit: sorry for my connection < 1553265524 931683 :ais523!~ais523@unaffiliated/ais523 JOIN :#esoteric < 1553266000 527804 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I think you can read the lowest bit in brainfuck too. < 1553266090 608300 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :well, BF is transformation-on-memory-complete, the question is as to how easy the various bit-reading codes are < 1553266125 364852 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :this problem comes up in The Waterfall Model too, I haven't decided whether it's easier to read high bits or low bits first < 1553266143 174882 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :this should read the low bit: >[-]+>[-]>[-]<<< [- >[->>+<<]>[-<+>]>[-<+>]<<<] < 1553266147 108625 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(you either repeatedly halve, or else compare against something that's repeatedly halving) < 1553266166 119136 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :clears the three fields to the right, then puts the parity to the field two to the right while zeroing the current cell < 1553266181 621087 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :you could also copy the value if you don't want to destroy it < 1553266193 844809 :int-e!~noone@int-e.eu PRIVMSG #esoteric :ais523: in a typical language I'd do the equivalent of acc = 0; for (i = 0; i < 8; i++) { acc = 2*acc + get_bit(); } < 1553266209 856532 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :well, 128 in a wrapping impl can be obtained via --[>-<--]>- < 1553266232 122468 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you can change the >-< to a nondestructive add to get a nondestructive multiply-by-128 < 1553266232 843231 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: how do you read the seventh bit? < 1553266243 951256 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :that's got to be shorter, but you'd then have to double the number to read the next bit < 1553266253 524984 :int-e!~noone@int-e.eu PRIVMSG #esoteric :rather than acc = 0; bit = 1; for (i = 0; i < 8; i++) { if (get_bit()) { acc += bit }; bit *= 2; } < 1553266277 379710 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(this is assuming something without builtin bit shift (or exponentiation)) < 1553266315 257505 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :acc = 0; for (i = 1; i != 256; i*=2) { if (get_bit()) acc += i; } < 1553266322 957931 :int-e!~noone@int-e.eu PRIVMSG #esoteric :... I misplaced that semicolon in "};". < 1553266335 848311 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I think that's less natural than your first example, but it's way shorter than the second < 1553266352 388240 :int-e!~noone@int-e.eu PRIVMSG #esoteric :if I can compare wit 256 easily... sure. < 1553266364 479798 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :well, in wrapping BF it's very easy, comparing with 256 is what ] does :-) < 1553266389 420219 :int-e!~noone@int-e.eu PRIVMSG #esoteric :. o O ( let's take a 16 bit variant ) < 1553266395 611100 :int-e!~noone@int-e.eu PRIVMSG #esoteric :;) < 1553266412 233683 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :then the same code reads a 16-bit character and you don't have to change it at all :-) < 1553266428 913808 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Also input may be less important than output? Or not? It really depends on what you want to do... < 1553266458 676459 :int-e!~noone@int-e.eu PRIVMSG #esoteric :...and the difference between big endian and little will always be relatively insignificant, I think. < 1553266520 936166 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :what got me thinking about this was "suppose you're making an IR to target esolangs, what does I/O look like?" < 1553266540 55215 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :unary is an option and has several advantages, but also a clear disadvantage < 1553266711 311429 :arseniiv!~arseniiv@136.169.202.72 PART #esoteric :"gone too far" < 1553266723 942447 :arseniiv!~arseniiv@136.169.202.72 JOIN :#esoteric < 1553266870 798835 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I think the optimum is probably unary for text output (likely with 1 = NUL, 2 = SOH, etc., and 0 = EOF); and binary for binary output < 1553266884 706467 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(in either case the language itself would just output 0s and 1s, just the interpretation of them would be different) < 1553267021 796470 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: I'm definitely not going to use unary. I'm going to use radixes between 2 and 16 inclusive. < 1553267071 597601 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: well, we're designing different languages, so your usecase may well be different from mine < 1553267087 372509 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I guess this goes back to the whole "what is a number?" question < 1553267110 812203 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :sure < 1553267120 929746 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and in esolangs, at least, the answers seems fairly clear for nonnegative integers: it's a count of something, typically data or loop iterations < 1553267158 563146 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :part of the reason why I want a radix higher than 2 for some options is to make the code more compact, so that if I want to put an integer literal in the source code, I don't have to enter 32 bits, but instead just 8 hexits < 1553267158 675992 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so "do this 4 times" is a property inherent in the number 4, it's what defines it, really (because it lets you impose 4ness onto arbitrary structures) < 1553267167 266395 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and "output a 1 bit 4 times" is how you output the numebr 4 in unary < 1553267186 777929 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: isn't that just syntax, though? you could have the lexer expand your high-radix number into unary < 1553267189 555990 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(+)*12345 < 1553267258 777203 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: the syntax itself doesn't know about numbers. only the standard library knows about them, and the standard library interface is such that I can implement the arithmetic library in pure Consumer Society. in fact that's how I want to implement it first, just to prove that it works, and then I add an optimized implementation into the interpret < 1553267258 894116 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :er. < 1553267287 350177 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :the library can't add arbitrary syntax to the language < 1553267294 129298 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :OK, and you don't want a preprocessor < 1553267331 523246 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :yes, or at least, I have a specific syntax in mind, and want to make that work < 1553267376 583551 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :the reference implementation would then store the numbers as binary internally < 1553267384 22996 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :but that isn't visible in the interface < 1553267405 700274 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :well, IMO a good Underload interpreter should store numbers in binary < 1553267412 397235 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :internally < 1553267415 759923 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but the syntax doesn't work like that at all < 1553267443 838113 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :why not? if you want to handle large numbers in underload, you can implement a binary representation in underload just fine < 1553267472 563184 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :in this case I want to handle 32-bit numbers because I decided I want to implement the SGB random generator, and that uses 32-bit division < 1553267503 540906 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and then I'll implement a maze generator that calls that random number generator < 1553267523 113373 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: because the binary representation is very inconvenient for working with < 1553267530 943041 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you wouldn't be able to multiply with just *, for example < 1553267534 146537 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :so some numbers will be greater than 2**30, but I won't repeat anything as many times < 1553267564 322170 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :make the interpreter use bignums internally < 1553267571 471329 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: yes, I'll have to implement the multiplication and division myself. I've implemented binary arithmetic a fwe times already, so I know what I'm getting myself into < 1553267581 276134 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :all esolang interpreters should do that unless the esolang inherently has a word size cap (which IMO is bad esolang design) < 1553267591 905471 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: for underload, yes, I'd use bignums. for Consumer society, that's not so easy < 1553267636 69581 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :from my point of view, the best way to write esolangs is normally for the program to handle numbers in unary (simplest), and the interpreter to optimize that, unless the esolang is timing-dependent in some way and thus can't be optimized < 1553267682 531373 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :it's not that 32 bits is an inherent limit. I could implement 128 bits instead if I wanted to, for just slightly larger code, but if I do 32 bits, that makes it clear enough that I could do larger if I wanted while keeping the code clean. < 1553267902 809755 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it'd be hard to imagine an esolang where 32 bits /is/ an inherent limit (so, of course, I'm trying) < 1553268370 971735 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: I don't think it would be hard. x86_32 already has built-in 32-bit integers, and you can encourage that even more if you don't expose a carry flag and don't expose high multiplication. < 1553268424 953495 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :yeah, and don't expose double shift and don't expose unsigned division either. it goes a long way to make longer arithmetic inconvenient, but still totally realistic and characteristic of real cpus. < 1553268444 988236 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :sure, that means it's for non-esoteric languages, but I don't see why an esoteric language couldn't do the same < 1553268464 881966 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :intercal already has 16 bits as an inherent limit, and I can imagine a 32-bit variant. < 1553270187 906292 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the 16 is arbitrary though > 1553270883 726233 PRIVMSG #esoteric :14[[07Livefish14]]4 N10 02https://esolangs.org/w/index.php?oldid=60558 5* 03Areallycoolusername 5* (+1681) 10Created page with "[[Livefish]] is an [[esoteric programming language]] made by [[User: Areallycoolusername|Areallycoolusername]]. It's the opposite of [[Deadfish]] in that it has a way to input..." > 1553271055 887588 PRIVMSG #esoteric :14[[07Joke language list14]]4 10 02https://esolangs.org/w/index.php?diff=60559&oldid=60547 5* 03Areallycoolusername 5* (+71) 10/* General languages */ < 1553271432 336753 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 QUIT :Quit: http://www.kiwiirc.com/ - A hand crafted IRC client < 1553271510 153318 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :Livefish would be /way/ more interesting if i was input, and o was some other operation < 1553271519 839362 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :that said, it would still likely be uninteresting > 1553271551 983810 PRIVMSG #esoteric :14[[07Livefish14]]4 10 02https://esolangs.org/w/index.php?diff=60560&oldid=60558 5* 03Areallycoolusername 5* (+131) 10 < 1553271558 842130 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you can write practically useful TC input-only languages, though (e.g. context-free grammars); they provide observable output in the form of halt/nonhalt > 1553271572 618821 PRIVMSG #esoteric :14[[07Livefish14]]4 10 02https://esolangs.org/w/index.php?diff=60561&oldid=60560 5* 03Areallycoolusername 5* (-31) 10 > 1553271641 298665 PRIVMSG #esoteric :14[[07Livefish14]]4 10 02https://esolangs.org/w/index.php?diff=60562&oldid=60561 5* 03Areallycoolusername 5* (+6) 10 > 1553271728 651631 PRIVMSG #esoteric :14[[07Livefish14]]4 10 02https://esolangs.org/w/index.php?diff=60563&oldid=60562 5* 03Areallycoolusername 5* (+10) 10 > 1553271762 282556 PRIVMSG #esoteric :14[[07Livefish14]]4 10 02https://esolangs.org/w/index.php?diff=60564&oldid=60563 5* 03Areallycoolusername 5* (-17) 10/* Categories */ < 1553273514 249913 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :int-e: Which level is impossible? < 1553273580 417349 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Level 12 in the forest... skull house. I don't want any spoilers though. < 1553273645 9647 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Of course. > 1553274355 925088 PRIVMSG #esoteric :14[[07User:Areallycoolusername14]]4 10 02https://esolangs.org/w/index.php?diff=60565&oldid=59883 5* 03Areallycoolusername 5* (+249) 10 > 1553274427 576853 PRIVMSG #esoteric :14[[07User:Areallycoolusername14]]4 10 02https://esolangs.org/w/index.php?diff=60566&oldid=60565 5* 03Areallycoolusername 5* (+34) 10 > 1553274439 251723 PRIVMSG #esoteric :14[[07User:Areallycoolusername14]]4 10 02https://esolangs.org/w/index.php?diff=60567&oldid=60566 5* 03Areallycoolusername 5* (+2) 10 < 1553276925 115803 :S_Gautam!uid286066@gateway/web/irccloud.com/x-rzzvsfynnisuzebp QUIT :Quit: Connection closed for inactivity < 1553277081 955128 :danieljabailey!~danieljab@cpc115608-york6-2-0-cust168.7-1.cable.virginm.net JOIN :#esoteric < 1553277349 956387 :adu!~ajr@pool-70-110-26-251.washdc.fios.verizon.net JOIN :#esoteric < 1553278561 295659 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Huh. I somehow thought when you call int 0x80 in a 64-bit binary, you go through the compatibility layer where the syscall numbers are the x86-32 ones, and you pass in 32-bit ebx/ecx/edx/etc registers. In actual fact, it looks like when I call int 0x80 it's interpreted using the 64-bit syscall numbers and register order. Or at least that's how strace is printing them. < 1553278581 902289 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Maybe strace is just confused by the whole concept. Because the call doesn't actually do anything, and it prints "?" as the return value too. < 1553278778 262592 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Right, I think that's just strace. Because when I try to run the regular "syscall"-based version with int 0x80, strace prints write(1, "Hello world!\n", 13) = ? but the process just exits. (The 64-bit syscall write number 1 is exit on the i386 side.) < 1553278817 231503 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu JOIN :#esoteric < 1553278831 786818 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :I guess I just won't use strace; just wanted to use it to validate the args. Still getting a -1 (EPERM) out of the purported mmap call. < 1553278976 226396 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Oh, looks like it might actually care about fd needing to be -1 when MAP_ANONYMOUS is set. The man page was ambivalent (stating it should be ignored), so I left it at 0 as that was easier. < 1553279076 289195 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Or not. I'm getting EBADF when I try to set it to -1. < 1553279169 996635 :FreeFull!~freefull@defocus/sausage-lover JOIN :#esoteric < 1553280537 720118 :danieljabailey!~danieljab@cpc115608-york6-2-0-cust168.7-1.cable.virginm.net QUIT :Read error: Connection reset by peer < 1553280657 948665 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :"you can write practically useful TC input-only languages, though (e.g. context-free grammars)" => huh what? no context free grammar is Turing-complete < 1553280665 817395 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ais523: ^ < 1553280697 12877 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I meant context-sensitive grammars < 1553280708 635388 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and said the wrong thing out of habit because CFGs are common and CSGs are rare < 1553280740 203354 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :fizzie: try to call write first, that has the same syscall number in all versions, right? < 1553280766 854004 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :b_jonas: No, that's what confusing me right before you joined. < 1553280790 833989 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :b_jonas: The 32-bit write (1) is actually the 64-bit exit, so strace printed "write(...) = ?" + "program exited". < 1553280813 766711 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :fizzie: what I don't know is, when you call a syscall with int 80, what registers or register halves is the syscall allowed to clobber < 1553280824 205768 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :for the proper x86_64 syscall interface, I do know the answer < 1553280839 22651 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :but not for the int 80 < 1553280840 675882 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Er, I mean, the 64-bit write (1) is the 32-bit exit, is what I needed to say. < 1553280849 345461 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :wait what? < 1553280852 568608 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :even that's changed? < 1553280853 406129 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :wow < 1553280858 483351 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Single-stepping with gdb confirms that it exits immediately on the "int 0x80" where eax/rax is 1, so it's being treated in the 32-bit manner, even though strace prints it it as write. < 1553280925 344474 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :fizzie: even without strace or gdb, you could get a few bits result out if you make the program (1) call an illegal instruction, (2) cause a segmentation fault by writing to the null page, (3) livelock with an infinite loop < 1553280928 524167 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Yes, the syscall_64.tbl list starts at 0 with "read, write, open, close, ..." while the syscall_32.tbl starts from 1 (well, 0 is restart_syscall, that's special) with "exit, fork, ...". < 1553280964 490348 :adu!~ajr@pool-70-110-26-251.washdc.fios.verizon.net QUIT :Quit: adu < 1553280986 303673 :adu!~ajr@pool-70-110-26-251.washdc.fios.verizon.net JOIN :#esoteric < 1553280994 869671 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :the 32-bit one starts with exit, fork, read, write, open, close, waitpid, creat, link, unlink, execve, chdir, time, mknod, chmod, lchown, break < 1553281011 234880 :adu!~ajr@pool-70-110-26-251.washdc.fios.verizon.net QUIT :Client Quit < 1553281011 964110 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :hmm < 1553281031 254404 :adu!~ajr@pool-70-110-26-251.washdc.fios.verizon.net JOIN :#esoteric < 1553281058 227876 :adu!~ajr@pool-70-110-26-251.washdc.fios.verizon.net QUIT :Client Quit < 1553281059 887515 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :that could get ugly the other way, if you try to call write, but actually call fork < 1553281085 328333 :adu!~ajr@pool-70-110-26-251.washdc.fios.verizon.net JOIN :#esoteric < 1553281096 195513 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :In any case, I'm a bit unsure about this EBADF. I think it's likely using the x86-32 argument registers, because when I change the fifth register (edi) from 0 to -1, the return value goes from -1 (EPERM) to -9 (EBADF). < 1553281097 956288 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :and what does the sysenter interface do? is that the same as the int80 interface? < 1553281105 277142 :adu!~ajr@pool-70-110-26-251.washdc.fios.verizon.net QUIT :Client Quit < 1553281108 326842 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :...uh, actually, scratch all that. It's just that I can't count. < 1553281127 701517 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Turns out 0x20 | 0x40 *isn't* actually 0x40, but 0x60 instead. < 1553281128 996224 :adu!~ajr@pool-70-110-26-251.washdc.fios.verizon.net JOIN :#esoteric < 1553281137 57855 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Who knew. < 1553281151 861021 :adu!~ajr@pool-70-110-26-251.washdc.fios.verizon.net QUIT :Client Quit < 1553281162 31803 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Well, then it all makes sense, it doesn't have 0x20 (MAP_ANONYMOUS) set so it's either trying to mmap stdin (EPERM) or -1 (EBADF). < 1553281184 112516 :adu!~ajr@pool-70-110-26-251.washdc.fios.verizon.net JOIN :#esoteric < 1553281193 49844 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :yeah, it ought to use the x86_32 register conventions if you use int80 < 1553281198 539908 :adu!~ajr@pool-70-110-26-251.washdc.fios.verizon.net QUIT :Client Quit < 1553281227 198608 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :so the syscall number goes in eax, and the arguments to ebx, ecx, edx, esi, edi, ebp < 1553281244 869639 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :EPERM seems like an interesting error for mmapping stdin < 1553281273 735236 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it should be EACCES according to the docs < 1553281291 77189 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :oh, but EACCES is "Permission denied" < 1553281297 653995 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(EPERM is "Operation not permitted") < 1553281324 170899 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :EPERM The prot argument asks for PROT_EXEC but the mapped area belongs to a file on a filesystem that was mounted no-exec. < 1553281330 192239 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :It kind of might be an instance of that sort of thing. < 1553281341 660705 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :I was trying to map it rwx just because there's no reason not to. < 1553281352 382465 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :oh, I see < 1553281361 150499 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I normally avoid +x in maps < 1553281372 682819 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ais523: yeah, what fizzie says, plus /dev/pts is mounted noexec < 1553281373 34121 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :besides, mapping /anything/ rwx is a huge w^x violation < 1553281378 587765 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :I thought I might want to run some code in there, though right now it doesn't. < 1553281396 570567 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Anyway, with the flags fixed (MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT), it's now returning a pointer in the low 32 bits, so that should be fine: http://ix.io/1Ee2 < 1553281404 243950 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ais523: like I said yesterday, rwx used to be normal, because for a pretty long time, x86 didn't have a way to mark pages (as opposed to segments) readable but not executable < 1553281443 494743 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :b_jonas: clearly you should just make your mutable variables write-only, then < 1553281469 175044 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(this is… possibly viable given the right sort of language?) < 1553281480 980534 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ais523: old x86 didn't allow marking a page executable but not readable either < 1553281501 547891 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :now I'm wondering what operations x86 allows on write-only memory, can you do RMW instructions if they don't have visible side effects? I'm guessing no < 1553281548 861174 :sebbu3!~sebbu@unaffiliated/sebbu JOIN :#esoteric < 1553281570 584496 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :the whole non-executable page thing came about only because of security people trying to reduce effects of bugs < 1553281609 751413 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :wtf was these loud noise < 1553281766 725333 :sebbu!~sebbu@unaffiliated/sebbu QUIT :Ping timeout: 250 seconds < 1553281950 619192 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Aw. Works locally, crashes on HackEso. That might be a little annoying to debug. < 1553281966 316318 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :fizzie: ouch < 1553281974 159689 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :fizzie: how do you even compile it on HackEso? < 1553281983 164669 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :oh wait < 1553281990 662160 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :`` echo 'const char main[] = "%0000%HELOP[P]P_4~PY4yPZ4eP^,b,@̀PYSX5Hell1ADSX5o wo1AHSX5rld!1ALSX4@4J1AP4@4GPZ$AP[QX4DPYRX$D̀ß";' | gcc -x c - -o /tmp/hello4 && /tmp/hello4 < 1553281991 720388 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :you're compiling a x86_64 program, sorry < 1553281991 889186 :HackEso!~HackEso@techne.zem.fi PRIVMSG #esoteric :​/hackenv/bin/`: line 5: 64 Segmentation fault /tmp/hello4 < 1553281994 762216 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :that you can compile < 1553282021 709920 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :try cheating by making the program not of that format < 1553282039 59930 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :That command line prints "Hello world!" on both my home machine and this work computer. < 1553282065 779224 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Yeah, will have to look into it a bit later, need to go grocery shopping. < 1553282076 429505 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :But I know the format in general works. < 1553282102 766719 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :`` echo 'const char main[] = "%0000%HELOPPPPPPT]5Hell1E XP5o wo1E$XP5rld!1E(XP4@4J1E,4@4GPZ$AP_^^^^T^\17\5XX\303";' | gcc -x c - -o /tmp/hello4 && /tmp/hello4 < 1553282104 77687 :HackEso!~HackEso@techne.zem.fi PRIVMSG #esoteric :Hello world! < 1553282203 402971 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :The int 0x80 version also works on the machine HackEso is running on, so it's something about the UML sandbox. Which isn't *that* surprising: UML in general does weird things about memory. < 1553282215 614176 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Actually, it's a separate Linux kernel. < 1553282225 151154 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Maybe it's compiled without the 32-bit emulation in the first place. < 1553282281 591027 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :hmm < 1553282300 839964 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :it sure does < 1553282572 708180 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :I do have that working version that doesn't use any syscalls at all, I just suspect if I finish converting it to be printable in a naive way, it's going to end up being longer than comfortably fits on an IRC line. < 1553282652 649274 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :``` set -e; >tmp/a.c echo $'#include\n''int main(void) { printf("hello ifrzMgePz7Lg,\n"); }'; gcc -g -Wall -O -fdiagnostics-color=never -o tmp/a.out tmp/a.c; tmp/a.out < 1553282654 27016 :HackEso!~HackEso@techne.zem.fi PRIVMSG #esoteric :hello ifrzMgePz7Lg, < 1553282686 147967 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :does it have to fit in an irc line? you can just use multiple irc lines < 1553282699 672459 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :I guess it doesn't, really, just would be more elegant if it did. < 1553282710 21246 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :If the word "elegant" can really be attached to that. < 1553282722 766653 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :fizzie: it's really the -fdiagnostics-color=never why I don't want to insist on putting all the compilation stuff in one irc line < 1553282751 544718 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :it's just a ridiculously long compilation option, and the gcc defaults and libc defaults are somewhat bad for historical reasons, < 1553282780 337332 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :so you can end up needing stuff like -std=gnu++-17 and #define _GNU_SOURCE and twenty includes just to do nothing < 1553282795 487232 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :and I don't want to omit those just to golf the program < 1553282836 228130 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :The non-syscall code walks up the stack to reach the ELF auxiliary vector, picks up the AT_PHDR pointer to locate the program header, scans that to find the PT_DYNAMIC section, looks up the DT_DEBUG entry used for communicating between the dynamic linker and a debugger, uses the link_map chain there to enumerate all loaded shared objects, scans through their symbol tables to find "exit" and "puts", and < 1553282842 257805 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :finally uses those to do the job. < 1553282857 192515 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :fizzie: ok, wait a moment < 1553282871 569454 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :I think I read something relevant yesterday, let me look it up < 1553282882 491509 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :hmm wait < 1553282886 190596 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :that was for x86_32 code < 1553282901 948925 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :so that can't work < 1553282946 446954 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :but still, even in x86_64, there must be a function with a syscall instruction mapped somewhere, that the kernel and libc together use for signal handler magic < 1553282952 73021 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net QUIT :Remote host closed the connection < 1553282981 135285 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Yes, I could definitely do it much easier if I were willing to make it work on one specific libc. < 1553282995 628517 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :(Or scan through memory to find suitable bytes.) < 1553283012 315270 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :(Well, maybe that wouldn't be so much easier than the enumerate-symbols approach.) < 1553283056 18549 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :There's also an easy-to-find entry to locate the vDSO page, which could be used to make a version that reliably works on one specific kernel. < 1553283114 263697 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :On x86-32 systems, the vDSO actually has a function just for this, __kernel_vsyscall, which is there so that userspace apps can just call that instead of having to do the work of deciding whether sysenter is supported. < 1553283154 874009 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :On x86-64, that's not there, the page contains just __vdso_clock_gettime, __vdso_getcpu, __vdso_gettimeofday and __vsdo_time. < 1553283184 206187 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Some of those do have syscall instructions that could be jumped to, but again that would make the solution brittle if the vDSO contents change. < 1553283186 610814 :sebbu3!~sebbu@unaffiliated/sebbu NICK :sebbu < 1553283541 392160 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :fizzie: but doesn't it have to work that way on any libc? I mean < 1553283554 255053 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :fizzie: what does the kernel put on the stack when it calls a signal handler? < 1553283569 651648 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :fizzie: I vaguely remember Web of Lies scanning the vDSO to find a syscall instruction < 1553283572 475119 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :doesn't it put a return address to a routine that calls the magic system call that tells the kernel that the signal handler has finished? < 1553283577 51292 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :wasn't there something like that? < 1553283579 142443 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and then jumping to it via IP teleportation over ptrace < 1553283590 411806 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :maybe I'm confused < 1553283592 102838 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(it seemed saner than trying to alter the executable's memory image to do a system call) < 1553283593 395411 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :I'll have to test that < 1553283801 145270 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :I think there's a specific system call (sigreturn?) somewhere in user-space code that signal handlers return to, which then informs the kernel that the signal handling is done. But I'm not sure how that helps for this. < 1553283820 127938 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Unless there's an easier way to find that code than there is to find the puts/exit functions. < 1553283861 309527 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :syscall/signal interaction is interesting < 1553283877 391941 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the kernel frequently, either virtually or actually, rewinds the IP a couple of bytes to send it over the same syscall again < 1553283884 629571 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :that's how restartable syscalls are restarted, for example < 1553283900 350102 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it wouldn't surprise me if sigreturn is used as a replacement syscall for nonrestartable signals in much the same way < 1553283926 766928 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(fwiw, this mechanism makes it highly likely that syscalls use only caller-saves registers, as it'd be hard to get the parameters correct otherwise) < 1553284011 747011 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ais523: is that really what the kernel does? I always thought it was the libc that handled all the restarting, by intercepting all the sigaction calls to know which signals it has to restart after, and restarting on a -EITNR in the C functions that call the system call < 1553284027 299717 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :b_jonas: no, it happens in the kernel, you can see this using strace < 1553284047 940036 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :there are a few really out-there signal numbers (not in the normal sequence) reserved for this purpose < 1553284051 67940 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :and I think the sigreturn had some other reason to exist, not the syscall restarting < 1553284054 319958 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I can't remember whether they're negative or really large < 1553284096 949583 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :but I didn't pay much attention to the whole system call restarting thing, because why would you want that? the whole point of signal handlers is that they must be able to wake up your program, and you can only do that if the system call isn't restarted < 1553284116 50377 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :in blocking high level functions like fread, sure, there you restart < 1553284142 808013 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :b_jonas: well, if you've set the signal to SIG_IGN, you presumably don't want the signal to interrupt the system call < 1553284150 728441 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :sometimes that's implemented as restarting it < 1553284153 97067 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :but otherwise, when a signal interrupts a syscall, it will be the blocking syscall that is the center of your event loop, like poll or something < 1553284173 87389 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :I do understand that the restarting must be handled for compatibility with existing programs of course < 1553284217 127468 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ais523: no! if you set it to SIG_IGN, then the system call isn't interrupted at all, from the user process's point of view. the kernel doesn't have to restart anything, or even interrupt the system call, because it doesn't have to invoke a handler < 1553284239 128277 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I vaguely remember that the kernel actually /does/ interrupt the system call while it checks to see if there's a handler < 1553284295 670266 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :and SIG_IGN has some special semantics for the kernel anyway, it's not just like calling an empty handler: SIG_IGN is inherited through an execve, SIG_IGN on SIGCLD makes the kernel wait all your children when they die. < 1553284353 616268 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :well, what actually matters is the SA_RESTART flag on the signal handler, which can be set independently per-handler (although it defaults to off unless you're using SIG_IGN, IIRC) < 1553284356 333228 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :that is why you have to be very careful with SIG_IGN: if a child accidentally inherits it, you can get really hard to debug bugs < 1553284383 237433 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :there was a particularly nasty bug in linux distros where some process set sigprocmask and children inherited it, the same could happen with signaction SIG_IGN < 1553284442 772047 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :well, there are some programs that do this sort of thing intentionally < 1553284444 575497 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :nohup comes to mind < 1553284458 764512 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ais523: yeah, I guess what you're saying makes sense, because libc can't easily tell which signal interrupted the syscall < 1553284670 812903 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :oh, I know why! < 1553284735 521587 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ais523: the kernel must put something on the stack because on signal return the stack pointer must be modified. on x86_32 that's only if a sigaltstack is active, but on x86_64 always, because there's a redzone < 1553284767 759528 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :oh right, you can't clobber the redzone < 1553284767 799116 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :you can't just have the signal handler return like a normal C function, the stack pointer would be wrong < 1553284798 565327 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :what even is the purpose of that thing, anyway? < 1553284858 776775 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :is it just to save a few assignments to SP? or is there some better optimization you can do with it? < 1553284883 556875 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ais523: uh, some optimization thing, but I'm not sure what right now < 1553284992 283580 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net JOIN :#esoteric < 1553285001 15486 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ais523: I think part of that is that the one-byte displacement you use in x86 addressing modes is a signed int8 < 1553285028 314592 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :but I think there's something other than that, possibly connected to instructions like push/pop < 1553285072 143309 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the redzone is 128 bytes, isn't it? that would make a lot of sense if it's the signed-int8 displcement that's relevant < 1553285224 464513 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ais523: something close to that, yes < 1553285480 56605 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ais523: it also allows you to load a value from the stack with pop but still keep the copy on the stack < 1553285530 98252 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :well, the copy isn't on the stack any more, it's in the redzone, but I know what you mean < 1553285533 34445 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :I'm not saying this comes up often, but the redzone doesn't have much of a price either < 1553285586 248679 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :if the kernel calls a signal handler, those 128 bytes don't cost much even when you aren't using them < 1553285588 208597 :int-e!~noone@int-e.eu PRIVMSG #esoteric :b_jonas: there's also the bit that tail functions don't have to set up their own stack frame if they need fewer than 120 or so bytes. < 1553285684 955636 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :int-e: that could be true even if the redzone was over *rsp, not under, if the calling convention just said that the 120 bytes over the return addess are callee-clobbered < 1553285758 508074 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :int-e: basically you have a choice of a constant offset of where the rsp points, and it only matters for when the stack is accessed with small displacements or call/ret/push/pop or similar which use a fixed displacement < 1553285767 915406 :int-e!~noone@int-e.eu PRIVMSG #esoteric :b_jonas: then you'd pay 120 bytes of stack space for every level of function calls even if no stack frame is allocated at all < 1553285777 993366 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(just for the return address) < 1553285795 596864 :int-e!~noone@int-e.eu PRIVMSG #esoteric :hmm < 1553285799 516140 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :oh, because it would intersect the previous ret address? < 1553285805 898950 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :yeah, sorry, you're right < 1553285809 524062 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :that wouldn't work < 1553285828 169560 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Err, yes, I think what I said is correct. I'm confusing myself. < 1553285894 764950 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :int-e: yes, what you say is correct. because the call/ret instructions access right above *rsp, you want space below that that can be used even if you did a dense series of calls and pushed above *rsp < 1553285956 627290 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :so the stuff you access with call/ret/push/pop and kin are above the stack pointer, and some of the thing you access only with displacements, not with those instructions, can be above < 1553285960 794502 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :some of them can be below < 1553285977 396042 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :or perhaps < 1553286079 821099 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :well, there definitely has to be a boundary somewhere on the stack so that above that is generally preserved by the callee, below that can be clobbered < 1553286173 727584 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :and because of how call/ret/push/pop works, it makes sense to put that boundary near *rsp < 1553286208 975853 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :which is why there's a scratch area below [rsp] < 1553286351 104981 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :well, I don't really claim I understand this < 1553286362 571918 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :figuring out good general-purpose calling conventions is a very hard problem < 1553286368 159348 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :good thing we already have one to use < 1553286513 826225 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it's probably only good on x86 < 1553286519 426389 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :well sure < 1553286523 117761 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and any goodness it has is relative to the general insanity of x86 < 1553286529 121269 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :this is cpu-dependent < 1553286537 539023 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :and this is on x86_64 in particular < 1553287515 974616 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ah, the linux manpage http://man7.org/linux/man-pages/man2/sigreturn.2.html gives some info < 1553287580 239912 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ah yes! < 1553287608 441158 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :besides setting the stack pointer, it resets the saved sigprocmask. I knew there was something I missed < 1553288082 560495 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :hmm < 1553288129 961054 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :that won't help, because you need at least either a system call or a symbol lookup to find that function that the signal handler stack frame calls, < 1553288154 206497 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :and if can you do a system call or symbol lookup then you no longer need that < 1553288192 403233 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :no wait < 1553288192 923365 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :wait < 1553288227 200617 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :it's a bit non-portable because it technically depends on the kernel version, but you can find the address from just the auxiliary vector I think < 1553288327 562954 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :oh < 1553288330 741793 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :it might be even better < 1553288333 323916 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :I'll have to test this < 1553288353 151897 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :hmm no < 1553288355 591868 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :darn < 1553288369 497595 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :I dunno < 1553288549 758457 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :nope < 1553288561 456748 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :you need a symbol lookup into libc I think < 1553288566 863938 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :so it won't help > 1553289382 635925 PRIVMSG #esoteric :14[[07User:Hakerh40014]]4 10 02https://esolangs.org/w/index.php?diff=60568&oldid=60554 5* 03Hakerh400 5* (-188) 10/* Programming languages we created */ > 1553289394 917444 PRIVMSG #esoteric :14[[07Truth-machine14]]4 10 02https://esolangs.org/w/index.php?diff=60569&oldid=60486 5* 03Illuminatu 5* (+177) 10/* Implementations */ > 1553289523 542924 PRIVMSG #esoteric :14[[07Aeolbonn14]]4 10 02https://esolangs.org/w/index.php?diff=60570&oldid=20079 5* 03Illuminatu 5* (+97) 10/* Examples */ < 1553290111 983520 :arseniiv_!~arseniiv@80.79.116.138 JOIN :#esoteric < 1553290304 287439 :ais523!~ais523@unaffiliated/ais523 QUIT :Quit: quit < 1553290325 972017 :arseniiv!~arseniiv@136.169.202.72 QUIT :Ping timeout: 252 seconds < 1553290403 522440 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :smh. arduino is doing some terrible thing where code inside comments gets preprocessor-expanded and then has compiler-level syntax errors < 1553290412 708737 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :I should once again ditch it and write basic AVR C < 1553290420 298315 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :but it's so convenient to throw things together < 1553290423 364061 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :when it isn't fucking you over < 1553290709 435004 :arseniiv_!~arseniiv@80.79.116.138 NICK :arseniiv < 1553290724 330943 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :kmc: ouch < 1553290824 240557 :arseniiv_!~arseniiv@136.169.202.72 JOIN :#esoteric < 1553290872 936265 :arseniiv__!~arseniiv@185.112.82.235 JOIN :#esoteric < 1553291051 942664 :arseniiv!~arseniiv@80.79.116.138 QUIT :Ping timeout: 246 seconds < 1553291080 216049 :arseniiv_!~arseniiv@136.169.202.72 QUIT :Ping timeout: 246 seconds < 1553291429 985170 :arseniiv__!~arseniiv@185.112.82.235 QUIT :Ping timeout: 246 seconds < 1553292059 960805 :Phantom_Hoover!~phantomho@cpc108439-cowc8-2-0-cust785.14-2.cable.virginm.net JOIN :#esoteric < 1553292065 101404 :Phantom_Hoover!~phantomho@cpc108439-cowc8-2-0-cust785.14-2.cable.virginm.net QUIT :Changing host < 1553292065 101443 :Phantom_Hoover!~phantomho@unaffiliated/phantom-hoover JOIN :#esoteric < 1553292374 815771 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :apparently used items are now described with the euphemism "pre-owned" rather than plain "used" or "second-hand" < 1553292417 753317 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :(I'm shopping on ebay.com) < 1553292522 614276 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :that's been the case for a looong time < 1553292524 816447 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :at least for cars < 1553292550 877019 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :kmc: I haven't been shopping online for long yet < 1553292559 362065 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :only for like two years so far < 1553292567 378111 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :ah < 1553292570 564887 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :I'm somewhat conventional and find it hard to get used to < 1553292574 296039 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :I bought my car online < 1553292576 538641 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :also I'm definitely not buying cars < 1553292580 642515 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :which is weird because no test drive < 1553292585 745955 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :but they had a 14 day return policy < 1553292592 400000 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :and as it turns out I love that car < 1553292599 822132 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :kmc: um, just because it's online you could have a test drive < 1553292611 545068 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :it was used < 1553292614 552399 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :even then < 1553292618 323745 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :how do you figure < 1553292655 544106 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :you search in the catalog of cars for sale, you contact the owner that you're interested, < 1553292673 774767 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :you agree with them at a time and place, and possibly pay an advance, and try the car before agreeing to take it, < 1553292693 502857 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :because especially for a used car there are a lot of things you may want to check directly on the car, that you can't see on photos or descriptions < 1553292696 510558 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :as in hidden errors < 1553292710 322081 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :this need not include a test drive, but it can < 1553292732 931471 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :depends on stuff like whether the car still has permission to run and insurance < 1553292756 363627 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :and whether it needs things fixed in a garage immediately after buying < 1553292861 671374 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :I'm buying cheap new items online, but see used ones in the listing when I search < 1553292888 961521 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :obviously I have to check that field that says "brand new" < 1553292896 544140 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :or "new (with tags)" < 1553292951 56106 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :that's not how buying cars online works < 1553292955 395859 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :it could have been thousands of miles away < 1553292960 507198 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :and, the seller does an inspection < 1553292971 78895 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :and you handle your own insurance and registration < 1553292981 691871 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :but yeah I was a little scared of getting ripped < 1553292982 891016 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :off < 1553292984 743200 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :but it was fine < 1553292990 124271 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :"thousands of miles" probably no, but a few hundred kilometers certainly < 1553292994 902109 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :ok < 1553293003 439156 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :sorry, I live in Europe, it's smaller < 1553293006 894871 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :you're once again pulling stuff out of your ass regarding things you've never done < 1553293023 891944 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :I wasn't buying on craigslist < 1553293038 166504 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :I went through a middleman that provides various services < 1553293043 711297 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :they also handled the registration for me < 1553293044 613568 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :ok < 1553293049 157147 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :which was convenient, although it took a long time < 1553293059 190087 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :so a used cars sales company < 1553293060 437075 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :makes sense < 1553293118 678364 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :sorry, I wasn't thinking of that, because my family and some co-workers bought and sold some cars and motorbikes recently, and they all bought or sold them directly to the previous or next owner, not through a used car professional < 1553293167 394790 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :but yes, agents handling sales of cars do exist here too < 1553293345 432241 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :eh it's ok < 1553293349 218189 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :i got pissed off unnecessarily < 1553293352 934582 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :it happens a lot :/ < 1553293359 373119 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :sorry < 1553293391 331478 :Essadon!~Essadon@81-225-32-185-no249.tbcn.telia.com JOIN :#esoteric < 1553293393 321847 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :I'm not saying that either method is better < 1553293402 617280 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :you can't trust individual people, but you also can't trust agents < 1553293429 468839 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :s/people/owners/ < 1553293467 844275 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :so in python, you can call list or tuple with an existing list as an argument to make a shallow copy, right? < 1553293480 605073 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :let me test to make sure it's really shallow < 1553293517 932930 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :yeah, shallow < 1553293518 599647 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :good < 1553293612 44512 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :you can call it with any iterable < 1553293614 320986 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :and yeah, it's shallow < 1553293831 970486 :b_jonas!~x@catv-176-63-24-177.catv.broadband.hu PRIVMSG #esoteric :`` python3 <<<'a=[[4],[5]];b=list(a);a[0][0]=6;a[1]=[7];print(a,b)' # yes < 1553293832 913806 :HackEso!~HackEso@techne.zem.fi PRIVMSG #esoteric :​[[6], [7]] [[6], [5]] < 1553293844 492761 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :bzzzzonk < 1553293875 631218 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :`quote < 1553293876 404265 :HackEso!~HackEso@techne.zem.fi PRIVMSG #esoteric :843) i think the problem is you're trying to interpret finnish as logic. < 1553293879 319519 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :`quote < 1553293880 100302 :HackEso!~HackEso@techne.zem.fi PRIVMSG #esoteric :1075) i guess the fact i won't eat bovine tongue is just tranferred cod trauma. < 1553293883 430518 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :`quote < 1553293884 262724 :HackEso!~HackEso@techne.zem.fi PRIVMSG #esoteric :465) Maybe if you try diplomacy. Pointy steel diplomacy < 1553294464 724433 :AnotherTest!~turingcom@d51A4B8E1.access.telenet.be QUIT :Ping timeout: 272 seconds < 1553294896 889304 :Phantom_Hoover!~phantomho@unaffiliated/phantom-hoover QUIT :Remote host closed the connection < 1553295710 728983 :Phantom_Hoover!~phantomho@unaffiliated/phantom-hoover JOIN :#esoteric < 1553295797 901797 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net QUIT :Remote host closed the connection < 1553297167 264991 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Someone read the story I wrote of GURPS game I played, and their idea is that Ziv should just bite off the shapeshifter's face. < 1553297288 447330 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :But I would think that would be difficult for a few reasons. < 1553297907 801513 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net JOIN :#esoteric < 1553298172 817498 :tromp!~tromp@ip-217-103-3-94.ip.prioritytelecom.net QUIT :Ping timeout: 250 seconds < 1553299095 974083 :oerjan!oerjan@sprocket.nvg.ntnu.no JOIN :#esoteric