L'unica importante differenza tra la codifica in ASM su Win / Linux / OSX è la convenzione di chiamata . Non ce n'è uno più difficile da usare rispetto all'altro, sono solo diversi. È inoltre necessario fare attenzione al registro che deve essere conservato tra le chiamate.
WINDOWS: RCX, RDX, R8, R9
The Microsoft x64 calling convention is followed on Windows and
pre-boot UEFI (for long mode on x86-64). It uses registers RCX, RDX,
R8, R9 for the first four integer or pointer arguments (in that
order), and XMM0, XMM1, XMM2, XMM3 are used for floating point
arguments. Additional arguments are pushed onto the stack (right to
left). Integer return values (similar to x86) are returned in RAX if
64 bits or less. Floating point return values are returned in XMM0.
Parameters less than 64 bits long are not zero extended; the high bits
are not zeroed.
LINUX / OSX: RDI, RSI, RDX, RCX, R8, R9
The calling convention of the System V AMD64 ABI is followed on
Solaris, Linux, FreeBSD, OS X, and other UNIX-like or POSIX-compliant
operating systems. The first six integer or pointer arguments are
passed in registers RDI, RSI, RDX, RCX, R8, and R9, while XMM0, XMM1,
XMM2, XMM3, XMM4, XMM5, XMM6 and XMM7 are used for floating point
arguments. For system calls, R10 is used instead of RCX. As in the
Microsoft x64 calling convention, additional arguments are passed on
the stack and the return value is stored in RAX.
STRUMENTI:
Troverete praticamente gli stessi strumenti su Windows e amp; Linux.
La mia opinione personale:
- FASM & NASM sono fantastici:)
- Uso spesso Purebasic, è una versione commerciale di tipo closed-source (economica, con una versione limitata gratuita) che produce codice FASM piacevole leggibile / commentato e accetta Assemblatore in linea. Non produce mai il codice digitato, ma è uno strumento che mi piace. Ovviamente puoi farne a meno e scrivere semplicemente ASM puro da zero.
- NON BOTHER con 386, passa a ASM x86_64. Molte più istruzioni (attenzione: le istruzioni MMX / SSE sono strane, (molto?) Difficili da usare) e molto più registri (fantastico!)!
- Opzione Hardcore: installa BOCHS o QEMU (io uso QEMU) e inizio a scrivere ASM senza sistema operativo. Inizia con l'MBR, quindi con il bootloader Stage 1, Stage2, un kernel e così via ... Sentiti libero di dare un'occhiata al mio MBR / Bootloader molto documentato (funzionale ma incompleto) link se sei in vena:)