mirror of
http://git.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/nihilist/hacking-blogposts.git
synced 2025-05-16 20:37:01 +00:00
add hacking blogposts as they are
This commit is contained in:
parent
fa65088be1
commit
325b9c3814
1904 changed files with 91353 additions and 0 deletions
88
asm/5.md
Normal file
88
asm/5.md
Normal file
|
@ -0,0 +1,88 @@
|
|||
# Assembly x86_64 - Math operations
|
||||
|
||||
## Assembly Code
|
||||
|
||||
We're going to use vim to write our code
|
||||
|
||||
|
||||
[ 192.168.0.18/24 ] [ /dev/pts/88 ] [~/binexp/asm]
|
||||
→ vim 5.asm
|
||||
|
||||
|
||||
|
||||
|
||||
section .data
|
||||
digit db 0, 10
|
||||
|
||||
section .text
|
||||
global _start
|
||||
|
||||
|
||||
_start:
|
||||
mov rbx, 48 ;48 in the ASCII chart is the "0" character
|
||||
call _printRAX ;print "0" + 1
|
||||
call _printRAX ;print "1" + 1
|
||||
call _printRAX ;print "2" + 1
|
||||
call _printRAX ;print "3" + 1
|
||||
call _printRAX ;print "4" + 1
|
||||
|
||||
mov rax, 60
|
||||
mov rdi, 0
|
||||
syscall
|
||||
|
||||
|
||||
|
||||
_printRAX:
|
||||
add rbx, 1 ; we increment rbx by 1 (48, 49, 50, 51, ...)
|
||||
mov [digit], rbx ; we move the current value of rbx into the 'digit' memory address
|
||||
|
||||
mov rax, 1 ; we use the syscall ID 1
|
||||
mov rdi, 1 ; we set the first arg to 1
|
||||
mov rsi, digit ; the second arg is set to be our 'digit' memory address
|
||||
mov rdx, 2 ; the third arg is the length of 2 bytes (let's not forget the newline char which is the '10' above)
|
||||
syscall
|
||||
ret
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Now let's check what's new in the code:
|
||||
|
||||
|
||||
mov [digit], rbx
|
||||
|
||||
|
||||
|
||||
Here we are moving the rbx register into the memory address that's referenced by the 'digit' label.
|
||||
|
||||
|
||||
mov rbx, 48
|
||||
add rbx, 1
|
||||
mov [digit], rbx
|
||||
|
||||
|
||||
|
||||
Now first we set the value of rbx to be 48, which is the "0" character in ascii. Then we want to add the value 1 to the value stored in rbx. and then we just move the rbx value into the memory address referenced by the 'digit' label
|
||||
|
||||
Basically our code should print the character 1, 2, 3, 4 and 5
|
||||
|
||||
## Compiling
|
||||
|
||||
Here we're going to use nasm to compile our assembly code:
|
||||
|
||||
|
||||
[ 192.168.0.18/24 ] [ /dev/pts/89 ] [~/binexp/asm]
|
||||
→ nasm -f elf64 5.asm -o 5.o
|
||||
|
||||
[ 192.168.0.18/24 ] [ /dev/pts/89 ] [~/binexp/asm]
|
||||
→ ld 5.o -o 5
|
||||
|
||||
[ 192.168.0.18/24 ] [ /dev/pts/89 ] [~/binexp/asm]
|
||||
→ ./5
|
||||
12345%
|
||||
|
||||
|
||||
|
||||
And that's it ! next tutorial we'll look into loops, you can click [here](6.html).
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue