Codegolf — Автономная Программа Hello-World

  • Автор темы Nectorec
  • Обновлено
  • 21, Oct 2024
  • #1

Мне нужна программа, которая выводит «привет, мир» на консоль моего компьютера Linux на базе x86_64. Да, полноценная программа, а не какая-то глупость, для работы которой нужен интерпретатор или компилятор.

Вы можете:

  • использовать все функции glibc
  • отправить статический исполняемый файл
  • отправьте динамический исполняемый файл с зависимостями, если вы их обрисуете
  • скомпилировать файл ELF
  • покопайтесь в формате ELF и удалите все ненужное
  • проявите творческий подход и работайте в формате ELF

Опишите здесь, как вы создаете и выполняете программу.

Выигрывает самая короткая программа.

#код-гольф #сборка #машинный код

Nectorec


Рег
11 Dec, 2012

Тем
81

Постов
185

Баллов
620
  • 26, Oct 2024
  • #2

MS-DOS.COM — 21 байт

Из комментариев:

Маринус может использовать любую платформу, которая ему нравится, размером меньше 45 байт, с сайта muppetlabs.com/~breadbox/software/tiny/teensy.html – Торстен Стаерк

Так что теперь мне пришлось. (Поэтому не принимайте этот ответ, потому что это обман.)

Он допустил ошибку, потому что это позволяет мне сделать:

 
 
 
 
 
 
 
 
 ~$ nasm -f bin -o hello hello.asm;chmod +x hello
~$ ./hello
hello world
~$ wc -c hello
76 hello
~$ 
 

Скомпилировать с помощью:

BITS 32 org 0x00200000 db 0x7F, "ELF" hello: db "hello world", 10 dw 2 dw 3 ; nasm insisted on aligning them properly so let's do it this way exit: dd 0x80cd4066 ; inc eax - int 0x80 dd start dd phdr - $$ phdr: dd 1 dd 0 dd $$ dw 1 dw 0 dd filesize dd filesize start: mov ecx, hello ; B9 0400 0200 -> flag 1 set -> executable mov edx, 12 inc eax shl eax,2 int 0x80 xor eax, eax jmp exit filesize equ $ - $$

А потом DOSBOX или что-то в этом роде запустит полученный результат $ uname -io x86_64 GNU/Linux $ nasm -v NASM version 2.09.10 compiled on Oct 17 2011 , which is 21 размер в байтах.

Никакие хаки даже не нужны, потому что $ ls -al helloworld.nasm helloworld -rw-rw-r-- 1 user user 155 Jan 5 11:08 helloworld.nasm -rwxrwxr-x 1 user user 384 Jan 5 11:09 helloworld files have no structure.

 

Preddy


Рег
01 May, 2013

Тем
77

Постов
198

Баллов
593
  • 26, Oct 2024
  • #3

Это то, что вы имели в виду? Или ты хочешь еще хакки?

$ ./helloworld hello world

Ассемблер (NASM) { источник: 155 байт, скомпилировано: 384 байта }

Исходный код: helloworld.nasm

$ nasm helloworld.nasm -f elf64 -o helloworld.o $ ld helloworld.o -s -o helloworld

Скомпилировать

global _start _start: write: mov eax, 4 mov ebx, 1 mov ecx, h mov edx, 12 int 0x80 exit: mov eax, 1 mov ebx, 0 int 0x80 h: db 'hello world', 10, 0

Исполнение

EDITED(2)

Размер

.com

Платформа:

.com ||answer||

Сборка - скомпилирована: 76 байт

Это 32-битный исполняемый файл, но благодаря обратной совместимости он будет работать и на системах x86_64. По крайней мере у меня так было. Он основан на «tiny.asm» из хлебницы и еще более хакерский, поэтому я не удивлюсь, если некоторые Linux не захотят его трогать.

Я попробовал это на Debian 7 на виртуальной машине, и это сработало.

nasm -f bin -o hello.com hello.asm

Это действительно работает:

BITS 16 org 0x100 mov ah,9 mov dx,hello int 0x21 int 0x20 hello: db "hello world$"

Он даже аккуратно выводит новую строку, поскольку в заголовке ELF у меня был свободный байт.

 

Hag1


Рег
16 Feb, 2010

Тем
71

Постов
220

Баллов
585
Тем
403,760
Комментарии
400,028
Опыт
2,418,908