I like it. Really. It's pretty simple to use the registers and stack, you can use memory (variables) however you like, and all the complex stuff is provided as "commands." It looks like it's pretty easy to create a spaghetti-code mess, but like with BASIC, you can write perfectly maintainable programs if you're inclined to do so.
Can confirm. I currently work as a malware analyst, and I frequently have to analyze (somewhat) obfuscated malware NSIS installers.
Older version of the 7-zip software (v. 9.38) can extract and decompile NSIS installers, but in the newer versions this feature is no longer available, because some people on the 7-zip forums complained that users could unpack their installers and see hidden S/Ns. It's a pity.
wow
I'll have to look for that in the future. I guess removing the disassembler from a common piece of software raises the bar a bit, but still.. yikes.
Me, too. I was amazed when I found out, that one can use Pop, Push and Exch [1] to clear registers for the scope of a function and restore the previous registers after leaving the function scope.
[1] http://nsis.sourceforge.net/Docs/Chapter4.html#stackinst
I get the benefits of MSI and MSM when managing a fleet of machines, but it exhibits the same issues as Microsoft's other installers and update engines. It takes ages to do anything and during that seemingly seeks around the disk or eats up cpu for no reason. Sometimes it takes minutes or an hour just to return a failure condition at the end. If you compare the update process of a Debian install, which can update before first boot, to a Windows installation, you cannot explain what Microsoft is doing. The only explanation I've heard is that Windows doesn't have the required info in their databases and thus has to seek around the disk for a very long time.
Now, if you compare that to an NSIS installer, which admittedly doesn't support the Windows Domain deployment scenarios that MSI does, it's instant and you can understand where time is spent.
I do not understand why Microsoft doesn't fix those shortcomings.
But the NSIS scripting language was modelled after Assembly. I mean, what? I really wonder, with delighted amazement, what went on in the heads of the people who decided to model a high level domain specific scripting language after the lowest-level language that's still human editable.
I mean, hand-editing LLVM IR is easier.
The good part is that assembly is actually good fun to write if you don't need to do large projects in it, and so is NSIS scripting. It sure is documented well enough. Nobody scripts installers fulltime for a living I guess, so it's a nice way to spice up work :-)