4 ms·
An easy way to learn to see those patterns is through exploring compiler output: https://godbolt.org/ https://godbolt.org/ Other than that, I like "Assembly L
by msla 4y ago
An easy way to learn to see those patterns is through exploring compiler output:
https://godbolt.org/ https://godbolt.org/
Other than that, I like "Assembly Language Step By Step" by Jeff Duntemann, which is currently in its third edition and is Linux-only, as opposed to previous editions which were MS-DOS and Linux. He has example assembly code (Intel syntax for NASM, another reason I like his book) for download on his website:
http://www.duntemann.com/assembly.html http://www.duntemann.com/assembly.html
My only annoyance is that apparently, even the most recent edition from 2009 is still 32-bit only.
Anyway, beyond that, you'd be looking for information on using assembly language to perform some specific task, like writing vectorized numerical code.
- signaru 4y agoI'll guess practical compiler books that goes down to assembly would also be helpful, especially those for those with inclination to language implementations. So far, I haven't read any though, and hope rui314's book comes out some day.
- Donckele 4y agoRegarding the book, What would be the difference between 32bit and 64bit? Is it still relevant to read today?
- harry8 4y agoYes - it is one way to do it and it will work and be reasonably efficient. Everyone[1] who knows x86-64 asm today learned 32 bit first. You still have 32 bit instructions, and 16 bit, and 8 bit. The instructions will translate. You get more registers. You need to update the function and syscall calling conventions. There's no reason there can't be "learn x64 asm" books but there aren't many last I looked, but maybe someone can link us up to show how wrong I am? https://wiki.osdev.org/Calling_Conventions https://wiki.osdev.org/Calling_Conventions Richard Blum [2] after Dunteman. [1] At a reasonable level of approximation. [2] https://www.wiley.com/en-us/Professional+Assembly+Language-p-9780764579011 https://www.wiley.com/en-us/Professional+Assembly+Language-p...
- saagarjha 4y agoI would doubt that, people haven't been running 32-bit x86 code for years at this point.
- 15155 4y agoHow exactly do you get away with not using the 32-bit subset of AMD64 ASM? "32-bit x86 code" just means "code that does not use any of the AMD64 ISA." (And at this point, probably SSE2+ and a handful of other extensions.) GP is correct: anyone that "knows" AMD64 assembly inherently must know 32-bit ASM because one must use the original x86 registers, instructions, etc. for the vast majority of tasks. People are still constantly running what was formerly known as "32-bit x86 code" in their 64-bit applications.
- saagarjha 4y agoI read “learned 32-bit first” as “learned on i386 machines”, not “learned what the 32-bit instructions do on 64-bit computers”. There’s a big difference between these two, because the way you write code for a machine that doesn’t do 64-bit is quite different, since you have many more registers, the calling convention is pretty different, etc.
- markus_zhang 4y agoFrom my very limited RE experience, one difference is calling convention: 32-bit passes a lot of stuffs on stack while 64-bit passes the first 8 (IIRC) through registers and the rest on stack. I could be wrong but this is one glaring difference. Another one of course is the registers them selves: EAX vs RAX for example.
- leni536 4y agoIn my experience the most important parts of reading godbolt output are: 1. Data movements (mov) 2. Control flow (various jumps with corresponding tests, call and ret) 3. Calling convention. But you can often wing this and figure it out from context.
- zokier 4y agoOne thing I like for following the control flow is radare2 visual graph modes
- hirvi74 4y ago> Intel syntax for NASM Like the Good Lord intended.