Skip to content

Instantly share code, notes, and snippets.

@gynvael
Created April 24, 2020 10:59
Show Gist options
  • Save gynvael/6a6e5b5adc8c7d0b5c32361de70b1aad to your computer and use it in GitHub Desktop.
Save gynvael/6a6e5b5adc8c7d0b5c32361de70b1aad to your computer and use it in GitHub Desktop.
generalnie jeśli chodzi o szukanie rzeczy do assemblera, to musisz zdecydować się na 3 rzeczy:
1) architekturę
2) system operacyjny
3) konkretny assembler
i szukać tutoriali pod te 3 rzeczy
1) w Twoim wypadku to x86-64 aka AMD64 aka x64
aka 86 64-bit
2) hmmm Linux? czy Windows? jak wolisz?
[dla linuxa]
3) do wyboru jest nasm, yasm albo gnu as
sugerowałbym nasm albo yasm na początek
co nam daje
"nasm 64-bit linux tutorial" :slight_smile:
https://cs.lmu.edu/~ray/notes/nasmtutorial/
to co tu mająsię przyda: https://montcs.bloomu.edu/Information/LowLevel/Assembly/linux-assembly-tutorial.shtml#x86-64 (sekcja Assemble, link a file for x86-64 Linux:)
https://www.csee.umbc.edu/portal/help/nasm/sample_64.shtml <-- przykładowe programy
https://p403n1x87.github.io/assembly/x86_64/2016/08/10/getting-started-with-x68-asm.html <-- i to też
do tego:
dokumentacja nasm: https://www.nasm.us/xdoc/2.14.02/html/nasmdoc0.html
https://software.intel.com/en-us/articles/intel-sdm <-- manuale intela
potrzebujesz:
Vol 1. do podstaw architektury
Vol 2A,B,C <--- głównie to, to lista instrukcji assemblera
Vol 3 na później/kiedyś
https://www.agner.org/optimize/calling_conventions.pdf <--- to na niedługo jako podpowiedź
głównie tabelki na stronie 10
oraz coś co Ci się spodoba skoro znasz trochę C++
https://godbolt.org/
w tym piszesz kod w C++ i Ci wyskakuje w assemblerze
skompilowana wersja tego kodu
np https://godbolt.org/z/Vr2JRn
kapitalne do nauki asma jak się zna C/C++
to co piszesz po lewej jest kompilowane do tego co jest po prawej
technicznie to samo dostajesz robić g++ -S -masm=intel asdf.cc
hmmm... do tego będziesz potrzebować debugger (gdb - ten sam co się do C/C++ pod linuxem używa)
i disassembler
https://www.hex-rays.com/products/ida/support/download_freeware/
ten disassembler od razu ma dekompilator afair
więc będziesz mogła coś napisać w nasmie, skompilować, i zobaczyć jakby w C to wyglądało po zdekompilowaniu
(przy czym ten kod będzie trochę dziwnie wyglądać, bo trudno z assemblera się odzyskuje C)
potem jeszcze kilka rzeczy będzie, typu format ELF, etc
ale na początek tyle :wink:
i teraz ważna rzecz: każdy assembler ma delikatnie inną składnie
więc jesli byś np szukała czegoś i znalazła przykłady dla fasm 64-bit linux zamiast nasm 64-bit linux, to będą drobne różnice w instrukcjach, i DUŻE różnice w dyrektywach preprocesora/assemblera
żeby było śmieszniej GNU as domyślnie używa innej składni assemblera (AT&T), podczas gdy większość narzędzi używa składni Intel
różnica jest spora między nimi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment