Articles of nasm

L’assembly compilato da Bash su Ubuntu su Windows non produce output

Ho seguito un tutorial per il assembly e sto cercando di ottenere un programma Hello World per l’esecuzione. Sto usando Bash su Ubuntu su Windows. Ecco l’assemblea: section .text global _start ;must be declared for linker (ld) _start: ;tells linker entry point mov edx,len ;message length mov ecx,msg ;message to write mov ebx,1 ;file descriptor […]

Modalità di indirizzamento in linguaggio assembly (IA-32 NASM)

Dato che le risorse web su questo argomento sono scarse, inizierò, a beneficio delle ricerche future, elencando le modalità degli indirizzi per IA-32 Assembly Language (NASM) e poi seguirò una breve domanda. Registro di indirizzamento mov eax, ebx: copia ciò che è in ebx in eax mov esi, var: Copia l’indirizzo di var (ad esempio […]

Shellcode di Linux “Hello, World!”

Ho il seguente codice NASM funzionante: global _start section .text _start: mov eax, 0x4 mov ebx, 0x1 mov ecx, message mov edx, 0xF int 0x80 mov eax, 0x1 mov ebx, 0x0 int 0x80 section .data message: db “Hello, World!”, 0dh, 0ah che stampa “Hello, World! \ n” sullo schermo. Ho anche il seguente wrapper C […]

Successive sys_write syscalls non funziona come previsto, bug NASM su OS X?

Sto cercando di imparare l’assemblaggio MacOS usando NASM e non riesco a far funzionare un programma banale. Sto provando una variazione di “Hello, World” in cui le due parole sono chiamate indipendentemente da una macro. Il mio codice sorgente assomiglia a questo: %macro printString 2 mov rax, 0x2000004 ; write mov rdi, 1 ; stdout […]

Problema NASM su OSX a 64 bit

Sto imparando ASM e ho un piccolo problema. Non posso “dichiarare” più di una stringa in “section.data”. Sto provando qualcosa del genere: section .data string1 db “test1 “, 0; string2 db “test2 “, 0; section .text global _test extern _puts _test: lea rdi, [rel string1] call _puts lea rdi, [rel string2] call _puts ret Questa […]

Errore di segmentazione dell’assemblaggio dopo aver effettuato una chiamata di sistema, alla fine del mio codice

Stavo sperimentando e ho il seguente codice assembly, che funziona molto bene, tranne che ottengo un messaggio “Segmentation fault (core dumped)” subito prima che il mio programma termini: GLOBAL _start %define ___STDIN 0 %define ___STDOUT 1 %define ___SYSCALL_WRITE 0x04 segment .data segment .rodata L1 db “hello World”, 10, 0 segment .bss segment .text _start: mov […]

Stampa di cifre esadecimali con assemblaggio

Sto cercando di imparare l’assemblaggio NASM, ma mi sembra che stia lottando con quello che sembra semplicemente nei linguaggi di alto livello. Tutti i libri di testo che sto usando discutono usando le stringhe – infatti, sembra essere una delle loro cose preferite. Stampa di Hello World, passando da maiuscolo a minuscolo, ecc. Tuttavia, sto […]

Come funziona $ in NASM, esattamente?

message db “Enter a digit “, 0xA,0xD Length equ $- message È usato per ottenere la lunghezza di una stringa? Come funziona internamente?

Assemblaggio NASM converte l’input in intero?

Ok, quindi sono abbastanza nuovo per il assembly, infatti, sono molto nuovo all’assemblaggio. Ho scritto un pezzo di codice che vuole semplicemente prendere input numerici dall’utente, moltiplicarlo per 10 e avere il risultato express all’utente tramite lo stato di uscita dei programmi (digitando echo $? Nel terminale) Il problema è che è non dando il […]

Modalità di indirizzamento a 16 bit di NASM x86

Ho problemi con il puntamento a un indirizzo e nel mio caso scrivo una variabile di dimensioni in byte. Questo mi dà l’errore “errore: indirizzo valido non valido”: mov byte[AX], byte 0x0 Dopo alcuni trail ed errori ho provato lo stesso ma con EAX. Questo compila bene: mov byte[EAX], byte 0x0 Cosa mi manca qui?