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:
|
La figa a 64bit è meglio
|
||||||
|
|
||||||
![](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)
|
|
||||||
|
|
||||||
# Come faccio a compilare `figasm` da sorgente?
|
# Come faccio a compilare `figasm` da sorgente?
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
as -o figa.o figa.s
|
nasm -f elf64 -o figa.o figa.asm
|
||||||
ld -o figa figa.o
|
ld figa.o -o figa
|
||||||
```
|
```
|
||||||
|
|
||||||
O, piĂą semplicemente:
|
# Ma a me piace windows!!1
|
||||||
|
|
||||||
```bash
|
```cmd
|
||||||
make
|
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