Afficher 'hello world' dans une fenêtre graphique (gtk)

Introduction

Oui, on peut manipuler gtk en assembleur, même si c'est un peu trapu !


Créer le programme hellogtk.asm

section .data
hello_str db 'Hello, world!', 0

section .text
global main
extern gtk_init, gtk_main, gtk_main_quit, gtk_widget_show_all, gtk_window_new, gtk_window_set_title, gtk_label_new, gtk_container_add

main:
; Initialiser GTK
push rbp
mov rbp, rsp
sub rsp, 16
mov qword [rbp-16], 0 ; argc
mov qword [rbp-8], 0 ; argv
lea rdi, [rbp-16] ; argc
lea rsi, [rbp-8] ; argv
call gtk_init

; Créer la fenêtre
mov edi, 0 ; GTK_WINDOW_TOPLEVEL
call gtk_window_new
mov rbx, rax ; Sauvegarder le pointeur de fenêtre

; Définir le titre de la fenêtre
mov rdi, rbx
mov rsi, hello_str
call gtk_window_set_title

; Créer le label
mov rdi, hello_str
call gtk_label_new
mov rsi, rax

; Ajouter le label à la fenêtre
mov rdi, rbx
call gtk_container_add

; Afficher la fenêtre
mov rdi, rbx
call gtk_widget_show_all

; Exécuter la boucle principale de GTK
call gtk_main

; Nettoyer la pile
leave
ret

section .note.GNU-stack noalloc noexec nowrite progbits

Assembler

nasm -f elf64 hellogtk.asm -o hellogtk.o

Linker

gcc -o hellogtk hellogtk.o `pkg-config --cflags --libs gtk+-3.0`

Lancer le programme

./hellogtk


↑ Haut de page