{"id":48,"date":"2024-06-12T08:45:00","date_gmt":"2024-06-11T22:45:00","guid":{"rendered":"https:\/\/davidshoon.com\/?p=48"},"modified":"2026-10-20T09:50:50","modified_gmt":"2026-10-19T22:50:50","slug":"smallest-hello-world-in-linux-assembly","status":"publish","type":"post","link":"https:\/\/davidshoon.com\/?p=48","title":{"rendered":"Smallest hello world in linux assembly"},"content":{"rendered":"<h1 style=\"text-align: left\">Smallest hello world in linux assembly<\/h1>\n<p>From <a href=\"https:\/\/jameshfisher.com\/2018\/03\/10\/linux-assembly-hello-world\/\">https:\/\/jameshfisher.com\/2018\/03\/10\/linux-assembly-hello-world\/<\/a><\/p>\n<p><span style=\"font-family: courier\">global _start<\/p>\n<p>section .text<\/p>\n<p>_start:<br \/>&nbsp; mov rax, 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; write(<br \/>&nbsp; mov rdi, 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; STDOUT_FILENO,<br \/>&nbsp; mov rsi, msg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; &#8220;Hello, world!n&#8221;,<br \/>&nbsp; mov rdx, msglen&nbsp;&nbsp; ;&nbsp;&nbsp; sizeof(&#8220;Hello, world!n&#8221;)<br \/>&nbsp; syscall&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; );<\/p>\n<p>&nbsp; mov rax, 60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; exit(<br \/>&nbsp; mov rdi, 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; EXIT_SUCCESS<br \/>&nbsp; syscall&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; );<\/p>\n<p>section .rodata<br \/>&nbsp; msg: db &#8220;Hello, world!&#8221;, 10<br \/>&nbsp; msglen: equ $ &#8211; msg<\/p>\n<p><\/span>However, when we assemble and link it, it will actually be quite large.<\/p>\n<p><span style=\"font-family: courier\">$ nasm -f elf64 -o hello.o hello.s<br \/>$ ld -o hello hello.o<br \/>$ .\/hello<br \/>Hello, world!<\/p>\n<p>$ ls -al hello<br \/>-rwxrwxr-x 1 d d 8872 Jun 12 08:22 hello<br \/><\/span><\/p>\n<p>That&#8217;s because it uses a section .rodata, which requires a read-only memory page, on top of a code page (read-executable). So that requires 8KB (if 4KB pages are used) in your binary.<\/p>\n<p>Still, it&#8217;s smaller than a &#8220;puts(&#8220;Hello world&#8221;)&#8221; C example program.<\/p>\n<p><span style=\"font-family: courier\"><br \/>#include &lt;stdio.h&gt;<\/p>\n<p>int main() <br \/>{<br \/>&nbsp;&nbsp; &nbsp;puts(&#8220;Hello, world!&#8221;);<br \/>&nbsp;&nbsp; &nbsp;return 0;<br \/>}<br \/><\/span><\/p>\n<p>Size of C program:<\/p>\n<p><span style=\"font-family: courier\"><br \/>$ gcc test.c<br \/>$ ls -al a.out<br \/>-rwxrwxr-x 1 d d 15960 Jun 12 08:24 a.out<\/p>\n<p>$ strip a.out<br \/>$ ls -al a.out<br \/>-rwxrwxr-x 1 d d 14472 Jun 12 08:25 a.out<\/p>\n<p><\/span><\/p>\n<p>Going back to the assembly program, to shrink it down even more so, the modified source code is then:<\/p>\n<p><span style=\"font-family: courier\"><br \/>global _start<\/p>\n<p>section .text<\/p>\n<p>_start:<br \/>&nbsp; mov rax, 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; write(<br \/>&nbsp; mov rdi, 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; STDOUT_FILENO,<br \/>&nbsp; mov rsi, msg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; &#8220;Hello, world!n&#8221;,<br \/>&nbsp; mov rdx, msglen&nbsp;&nbsp; ;&nbsp;&nbsp; sizeof(&#8220;Hello, world!n&#8221;)<br \/>&nbsp; syscall&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; );<\/p>\n<p>&nbsp; mov rax, 60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; exit(<br \/>&nbsp; mov rdi, 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; EXIT_SUCCESS<br \/>&nbsp; syscall&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; );<\/p>\n<p>&nbsp; msg: db &#8220;Hello, world!&#8221;, 10<br \/>&nbsp; msglen: equ $ &#8211; msg<br \/><\/span><\/p>\n<p>The same code, without the section .rodata. It just means the text string &#8220;Hello World&#8221; is actually in the code (.text section) page.<\/p>\n<p>Next step is to strip the binary &#8212; to make it even slightly more smaller.<\/p>\n<p>This is the best we can do, without hacking the binary any further.<\/p>\n<p><span style=\"font-family: courier\"><br \/>$ ls -al hello<br \/>-rwxrwxr-x 1 d d 4360 Jun 12 08:19 hello<br \/><\/span><\/p>\n<p>So that&#8217;s 4KB, plus abit more, if you include the ELF headers.<\/p>\n<p><\/p>\n<h2 style=\"text-align: left\">Creating our own ELF headers<\/h2>\n<p>Taking from the following articles:<\/p>\n<p><a href=\"https:\/\/www.muppetlabs.com\/%7Ebreadbox\/software\/tiny\/teensy.html\">https:\/\/www.muppetlabs.com\/%7Ebreadbox\/software\/tiny\/teensy.html<\/a><\/p>\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/53382589\/smallest-executable-program-x86-64-linux\">https:\/\/stackoverflow.com\/questions\/53382589\/smallest-executable-program-x86-64-linux<\/a><\/p>\n<p>We create our own ELF header and just build using `nasm -o test test.s`<\/p>\n<p><span style=\"font-family: courier\"><br \/>bits 64<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org 0x08048000<\/p>\n<p>ehdr:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Elf64_Ehdr<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db&nbsp; 0x7F, &#8220;ELF&#8221;, 2, 1, 1, 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_ident<br \/>&nbsp;&nbsp;&nbsp; times 8 db&nbsp; 0<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dw&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_type<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dw&nbsp; 62&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_machine<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_version<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dq&nbsp; _start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_entry<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dq&nbsp; phdr &#8211; $$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_phoff<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dq&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_shoff<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_flags<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dw&nbsp; ehdrsize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_ehsize<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dw&nbsp; phdrsize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_phentsize<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dw&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_phnum<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dw&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_shentsize<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dw&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_shnum<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dw&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; e_shstrndx<\/p>\n<p>ehdrsize&nbsp;&nbsp;&nbsp; equ $ &#8211; ehdr<\/p>\n<p>phdr:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Elf64_Phdr<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; p_type<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; p_flags<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dq&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; p_offset<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dq&nbsp; $$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; p_vaddr<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dq&nbsp; $$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; p_paddr<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dq&nbsp; filesize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; p_filesz<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dq&nbsp; filesize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; p_memsz<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dq&nbsp; 0x1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; p_align<\/p>\n<p>phdrsize&nbsp;&nbsp;&nbsp; equ&nbsp;&nbsp;&nbsp;&nbsp; $ &#8211; phdr<\/p>\n<p>_start:<br \/>&nbsp; mov rax, 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; write(<br \/>&nbsp; mov rdi, 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; STDOUT_FILENO,<br \/>&nbsp; mov rsi, msg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; &#8220;Hello, world!n&#8221;,<br \/>&nbsp; mov rdx, msglen&nbsp;&nbsp; ;&nbsp;&nbsp; sizeof(&#8220;Hello, world!n&#8221;)<br \/>&nbsp; syscall&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; );<\/p>\n<p>&nbsp; mov rax, 60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; exit(<br \/>&nbsp; mov rdi, 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; EXIT_SUCCESS<br \/>&nbsp; syscall&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; );<\/p>\n<p>&nbsp; msg: db &#8220;Hello, world!&#8221;, 10<br \/>&nbsp; msglen: equ $ &#8211; msg<\/p>\n<p>filesize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; equ&nbsp;&nbsp;&nbsp;&nbsp; $ &#8211; $$<\/span><\/p>\n<p>We build it with nasm:<br \/><span style=\"font-family: courier\"><\/span><\/p>\n<p><span style=\"font-family: courier\"><br \/>$ nasm -o test test.s<\/p>\n<p>$ ls -al test<br \/>-rwxr-xr-x 1 d d 173 Jun 12 08:35 test<br \/><\/span><\/p>\n<p>The output is 173 bytes! That&#8217;s small. But it can be improved, based off those articles above.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Smallest hello world in linux assembly From https:\/\/jameshfisher.com\/2018\/03\/10\/linux-assembly-hello-world\/ global _start section .text _start:&nbsp; mov rax, 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; write(&nbsp; mov rdi, 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; STDOUT_FILENO,&nbsp; mov rsi, msg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; &#8220;Hello, world!n&#8221;,&nbsp; mov rdx, msglen&nbsp;&nbsp; ;&nbsp;&nbsp; sizeof(&#8220;Hello, world!n&#8221;)&nbsp; syscall&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; ); &nbsp; mov rax, 60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; exit(&nbsp; mov rdi, 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; EXIT_SUCCESS&nbsp; syscall&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; ); section .rodata&nbsp; msg: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-48","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/davidshoon.com\/index.php?rest_route=\/wp\/v2\/posts\/48","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/davidshoon.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/davidshoon.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/davidshoon.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/davidshoon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=48"}],"version-history":[{"count":1,"href":"https:\/\/davidshoon.com\/index.php?rest_route=\/wp\/v2\/posts\/48\/revisions"}],"predecessor-version":[{"id":49,"href":"https:\/\/davidshoon.com\/index.php?rest_route=\/wp\/v2\/posts\/48\/revisions\/49"}],"wp:attachment":[{"href":"https:\/\/davidshoon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=48"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/davidshoon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=48"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/davidshoon.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=48"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}