Branching with only MOV? How does that work? Is there no actual flow control but instead conditional manipulation (MOVs) of values?
M/o/Vfuscator: A single instruction C compiler
21–30 of 30 posts
Re: M/o/Vfuscator: A single instruction C compiler
#22Previous discussion: May 19, 2021 - https://news.ycombinator.com/item?id=27202801 (40 comments)
"It is well-known that the x86 instruction set is baroque, overcomplicated, and redundantly redundant. We show just how much fluff it has by demonstrating that it remains Turing-complete when reduced to just one instruction." – MOV is Turing-complete , Stephen Dolan, 2013 discussion (2013) https://news.ycombinator.com/item?id=6309631 [While I concur that x86 MOV is impressively powerful, it is also well-known that si…
Strong agree. My fav example in the same category as "all circuits can be made with just nand" and "all you need is x86 MOV" is the iota formal language.
If the lambda calculus is too luxurious, and SKI combinators are too bloated, try using iota for all your language theory needs! No unnecessary concepts, or the two redundant operators of SKI! just one "simple" primitive:
i := λf.((fλa.λb.λc.((ac)(bc)))λd.λe.d)
There, now you're turning complete.
;-)
Re: M/o/Vfuscator: A single instruction C compiler
#23Earlier quoted context omitted.
"It is well-known that the x86 instruction set is baroque, overcomplicated, and redundantly redundant. We show just how much fluff it has by demonstrating that it remains Turing-complete when reduced to just one instruction." – MOV is Turing-complete , Stephen Dolan, 2013 discussion (2013) https://news.ycombinator.com/item?id=6309631 [While I concur that x86 MOV is impressively powerful, it is also well-known that si…
> [While I concur that x86 MOV is impressively powerful, it is also well-known that simple NAND gates can be combined to compute arbitrary logic functions. There are also many simple single instruction/operation CPU designs.] Strong agree. My fav example in the same category as "all circuits can be made with just nand" and "all you need is x86 MOV" is the iota formal language. If the lambda calculus is too luxurious,…
Re: M/o/Vfuscator: A single instruction C compiler
#24Branching with only MOV? How does that work? Is there no actual flow control but instead conditional manipulation (MOVs) of values?
Others have described how branching works. But I'm not convinced it's possible to loop around to the beginning using only MOV instructions. movfuscator as currently implemented performs a CALL at the beginning to set up a signal handler, under the justification that it's not part of the real program and could be done with only MOVs, if the program were running in ring 0. (Even if you got rid of libc, it would still t…
Re: M/o/Vfuscator: A single instruction C compiler
#25Earlier quoted context omitted.
There can be control flow. MOV an address into the right spot in the interrupt vector table then do a MOV that causes a fault that calls the right interrupt (such as a page fault).
But now you're just employing another machine, which is not just made out of MOVs. The video describes in detail what actually happens. I encourage watching it, it's pretty genius, but the very short version is that you turn execution "off" for any code that is not in the "current" branch by switching over all MOVs to target a scratch space instead of their real targets, which means they still execute, but don't have…
Re: M/o/Vfuscator: A single instruction C compiler
#26Earlier quoted context omitted.
> [While I concur that x86 MOV is impressively powerful, it is also well-known that simple NAND gates can be combined to compute arbitrary logic functions. There are also many simple single instruction/operation CPU designs.] Strong agree. My fav example in the same category as "all circuits can be made with just nand" and "all you need is x86 MOV" is the iota formal language. If the lambda calculus is too luxurious,…
iota just packages S and K together in a tuple. The simpler A = λx.λy.λz.x z(y (λ_.z)) suffices for Turing completeness. (tough) Challenge: derive S and K from A.
3. see: #1. I love learning about abstract and completely useless and impractical mathematical constructions, as a contrast to my day job making computers be useful. :)
Re: M/o/Vfuscator: A single instruction C compiler
#27Earlier quoted context omitted.
iota just packages S and K together in a tuple. The simpler A = λx.λy.λz.x z(y (λ_.z)) suffices for Turing completeness. (tough) Challenge: derive S and K from A.
1. 2. Does that simpler "A" combinator have a name, or something I can google for or find in mathworld and read more about? My interest, and estimate of ability, level is right at "not gonna do the work myself, but I'd enjoy following the proof/paper". ;-) 3. see: #1. I love learning about abstract and completely useless and impractical mathematical constructions, as a contrast to my day job making computers be usefu…
Re: M/o/Vfuscator: A single instruction C compiler
#28Earlier quoted context omitted.
1. 2. Does that simpler "A" combinator have a name, or something I can google for or find in mathworld and read more about? My interest, and estimate of ability, level is right at "not gonna do the work myself, but I'd enjoy following the proof/paper". ;-) 3. see: #1. I love learning about abstract and completely useless and impractical mathematical constructions, as a contrast to my day job making computers be usefu…
No, it doesn't have a standard name. The "A" is just a placeholder name. It was only discovered last year as a shortest possible one-point basis, and hasn't been publicized much.
I'm humbled, and have been a fan of the field for a long time. :D
I'm no mathematician, just most of my family and friends ;-) ~23 years ago I (and some other math major and grad student friends at college -- "my people") would get into great enjoyable late night chats about AIT. Mostly with me arguing "there's something cool/legit math here!" and them being healthily skeptical. I've always had a penchant for the computational and experimental discovery, of course my brother is the polar opposite.
I'd be honored to collaborate on, well, anything, should you ever need the skills (pro bono, of course) of an professional, experienced, HPC/C++ scientific programmer who knows a bit of math as well. ;-)
Re: M/o/Vfuscator: A single instruction C compiler
#29Earlier quoted context omitted.
No, it doesn't have a standard name. The "A" is just a placeholder name. It was only discovered last year as a shortest possible one-point basis, and hasn't been publicized much.
I just realized you're likely the same person who made a more recent and compact binary encoding, for algorithmic information theory/Chaitin's constant purposes!! I'm humbled, and have been a fan of the field for a long time. :D I'm no mathematician, just most of my family and friends ;-) ~23 years ago I (and some other math major and grad student friends at college -- "my people") would get into great enjoyable late…
As you can see on my home page, I love to do research related programming myself, but also welcome other people contributing with their expertise.
Re: M/o/Vfuscator: A single instruction C compiler
#30Earlier quoted context omitted.
He's my favorite speaker (watch all his talks... they're worth it!), but he seems to have gone MIA (possibly after joining Intel? I don't know the timeline), much to my dismay.
Yes, you got the timeline right, he went MIA after joining Intel. Turns out a great way to stop vulnerability disclosures is to protect them behind an NDA, plus for any that are found you can give first dibs to all of the 3-letter agencies that are shoveling money your way.
Appreciate the reply!