Pull to refresh

Comments 32

1 твит == 140 символов. Так как юникод, то 1 символ не равен 1 байту.
UFO just landed and posted this here
UFO just landed and posted this here
Код с табуляцией соответствует 170-байтной программе, а не 160-байтной.
[al@localhost ~]$ cat bf.c
s[999],*r=s,*d,c;main(a,b){char*v=1[d=b];for(;c=*v++%93;)for(b=c%7?a&&(c&17?c&1?(*r-=c-44):(r+=c-61):c&2?putchar(*r):(*r=getchar()),0):v;b&&c|a**r;v=d)main(!c,&b-1);d=v;}
[al@localhost ~]$ cc bf.c -o bf
bf.c:1: предупреждение: data definition has no type or storage class
bf.c: В функции ‘main’:
bf.c:1: предупреждение: в присваивании целое преобразуется в указатель без приведения типа
bf.c:1: предупреждение: при инициализации целое преобразуется в указатель без приведения типа
bf.c:1: предупреждение: несоответствие типов указатель/целое в условном выражении
bf.c:1: предупреждение: несоответствие типов указатель/целое в условном выражении
bf.c:1: предупреждение: несоответствие типов указатель/целое в условном выражении
bf.c:1: предупреждение: в присваивании указатель преобразуется в целое без приведения типа
bf.c:1: предупреждение: несовместимый тип указателя в присваивании
bf.c:1: предупреждение: несовместимый тип указателя в присваивании
[al@localhost ~]$ ./bf '++++++++++[>+++++++>++++++++++>+++>+.'
Ошибка сегментирования
zubchick~ % cc test.c -o bf 17:59
test.c:1: warning: data definition has no type or storage class
test.c: In function ‘main’:
test.c:1: warning: assignment makes pointer from integer without a cast
test.c:1: warning: initialization makes pointer from integer without a cast
test.c:1: warning: pointer/integer type mismatch in conditional expression
test.c:1: warning: pointer/integer type mismatch in conditional expression
test.c:1: warning: pointer/integer type mismatch in conditional expression
test.c:1: warning: assignment makes integer from pointer without a cast
test.c:1: warning: assignment from incompatible pointer type
test.c:1: warning: assignment from incompatible pointer type
zubchick~ % ./bf '++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'
Hello World!
То есть назначение остальных чисел вам понятно?
почти то же, что и 42.

Это десятичное представление команд BF в ASCII. 93 это ]
Прошу прощения за оффтоп, что значит реализация ip-стека, как его вообще можно реализовать, это ведь просто иерархия протоколов, логическая. Не удивляйтесь глупому вопросу — гуглил, не помогло… Не могли бы вы объснить что тут к чему?
Из контекста статьи получается, что IP = Instruction Pointer, соответственно IP-стек = стек вызова.
то есть если я правильно вас понимаю то IP в данном случае аналог EIP в асме? и его каким то образом можно изменять?
а какже
>> и отвечает на пинги
Ну код-то посмотрите там 3 строчки. Конечно никакого стека там нет. Читает пакет из stdin, если ICMP — меняет адреса местами, ставит тип эхо и пишет в stdout.
Прошу прощения за оффтоп, что значит реализация ip-стека, как его вообще можно реализовать, это ведь просто иерархия протоколов, логическая.
Это вы автора топика спрашиваете?
Нашли кого спросить.
По моим наблюдениям, alizar не является IT-специалистом и, к сожалению, часто постит то, что сам даже не до конца понимает. Увы.

Если вы посмотрите в оригинал статьи, на которую он сослался, то вам станет понятно, что программа twIP (с кодом на C в 139 символов):
— вешается на обработку входящих/исходящих потоков сетевого интерфейса;
— может только отвечать на ping (получать пакеты ICMP echo request и отдавать в ответ пакеты ICMP echo reply);
— не использует сокеты и оперирует голыми пакетами, извлекаемыми из потока;
— написана just for fun;
— в предложенном варианте работает только под FreeBSD, а для работы в Linux нужно делать некоторые добавления в код, которые делают код уже длиннее 140 символов.
Если не путаю, то самый маленький вирус был 47 байт, и 32 байта который портил файл (заражаемый корд затирался).
Самый маленький вирус вот (вешает 9х намертво):

cli
jmp $

(это 2 байта в .com)
Вирус — это самовоспроизводящийся код, а не любая пакость.
while(fork()) fork()
вешает намертво любой юникс
Только в том случае, если не включен лимит на кол-во процессов для пользователя. На машинах «для студентов» обычно включают.
UFO just landed and posted this here
160 или 170 байт — это исходный код, а не сам интерпретатор!
Скомпилированный файл у меня получился 9053 байта — есть, над чем работать. Например, переписать на ассемблере под ДОС :)
Зачем DOS, лучше под спектрум =)
(вечерком попробую)
*Компилятор* bf, написанный на ассемблере. В откомпилированном виде занимает 170 байт.
www.muppetlabs.com/~breadbox/software/tiny/bf.asm.txt

~/tmp$ nasm -f bin -o bf bf.asm
~/tmp$ chmod +x bf
~/tmp$ ./bf < hello.b > hello
~/tmp$ chmod +x hello
~/tmp$ ./hello
Hello World!
Sign up to leave a comment.

Articles