Tools

Reading

x86 Assembly Guide: This guide describes the basics of 32-bit x86 assembly language programming, covering a small but useful subset of the available instructions and assembler directives. There are several different assembly languages for generating x86 machine code. The one we will use ... is the Microsoft Macro Assembler (MASM) assembler. MASM uses the standard Intel syntax for writing x86 assembly code.

A fundamental introduction to x86 assembly prorgamming - Project Nayuki (HTML)

"The faker's guide to reading (x86) assembly language"

"The Art of Assembly Language", in several editions:

"How to read assembly language"

Collection of ASM resources (source to some of the above; this page has non-x86 resources on it, as well, which I'd like to extract and put into other research notes pages)

"Metaprogramming in Flat Assembler": Demonstrating FASM (flat assembler) macros, which are pretty powerful, it seems.

DOS

Assembly tutorial for DOS also available in a full list at CodeProject: The Intel Assembly Manual

Linux

Linux Assembly HOWTO | List of Linux/i386 system calls | Another list of Linux/i386 system calls | Linux Kernel Internals | Using the GNU Assembler

Unfiltered

Assembler relaxation
http://eli.thegreenplace.net/2013/01/03/assembler-relaxation

Displaying all argv in x64 assembly
http://eli.thegreenplace.net/2013/07/24/displaying-all-argv-in-x64-assembly

Gentle Introduction to x86-64 Assembly
http://www.x86-64.org/documentation/assembly.html

Introduction to x64 Assembly
https://software.intel.com/en-us/articles/introduction-to-x64-assembly

Processor Architecture
https://msdn.microsoft.com/en-us/library/windows/hardware/ff553442%28v=vs.85%29.aspx
x86-32 and x86-64: Architecture, Instructions, Annotated Disassembly

Redundancy of x86 Machine Code
http://www.strchr.com/machine_code_redundancy

Stack frame layout on x86-64
http://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64

The x86 architecture is the weirdo
http://blogs.msdn.com/b/oldnewthing/archive/2004/09/14/229387.aspx

Trivia Questions for X86 Nerds
http://www.msreverseengineering.com/blog/2015/6/9/x86-trivia-for-nerds
Discussions:
https://www.reddit.com/r/ReverseEngineering/comments/39gbxc/trivia_questions_for_x86_nerds/
https://twitter.com/rolfrolles/status/608789071645691904

Understanding the x64 code models
http://eli.thegreenplace.net/2012/01/03/understanding-the-x64-code-models

Where the top of the stack is on x86
http://eli.thegreenplace.net/2011/02/04/where-the-top-of-the-stack-is-on-x86

Windows x64 ABI
Part 1: Intro to the Windows x64 calling convention
http://www.gamasutra.com/view/news/171088/x64_ABI_Intro_to_the_Windows_x64_calling_convention.php
Part 2: Stack frames
http://www.gamasutra.com/view/news/178446/Indepth_Windows_x64_ABI_Stack_frames.php

Books

32-bit

Courses

NASM Assembly Language Tutorials - asmtutor.com
http://asmtutor.com/

Introductory Intel x86: Architecture, Assembly, Applications, & Alliteration
http://opensecuritytraining.info/IntroX86.html
YouTube: https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0

Intermediate Intel x86: Architecture, Assembly, Applications, & Alliteration
http://opensecuritytraining.info/IntermediateX86.html
YouTube: https://www.youtube.com/playlist?list=PL8F8D45D6C1FFD177

Introduction To Reverse Engineering Software
http://opensecuritytraining.info/IntroductionToReverseEngineering.html
YouTube: https://www.youtube.com/playlist?list=PL416CEDF4A931DB0D

Learning assembly for linux-x64
https://github.com/0xAX/asm
https://0xax.github.io/categories/assembly/

Links

Assembly Language (x86) Resources
http://grail.cba.csuohio.edu/~somos/asmx86.html

Useful assembly links
http://www.agner.org/optimize/#links

References

Agner Fog: Software optimization resources
http://www.agner.org/optimize/
1. Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms
http://www.agner.org/optimize/optimizing_cpp.pdf
2. Optimizing subroutines in assembly language: An optimization guide for x86 platforms
http://www.agner.org/optimize/optimizing_assembly.pdf
3. The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers
http://www.agner.org/optimize/microarchitecture.pdf
4. Instruction tables: Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD and VIA CPUs
http://www.agner.org/optimize/instruction_tables.pdf
5. Calling conventions for different C++ compilers and operating systems
http://www.agner.org/optimize/calling_conventions.pdf

AMD64 Application Binary Interface (ABI)
http://www.x86-64.org/documentation.html
http://www.x86-64.org/documentation_folder/abi.pdf

Assembly Optimization Tips
http://mark.masmcode.com/

Assembler x86 (FPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4, AVX, AVX2, AVX512)
http://wm.ite.pl/articles/#assembler-x86-fpu-mmx-sse-sse2-sse3-ssse3-sse4-avx-avx2-avx512-new

Brennan's Guide to Inline Assembly
http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html
AT&T/UNIX syntax <-> Intel syntax

Chess Programming Wiki - Hardware: x86-64
https://chessprogramming.wikispaces.com/x86-64

CPU: Intel® 64 and IA-32 Architectures Software Developer Manuals
https://www-ssl.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

CPU: Developer Guides, Manuals & ISA Documents
http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/

GCC-Inline-Assembly-HOWTO
http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

Instruction latencies and throughput for AMD and Intel x86 processors
https://gmplib.org/~tege/x86-timing.pdf

Inline assembly for x86 in Linux
http://www.ibm.com/developerworks/linux/library/l-ia/

Inline assembly (linux-insides)
https://0xax.gitbooks.io/linux-insides/content/Theory/asm.html

Intel Intrinsics Guide
https://software.intel.com/sites/landingpage/IntrinsicsGuide/

Linux Assembly HOWTO
http://asm.sourceforge.net/howto.html

OS Development Wiki
http://wiki.osdev.org/

sandpile.org -- "The world's leading source for technical x86 processor information"
http://www.sandpile.org/

Stack Overflow: 'x86' tag wiki
https://stackoverflow.com/tags/x86/info

Stack Overflow: Documentation - Intel x86 Assembly Language & Microarchitecture
http://stackoverflow.com/documentation/x86/topics

The Minimal 80x86 Instruction Set
http://www.plantation-productions.com/Webster/www.writegreatcode.com/Vol2/wgc2_OA.pdf
Appendix A of Write Great Code, Volume 2: https://www.nostarch.com/greatcode2.htm

The Netwide Assembler: NASM
Chapter 11: Writing 64-bit Code (Unix, Win64)
http://www.nasm.us/xdoc/2.11.09rc1/html/nasmdo11.html
Links to the latest versions: http://www.nasm.us/docs.php

Wikipedia: x86 assembly topics
https://en.wikipedia.org/wiki/Template:X86_assembly_topics

x86 Encoding Cheat Sheet
https://www.akkadia.org/drepper/x86-opcode-structure.pdf

x86 Instruction Set Reference
http://felixcloutier.com/x86/
https://github.com/zneak/x86doc

x86 intrinsics cheat sheet
A cheat sheet containing most x86 intrinsics, like SSE and AVX intrinsics, grouped in an intuitive fashion
http://www3.in.tum.de/~finis/
http://www3.in.tum.de/~finis/x86-intrin-cheatsheet-v2.2.pdf

x86, x64 Instruction Latency, Memory Latency and CPUID dumps
http://users.atw.hu/instlatx64/

x86_64 NASM Assembly Quick Reference ("Cheat Sheet")
https://www.cs.uaf.edu/2010/fall/cs301/support/x86_64/index.html

X86-64 Instruction Encoding
http://wiki.osdev.org/X86-64_Instruction_Encoding

X86 Opcode and Instruction Reference
http://ref.x86asm.net/

x86 Opcode Structure and Instruction Overview
http://net.cs.uni-bonn.de/fileadmin/user_upload/plohmann/x86_opcode_structure_and_instruction_overview.pdf

x86 oddities
http://x86.corkami.com

Slides


Tags: language   native   assembly   hardware  

Last modified 16 December 2024