const string message = "Hello World!\n";
const int length = 14;
int main() {
write(1, &message;, length);
return 0;
}
write
ssize_t write(int fd, const void buf[count], size_t count);
man 2 write
; This is a program
mv eax, 60 ; move 60 to the extended e register.
section .data
global _start
mov rsi, message
message: db "Hello World!",&0x0A (message)
global _start (_start, not global, that is a directive)
message: db "Hello World!",&0x0A (message)
section .data
message: db "Hello World!", 0x0A
gdb hello // a bunch of text break 10 // also b 10 run // also r x &message // not what we wanted, but what is happening here? x &message/s message
od -x hello
message_length: equ $ - message
message_length
global _start
_start
mov rsi, message
mov is the mnemonic
rsi and message are the arguments or operands.
syscall