Редактировать: я сделал несколько ошибок здесь, подробности смотрите в комментариях!
Вот 32-битная версия (64-битная ниже):
SECTION .data
; global functions in this file
global main
; extern functions
extern strcmp
hworld: ; our first string
db "hello world", 0
hworld2: ; our second string
db "hello world2", 0
SECTION .text
;=============================================================================
; The program entrypoint
;
main:
; int rv = strcmp("hello world", "hello world2");
push hworld2
push hworld
call strcmp
; _exit(rv);
mov ebx, eax
mov eax, 1
int 0x80
Затем вы можете скомпилировать ее с помощью:
nasm -f elf main.s -o main.o
cc -m32 main.o -o hello_world
И вот 64-битная версия:
SECTION .data
; global functions in this file
global main
; extern functions
extern strcmp
hworld: ; our first string
db "hello world", 0
hworld2: ; our second string
db "hello world2", 0
SECTION .text
;=============================================================================
; The program entrypoint
;
main:
; int rv = strcmp("hello world", "hello world2");
mov rsi, hworld2
mov rdi, hworld
call strcmp
; _exit(rv);
mov rdi, rax
mov rax, 60
syscall
Затем вы можете скомпилировать версию x64 с помощью:
nasm -f elf64 main.s -o main.o
cc main.o -o hello_world
и запустить ее:
$ ./hello_world
$ echo $?
206