Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
947232d0bb | |||
974a5a16f2 | |||
896669d892 | |||
24061e3fdd | |||
fdf26032d2 | |||
e7c373f3bd | |||
02812ec152 | |||
b5d41addf6 | |||
72d270409a | |||
f1008e49ad |
23
Makefile
23
Makefile
@ -1,23 +0,0 @@
|
||||
PREFIX ?= /usr
|
||||
FILE = figa
|
||||
EXEC = figasm
|
||||
|
||||
all:
|
||||
@as -o $(FILE).o $(FILE).s
|
||||
@ld -o $(EXEC) $(FILE).o
|
||||
|
||||
clean:
|
||||
@rm $(FILE).o
|
||||
@rm $(EXEC)
|
||||
|
||||
install:
|
||||
@mkdir -p $(DESTDIR)$(PREFIX)/bin
|
||||
@cp -p $(EXEC) $(DESTDIR)$(PREFIX)/bin/figasm
|
||||
|
||||
uninstall:
|
||||
@rm $(DESTDIR)$(PREFIX)/bin/figasm
|
||||
|
||||
debug:
|
||||
@as -g -o $(FILE).o $(FILE).s
|
||||
@ld -o $(EXEC) $(FILE).o
|
||||
|
19
PKGBUILD
19
PKGBUILD
@ -1,19 +0,0 @@
|
||||
pkgname=figasm
|
||||
pkgver=69.420
|
||||
pkgrel=1
|
||||
pkgdesc="figasm è una semplice port in Assembly del celebre figa"
|
||||
arch=('x86_64')
|
||||
url="https://git.ignuranza.net/chic_luke/figasm.git"
|
||||
license=('SWAG')
|
||||
|
||||
makedepends=('git')
|
||||
|
||||
build() {
|
||||
git clone "${url}"
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "${pkgname}"
|
||||
make
|
||||
make DESTDIR="$pkgdir" install
|
||||
}
|
37
README.md
37
README.md
@ -1,36 +1,19 @@
|
||||
# figASM
|
||||
# figASM64
|
||||
|
||||
`figasm` è una semplice port in Assembly del celebre [figa](github.com/crisbal/kslf.git), celebre pacchetto per Arch Linux, una volta disponibile nella AUR ma bannato dal mantenitore @il\_muflone per comprensibili ragioni politically correct:
|
||||
|
||||
![](https://i.imgur.com/1TQXOgX.png)
|
||||
|
||||
Ad ogni modo, i piĂą grandi fan di `figa` si sono prontamente forkati il repo, pronti a ripubblicare `figa` sulla AUR, eccetto che il maestro @il\_muflone disse:
|
||||
|
||||
![](https://i.imgur.com/P8er7Uw.png)
|
||||
|
||||
![](https://i.imgur.com/GFcVpPD.png)
|
||||
|
||||
Ma noi non lo pensavamo. A ben vedere, neanche lui stesso lo pensava:
|
||||
|
||||
![](https://i.imgur.com/PgENsLm.png)
|
||||
|
||||
Questa volta, invece, il profeta @il\_muflone ci vide giusto. Perché la `figa` avrebbe fatto il suo ritorno di botto. Ma questa volta in pieno stile arch: nessun lentissimo script interpretato. Tutto Assembly. Nativo. Super ottimizzato per l'unica architettura supportata da Arch Linux, ossia x86\_64.
|
||||
|
||||
## Perché dovrei usare `figasm` anziché `figa`?
|
||||
|
||||
Perché la matematica non è un'opinione e i numeri parlano chiaro:
|
||||
|
||||
![](https://i.imgur.com/PX7C4pI.png)
|
||||
La figa a 64bit è meglio
|
||||
|
||||
# Come faccio a compilare `figasm` da sorgente?
|
||||
|
||||
```bash
|
||||
as -o figa.o figa.s
|
||||
ld -o figa figa.o
|
||||
nasm -f elf64 -o figa.o figa.asm
|
||||
ld figa.o -o figa
|
||||
```
|
||||
|
||||
O, piĂą semplicemente:
|
||||
# Ma a me piace windows!!1
|
||||
|
||||
```bash
|
||||
make
|
||||
```cmd
|
||||
nasm -f win64 -o figa.o figawin.asm
|
||||
ld -o figa.exe figa.o -entry=Start --subsystem=console -lkernel32
|
||||
```
|
||||
|
||||
Potrebbe essere necessario disattivare l'antivirus, a quanto pare a Windows Defender non piace la figa...
|
||||
|
16
figa.asm
Normal file
16
figa.asm
Normal file
@ -0,0 +1,16 @@
|
||||
section .data
|
||||
text1 db "Che schifo la figa.",10,"Meglio Linux",10
|
||||
|
||||
section .text
|
||||
global _start
|
||||
|
||||
_start:
|
||||
mov rax, 1
|
||||
mov rdi, 1
|
||||
mov rsi, text1
|
||||
mov rdx, 33
|
||||
syscall
|
||||
|
||||
mov rax, 60
|
||||
mov rdi, 0
|
||||
syscall
|
31
figa.s
31
figa.s
@ -1,31 +0,0 @@
|
||||
.section .data
|
||||
|
||||
schifo:
|
||||
.ascii "Che schifo la figa.\n"
|
||||
|
||||
schifo_len:
|
||||
.long . - schifo
|
||||
|
||||
meglio:
|
||||
.ascii "Meglio Linux!\n"
|
||||
|
||||
meglio_len:
|
||||
.long . - meglio
|
||||
|
||||
.section .text
|
||||
.global _start
|
||||
|
||||
_start:
|
||||
movl $4, %eax
|
||||
movl $1, %ebx
|
||||
leal schifo, %ecx
|
||||
movl schifo_len, %edx
|
||||
int $0x80
|
||||
movl $4, %eax
|
||||
movl $1, %ebx
|
||||
leal meglio, %ecx
|
||||
movl meglio_len, %edx
|
||||
int $0x80
|
||||
movl $1, %eax
|
||||
xorl %ebx, %ebx
|
||||
int $0x80
|
41
figawin.asm
Normal file
41
figawin.asm
Normal file
@ -0,0 +1,41 @@
|
||||
; Console Message, 64 bit. V1.03
|
||||
NULL EQU 0 ; Constants
|
||||
STD_OUTPUT_HANDLE EQU -11
|
||||
|
||||
extern GetStdHandle ; Import external symbols
|
||||
extern WriteFile ; Windows API functions, not decorated
|
||||
extern ExitProcess
|
||||
|
||||
global Start ; Export symbols. The entry point
|
||||
|
||||
section .data ; Initialized data segment
|
||||
Message db "Che schifo la figa.", 0Dh, 0Ah,"Meglio Windows", 0Dh, 0Ah
|
||||
MessageLength EQU $-Message ; Address of this line ($) - address of Message
|
||||
|
||||
section .bss ; Uninitialized data segment
|
||||
alignb 8
|
||||
StandardHandle resq 1
|
||||
Written resq 1
|
||||
|
||||
section .text ; Code segment
|
||||
Start:
|
||||
sub RSP, 8 ; Align the stack to a multiple of 16 bytes
|
||||
|
||||
sub RSP, 32 ; 32 bytes of shadow space
|
||||
mov ECX, STD_OUTPUT_HANDLE
|
||||
call GetStdHandle
|
||||
mov qword [REL StandardHandle], RAX
|
||||
add RSP, 32 ; Remove the 32 bytes
|
||||
|
||||
sub RSP, 32 + 8 + 8 ; Shadow space + 5th parameter + align stack
|
||||
; to a multiple of 16 bytes
|
||||
mov RCX, qword [REL StandardHandle] ; 1st parameter
|
||||
lea RDX, [REL Message] ; 2nd parameter
|
||||
mov R8, MessageLength ; 3rd parameter
|
||||
lea R9, [REL Written] ; 4th parameter
|
||||
mov qword [RSP + 4 * 8], NULL ; 5th parameter
|
||||
call WriteFile ; Output can be redirect to a file using >
|
||||
add RSP, 48 ; Remove the 48 bytes
|
||||
|
||||
xor ECX, ECX
|
||||
call ExitProcess
|
Loading…
Reference in New Issue
Block a user