Здравствуйте, Pascal, Вы писали:
P>Кандидатов просят написать программу, отображающую на экране свой собственный исходный текст не обращаясь к чтению файлов.
P>Как это возможно?
Такие программы называются 'quine'. На этой страничке
Здравствуйте, mogadanez, Вы писали:
M>Здравствуйте, mrhru, Вы писали:
M>>Здравствуйте, Кодт, Вы писали:
К>>>- загружаемый модуль (в формате загрузчика ОС — то есть EXE / COFF для Виндов) — если ты прямо в байткоде процессора рожал
M>>
M>>copy con program.exe
M>>
M>>??? M> из файлов нельзя читать
Да я это привёл пример рожания программы в байткоде.
Говорят, так настоящие программисты свои программы пишут.
Здравствуйте, Pascal, Вы писали:
P>Купил книжку Эда Салливана и там обнаружил задачку, которую они дают кандидатам на вакансии:
P>Кандидатов просят написать программу, отображающую на экране свой собственный исходный текст не обращаясь к чтению файлов.
P>Как это возможно?
Здравствуйте, Pascal, Вы писали:
P>Купил книжку Эда Салливана и там обнаружил задачку, которую они дают кандидатам на вакансии:
P>Кандидатов просят написать программу, отображающую на экране свой собственный исходный текст не обращаясь к чтению файлов.
P>Как это возможно?
Например, вот так:
#include"stdio.h"
main () {char *s="main(){char *s=%c%s%c;printf(s,34,s,34);}";printf(s,34,s,34);}
С небольшой натяжкой — #include "stdio.h" не выводится
Re[3]: Задачка из книги Under pressure and on time
Здравствуйте, ch00k, Вы писали:
C>Эх... В своё время на gwbasic это было гораздо проще...
C>10 LIST
Чарльз Уэзерелл в книге "Этюды для программистов" делал уточнение: нельзя пользоваться особенностями рантайма, позволяющими декомпилировать программу (например, знанием того, что исходный текст хранится в определенном месте сегмента данных).
Фокус с командой LIST — в данном случае — хак, поскольку интерпретатор бейсика умеет декомпилировать код.
Вы попробуйте то же самое сделать на TurboBasic/QuickBasic/VisualBasic — и жестоко обломитесь.
(=^.^=) Neko ... << RSDN@Home 1.0 beta 7a >>
Перекуём баги на фичи!
Re[2]: Задачка из книги Under pressure and on time
В>С небольшой натяжкой — #include "stdio.h" не выводится
Для чистого Си необязательно декларировать импортируемые функции, поэтому #include не нужен.
Кстати, здесь тоже есть легкий хак: соответствие символа '"' и кода 34.
О где же вы, Frostbitten'а деянья? ( -_-; ) ... << RSDN@Home 1.0 beta 7a >>
Здравствуйте, Pascal, Вы писали:
P>Как это возможно?
Дааа. Видать некоторые темы на RSDN будут обсуждаться вечно, хоть их уже все неоднократно и обсуждали.
А почему никто не пробует прочитать память? Ассемблером?
<< RSDN@Home 1.0 beta 6a >>
Вселенная бесконечна как вширь, так и вглубь.
Re[2]: Задачка из книги Under pressure and on time
Здравствуйте, Real 3L0, Вы писали:
R3>А почему никто не пробует прочитать память? Ассемблером?
Если в памяти находится оригинал программы — это будет хак.
А так — флаг в руки, NOP на шею, INT навстречу
(=^.^=) Neko ... << RSDN@Home 1.0 beta 7a >>
Перекуём баги на фичи!
Re: Задачка из книги Under pressure and on time
От:
Аноним
Дата:
19.05.03 10:42
Оценка:
Здравствуйте, Pascal, Вы писали:
P>Купил книжку Эда Салливана и там обнаружил задачку, которую они дают кандидатам на вакансии:
P>Кандидатов просят написать программу, отображающую на экране свой собственный исходный текст не обращаясь к чтению файлов.
P>Как это возможно?
Добавил раскраску кода — чтобы смайлики не появлялись. — К
программа действительно распечатывает сама себя и больше ничего вся фишка в перловских кастом-кавычках.
предыдущаяя прога могла полезный код исполнять любой и дополнительно себя распечатывать (причем полезный код не надо дублировать), в общем перл радует...
Re[3]: Задачка из книги Under pressure and on time
А>программа действительно распечатывает сама себя и больше ничего вся фишка в перловских кастом-кавычках. А>предыдущаяя прога могла полезный код исполнять любой и дополнительно себя распечатывать (причем полезный код не надо дублировать), в общем перл радует...
Блин! В листинге точка с запятой и закрывающая скобка на смайлик заменились!
Обрамляйте код тегами языка: [ perl ] ... [ /perl ] — К
Re[3]: Задачка из книги Under pressure and on time
Здравствуйте, Кодт, Вы писали:
К>Если в памяти находится оригинал программы — это будет хак.
В смысле "оригинал"? Просто находим место в памяти, где начинается прога, читаем и выводим N байт на экран.
<< RSDN@Home 1.0 beta 6a >>
Вселенная бесконечна как вширь, так и вглубь.
Re[2]: Задачка из книги Under pressure and on time
От:
Аноним
Дата:
20.05.03 05:48
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Pascal, Вы писали:
P>>Купил книжку Эда Салливана и там обнаружил задачку, которую они дают кандидатам на вакансии:
P>>Кандидатов просят написать программу, отображающую на экране свой собственный исходный текст не обращаясь к чтению файлов.
P>>Как это возможно?
А>На perl это может выглядеть примерно так: А>
Здравствуйте, Real 3L0, Вы писали:
К>>Если в памяти находится оригинал программы — это будет хак.
R3>В смысле "оригинал"? Просто находим место в памяти, где начинается прога, читаем и выводим N байт на экран.
Ну уж фиг!
Ты должен будешь вывести текст на входном языке, то есть
— листинг ассемблера (дизассемблировать собственный код) — если прога писана на ассемблере
— загружаемый модуль (в формате загрузчика ОС — то есть EXE / COFF для Виндов) — если ты прямо в байткоде процессора рожал
Последняя задача более-менее просто решается для .com-файлов, где загрузчик просто копирует данные по адресу CS:100h.
О где же вы, Frostbitten'а деянья? ( -_-; ) ... << RSDN@Home 1.0 beta 7a >>
Перекуём баги на фичи!
Re[2]: Задачка из книги Under pressure and on time
Привет, Андрей Тарасевич!
АТ>Такие программы называются 'quine'. На этой страничке АТ>http://www.nyx.net/~gthompso/quine.htm АТ>можно найти массу вариантов на разнообразных языках программирования. Здесь все это уже было.
Интересная страничка! Здесь похоже собрали все, что есть.
Особенно мне понравились примеры на TeX (даже такое есть!) и примеры кода сразу для нескольких языков. МощЪ!!!
Здесь могла бы быть Ваша реклама!
Re[5]: Задачка из книги Under pressure and on time
Здравствуйте, Кодт, Вы писали:
К>- загружаемый модуль (в формате загрузчика ОС — то есть EXE / COFF для Виндов) — если ты прямо в байткоде процессора рожал
copy con program.exe
???
Re[6]: Задачка из книги Under pressure and on time
Здравствуйте, mrhru, Вы писали:
M>Здравствуйте, Кодт, Вы писали:
К>>- загружаемый модуль (в формате загрузчика ОС — то есть EXE / COFF для Виндов) — если ты прямо в байткоде процессора рожал
M>
M>copy con program.exe
M>
M>???
из файлов нельзя читать
... << RSDN@Home 1.0 beta 7a >>
Re[5]: Задачка из книги Under pressure and on time
Здравствуйте, Кодт, Вы писали:
R3>>В смысле "оригинал"? Просто находим место в памяти, где начинается прога, читаем и выводим N байт на экран. К>Ну уж фиг! К>Ты должен будешь вывести текст на входном языке, то есть К>- листинг ассемблера (дизассемблировать собственный код) — если прога писана на ассемблере
Но на ассемблере можно писать чистыми байтами (например, написать программулину в текстовом редакторе от Dos Navigator'а)
<< RSDN@Home 1.0 beta 6a >>
Вселенная бесконечна как вширь, так и вглубь.
Re[6]: Задачка из книги Under pressure and on time
Здравствуйте, Real 3L0, Вы писали:
R3>Но на ассемблере можно писать чистыми байтами (например, написать программулину в текстовом редакторе от Dos Navigator'а)
Да, конечно:
org 100h
start: db XXh, YYh, ZZh, TTh..... ; понеслась душа в рай
Пожалуйста. Это будет почти то же самое, что вывести байтовый дамп программы в формате .com