From af16eb5f0b3f4c0eac866fa5efd8be43afda1b28 Mon Sep 17 00:00:00 2001 From: blackle Date: Tue, 2 Apr 2019 00:11:27 -0400 Subject: [PATCH] Add makefile/example cde for webkit and gtk --- Makefile | 27 ++++++++++++++++++++++++++ gtk-webkit.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 Makefile create mode 100644 gtk-webkit.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..74096d0 --- /dev/null +++ b/Makefile @@ -0,0 +1,27 @@ + +all : gtk-webkit_opt.elf.xz + +gtk-webkit.elf : gtk-webkit.c Makefile + gcc -o $@ $< `pkg-config --cflags webkit2gtk-4.0` -lgobject-2.0 -lgtk-3 -lwebkit2gtk-4.0 -no-pie -fno-plt -Os -std=gnu11 -nostartfiles -nostdlib + +%_opt.elf : %.elf Makefile + cp $< $@ + strip $@ + strip -R .note -R .comment -R .eh_frame -R .eh_frame_hdr -R .note.gnu.build-id -R .got -R .got.plt -R .gnu.version -R .rela.dyn -R .shstrtab $@ + #remove section header + /home/blackle/Code/Projects/section-stripper/section-stripper.py $@ + + #clear out useless bits + sed -i 's/_edata/\x00\x00\x00\x00\x00\x00/g' $@; + sed -i 's/__bss_start/\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/g' $@; + sed -i 's/_end/\x00\x00\x00\x00/g' $@; + + wc -c $@ + chmod +x $@ + +%.xz : % Makefile + -rm $@ + lzma --format=lzma -9 --extreme --lzma1=preset=9,lc=1,lp=0,pb=1,nice=270,depth=64,dict=16384 --keep --stdout $< > $@ + wc -c $@ + +clean : diff --git a/gtk-webkit.c b/gtk-webkit.c new file mode 100644 index 0000000..8c14cbc --- /dev/null +++ b/gtk-webkit.c @@ -0,0 +1,53 @@ +#define GL_GLEXT_PROTOTYPES why + +#include +#include +#include +#include + +#include +#include +#include +#include + +#define CANVAS_WIDTH 1920 +#define CANVAS_HEIGHT 1080 + +gboolean on_load_changed(WebKitWebView *web_view, WebKitLoadEvent load_event, GtkWindow* window) +{ + if (load_event == WEBKIT_LOAD_FINISHED) { + gtk_widget_show_all(GTK_WIDGET(window)); + gtk_window_fullscreen(window); + } + return TRUE; +} + +static char* html = "this is an html page! 😊
with webgl!"; + +void _start() { + asm volatile("sub $8, %rsp\n"); + + typedef void (*voidWithOneParam)(int*); + voidWithOneParam gtk_init_one_param = (voidWithOneParam)gtk_init; + (*gtk_init_one_param)(NULL); + + GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL); + WebKitSettings *webSettings = webkit_settings_new_with_settings("enable-webgl", TRUE, NULL); + WebKitWebView *webView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_settings(webSettings)); + webkit_web_view_load_html(webView, html, NULL); + + gtk_container_add(GTK_CONTAINER(win), GTK_WIDGET(webView)); + + g_signal_connect(win, "destroy", gtk_main_quit, NULL); + g_signal_connect(webView, "load-changed", G_CALLBACK(on_load_changed), (GtkWindow*)(win)); + + gtk_main(); + + asm volatile(".intel_syntax noprefix"); + asm volatile("push 231"); //exit_group + asm volatile("pop rax"); + // asm volatile("xor edi, edi"); + asm volatile("syscall"); + asm volatile(".att_syntax prefix"); + __builtin_unreachable(); +} \ No newline at end of file