Приручение PE
sp_r00t
Давно хотел собрать вручную PE-файл, да всё руки не доходили.
Когда же наконец я сподобился взяться за ассемблер, получился такой вот листинг (транслируется NASM'ом с опцией -fbin)
  1. bits 32
  2. %define IMAGE_BASE 400000h
  3. %define IDATA_RVA 3000h
  4. %define DATA_RVA 2000h
  5. %define FALIGN 200h
  6. %define OPTIONAL_HEADER_SIZE 0E0h
  7. %define CHARACTERISTICS 0001h | 0002h | 0008h | 0100h | 1000h
  8. %define PE32_MAGIC 010Bh
  9. %define CPU_TYPE 14Ch
  10. %define P_DWORD 4
  11. %define ENTRY_POINT 1000h
  12. %define NUMBER_DIRECTORY 10h
  13. %define GTVRS (kernel32import - IDATA + IDATA_RVA + IMAGE_BASE + P_DWORD)
  14. org IMAGE_BASE
  15. DOS_HEADER:
  16. db 4Dh, 5Ah, 6Ch, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0FFh, 0FFh, 0, 0, 0, 0, 0, 0, 11h, 0, 0, 0, 0h, 0, 0, 0, 0, 0, 0, 0
  17. stub:
  18. db 'Coded by sp_r00t. Hack ahead'
  19. new_PE:
  20. dd PE_HEADER-DOS_HEADER
  21. PE_HEADER:
  22. db 'PE', 0, 0 ; signature
  23. dw CPU_TYPE ; cpu type
  24. dw 3 ; Num of Objects
  25. dd 0 ; Time/Date Stamp
  26. dd 0 ; Pointer to COFF table
  27. dd 0 ; COFF table size
  28. dw OPTIONAL_HEADER_SIZE ; NT Header Size
  29. dw CHARACTERISTICS ; Flags (characteristics)
  30. dw PE32_MAGIC ; Magic
  31. dw 0 ; Major/minor linker
  32. dd END_TEXT - TEXT ; Size of Code
  33. dd END_DATA - DATA ; Size of Init Data
  34. dd 0 ; Size of UnInit Data
  35. dd ENTRY_POINT ; Entry point RVA
  36. dd ENTRY_POINT ; Base of Code
  37. dd 2000h ; Base of Data
  38. dd IMAGE_BASE ; Image Base
  39. dd 1000h ; Object align
  40. dd FALIGN ; File align
  41. dw 4 ; OS Major
  42. dw 0 ; OS Minor
  43. dd 0 ; user major/minor
  44. dw 4 ; SubSys Major
  45. dw 0 ; SubSys Minor
  46. dd 0 ; Reserved (win32 version)
  47. dd 4000h ; Image Size
  48. dd END_HEADERS - DOS_HEADER ; Header Size
  49. dd 0 ; File CheckSum
  50. dw 2 ; SubSystem
  51. dw 0 ; DLL Flags
  52. dd 100000h ; Stack Reserve Size
  53. dd 10000h ; Stack Commit Size
  54. dd 0 ; Heap Reserve Size
  55. dd 0 ; Heap Comit Size
  56. dd 0 ; Loader Flags
  57. dd NUMBER_DIRECTORY ; number directory entries
  58. directory:
  59. dd 0 ; Export Table RVA
  60. dd 0 ; Export Data Size
  61. dd IDATA_RVA ; Import Table RVA
  62. dd END_IDATA - IDATA ; Import Data Size
  63. times 20 dd 0 ; empty
  64. dd (IDATA_RVA + iat - IDATA) ; IAT RVA
  65. dd (iat_end - iat) ; IAT Data Size
  66. times 6 dd 0 ; empty
  67.  
  68. SECTION_TABLE:
  69. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  70. db '.text', 0,0,0
  71. dd WA_END_TEXT - TEXT ; Virtual Size
  72. dd ENTRY_POINT ; Section RVA
  73. dd END_TEXT - TEXT ; Physical Size
  74. dd TEXT - DOS_HEADER ; Physical Offset
  75. times 0Ch db 0
  76. dd 60000020h ; Object Flags
  77. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  78. db '.data', 0,0,0
  79. dd WA_END_DATA - DATA ; Virtual Size
  80. dd DATA_RVA ; Section RVA
  81. dd END_DATA - DATA ; Physical Size
  82. dd DATA - DOS_HEADER ; Physical Offset
  83. times 0Ch db 0
  84. dd 0C0000040h ; Object Flags
  85. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  86. db '.import', 0
  87. dd WA_END_IDATA - IDATA ; Virtual Size
  88. dd IDATA_RVA ; Section RVA
  89. dd END_IDATA - IDATA ; Physical Size
  90. dd IDATA - DOS_HEADER ; Physical Offset
  91. times 0Ch db 0
  92. dd 40000000h ; Object Flags
  93. align FALIGN, db 0
  94. END_HEADERS:
  95. TEXT:
  96. push 0
  97. mov eax, (IMAGE_BASE + DATA_RVA + (msg_1 - DATA))
  98. push eax
  99. call GetVersion
  100. test eax, eax
  101. jnz m
  102. mov eax, (IMAGE_BASE + DATA_RVA + (msg_3 - DATA))
  103. jmp m1
  104. m:
  105. mov eax, (IMAGE_BASE + DATA_RVA + (msg_2 - DATA))
  106. m1:
  107. push eax
  108. push 0
  109. call MessageBox
  110. push 0
  111. call ExitProcess
  112. ret
  113. GetVersion:
  114. jmp near [kernel32import - IDATA + IDATA_RVA + IMAGE_BASE + P_DWORD]
  115. MessageBox:
  116. jmp near [user32import - IDATA + IDATA_RVA + IMAGE_BASE]
  117. ExitProcess:
  118. jmp near [kernel32import - IDATA + IDATA_RVA + IMAGE_BASE]
  119. WA_END_TEXT:
  120. align FALIGN, db 0
  121. END_TEXT:
  122. DATA:
  123. msg_1 db 'Preved',0
  124. msg_2 db 'GetVersion run!',0
  125. msg_3 db 'Error',0
  126. WA_END_DATA:
  127. align 200h, db 0
  128. END_DATA:
  129. IDATA:
  130. import_table:
  131. ; kernel32.dll
  132. dd kernel32_import - IDATA + IDATA_RVA ; OriginalFirstThunk
  133. dd 0 ; TimeDateStamp
  134. dd 0 ; ForwarderChain
  135. dd kernel32 - IDATA + IDATA_RVA ; Name
  136. dd kernel32import - IDATA + IDATA_RVA ; FirstThunk
  137. ; user32.dll
  138. dd user32_import - IDATA + IDATA_RVA ; OriginalFirstThunk
  139. dd 0 ; TimeDateStamp
  140. dd 0 ; ForwarderChain
  141. dd user32 - IDATA + IDATA_RVA ; Name
  142. dd user32import - IDATA + IDATA_RVA ; FirstThunk
  143. times 5 dd 0
  144.  
  145. kernel32_import dd exitprocess - IDATA + IDATA_RVA, getversion - IDATA + IDATA_RVA, 0
  146. user32_import dd messagebox - IDATA + IDATA_RVA, 0
  147. iat:
  148. kernel32import dd exitprocess - IDATA + IDATA_RVA, getversion - IDATA + IDATA_RVA, 0
  149. user32import dd messagebox - IDATA + IDATA_RVA, 0
  150. iat_end:
  151. kernel32 db 'KERNEL32.DLL', 0
  152. user32 db 'USER32.DLL', 0
  153. exitprocess db 0B6h, 0, 'ExitProcess',0
  154. messagebox db 0DCh, 1, 'MessageBoxA',0
  155. getversion db 0A4h, 2, 'GetVersion',0
  156. WA_END_IDATA:
  157. align FALIGN, db 0
  158. END_IDATA:
  159.  

(На выкрутасы с GetVersion внимания не обращать - это было частью эксперимента, которую я просто не стал вырезать).
Получающийся экзешник забит нулями почти наполовину и виной тому выравнивание по границе 512 байт. Когда то давно я читал, что линкеры обходят это ограничение если им приказать собирать драйвер, но как это сделать вручную?

Возврат структур в Си
sp_r00t
Недавно в курилке как-то заявил одному товарищу, будто бы функции в Си возвращают только базовые типы данных. Мотивировал я это тем, что обычно функция возвращает значение через регистр eax, а много ли впихнёшь в один регистр?
Разумеется я дезинформировал своего товарища. Си позволяет возвращать даже структуры - но как быть с eax? Приходится прибегнуть к дизассемблеру.
Пишем маленькую программу на Си:
typedef struct passport {
	char* 	name;
	int	age;
} PASSPORT;
PASSPORT initstr(char *name, int a);
void main()
{	
	PASSPORT mypass = initstr("Igor", 37);
	printf("Name - %s, age - %d years\n", mypass.name, mypass.age);
}
PASSPORT initstr(char *name, int a)
{
	return (PASSPORT){name, a};
}

Эксперимент проводился на машине с линуксом, соответственно компилируем и собираем с помощью gcc и получаем вполне работоспособную программу, которую немедленно дизассемблируем.
.text:0804841C main            proc near               ; DATA XREF: _start+17o
.text:0804841C
.text:0804841C var_30          = dword ptr -30h
.text:0804841C var_2C          = dword ptr -2Ch
.text:0804841C var_28          = dword ptr -28h
.text:0804841C var_10          = dword ptr -10h
.text:0804841C var_C           = dword ptr -0Ch
.text:0804841C var_4           = dword ptr -4
.text:0804841C arg_0           = dword ptr  4
.text:0804841C
.text:0804841C                 lea     ecx, [esp+arg_0]
.text:08048420                 and     esp, 0FFFFFFF0h
.text:08048423                 push    dword ptr [ecx-4]
.text:08048426                 push    ebp
.text:08048427                 mov     ebp, esp
.text:08048429                 push    ecx
.text:0804842A                 sub     esp, 24h
.text:0804842D                 lea     eax, [ebp+var_10]
.text:08048430                 mov     [esp+30h+var_28], 25h
.text:08048438                 mov     [esp+30h+var_2C], offset aIgor ; "Igor"
.text:08048440                 mov     [esp+30h+var_30], eax
.text:08048443                 call    initstr
.text:08048448                 sub     esp, 4          ; char *
.text:0804844B                 mov     edx, [ebp+var_C]
.text:0804844E                 mov     eax, [ebp+var_10]
.text:08048451                 mov     [esp+30h+var_28], edx
.text:08048455                 mov     [esp+30h+var_2C], eax
.text:08048459                 mov     [esp+30h+var_30], offset aNameSAgeDYears ; "Name - %s, age - %d years\n"
.text:08048460                 call    _printf
.text:08048465                 mov     ecx, [ebp+var_4]
.text:08048468                 leave
.text:08048469                 lea     esp, [ecx-4]
.text:0804846C                 retn
 

Даже не вникая в реализацию initstr видно, что структура создаётся вне процедуры, которая её просто заполняет, при этом функции неявно передаётся указатель на внешнюю структуру, который эта функция и возвращает через регистр eax.
А что в винде?
В винде я использовал компилятор lcc и результат сборки вышеприведённой программы получился неожиданным.
На выходе напечаталось:
>>Name - (_, age - 4227160 years
Даже мне, мужчине, возраст показался неприлично завышенным:-)))
Но как это понять?
В качестве возраста явно попадает указатель (0x408058 - hex того самого числа 4227160 очень похож на указатель). Но почему?
K&R пишет, что структура может быть инициализирована указанным способом только константами. У меня же стоят переменные, то есть так делать нельзя. GCC меня, впрочем, понял, а вот LCC понял неправильно.
Перепишем функцию.
PASSPORT initpassport(char *name, int age)
{
	PASSPORT s;
	s.name 	= name;
	s.age	= age;
	return s;
}

Так, всё работает, смотрим в дизассемблер:
.text:00401315 _initpassport   proc near               ; CODE XREF: _main+Fp
.text:00401315
.text:00401315 var_8           = dword ptr -8
.text:00401315 var_4           = dword ptr -4
.text:00401315 arg_0           = dword ptr  8
.text:00401315 arg_4           = dword ptr  0Ch
.text:00401315
.text:00401315                 push    ebp
.text:00401316                 mov     ebp, esp
.text:00401318                 push    ecx
.text:00401319                 push    eax
.text:0040131A                 push    edi
.text:0040131B                 mov     edi, [ebp+arg_0]
.text:0040131E                 mov     [ebp+var_8], edi
.text:00401321                 mov     edi, [ebp+arg_4]
.text:00401324                 mov     [ebp+var_4], edi
.text:00401327                 lea     edi, [ebp+var_8]
.text:0040132A                 mov     eax, [ebp+var_8]
.text:0040132D                 mov     edx, [ebp+var_4]
.text:00401330                 pop     edi
.text:00401331                 leave
.text:00401332                 retn
.text:00401332 _initpassport   endp
 

Функция манипулирует либо с памятью, где лежат аргументы (она потом очищается), либо с собственным стэком, который сама же и освобождает. Единственный осязаемый результат остаётся в регистрах eax и edx. Да-да, именно их функция и передаёт "матери".
Возникает вопрос - а что если полей структуры будет больше чем регистров?
Не захламляя текст листингами скажу - что в этом случае lcc поступает аналогично gcc, заставляя функцию заполнять структуру, лежащую вне её самой. Отличие только в том, что указатель на неё не передаётся и не возвращается, что по идее должно вызвать нарекания, до которых компилятору, впрочем... до лампочки:-)

Что это?
sp_r00t
Дизассемблерный листинг API-функции ExitProcess:

.text:7C81CAFA ExitProcess     proc near               ; CODE XREF: .text:7C80C146p
.text:7C81CAFA                                         ; .text:7C8438ABp ...
.text:7C81CAFA
.text:7C81CAFA uExitCode       = dword ptr  8
.text:7C81CAFA
.text:7C81CAFA                 mov     edi, edi
.text:7C81CAFC                 push    ebp
.text:7C81CAFD                 mov     ebp, esp
.text:7C81CAFF                 push    0FFFFFFFFh
.text:7C81CB01                 push    77E8F3B0h
.text:7C81CB06                 push    [ebp+uExitCode]
.text:7C81CB09                 call    SUBEXIT
.text:7C81CB0E                 jmp     near ptr byte_7C839AAD
.text:7C81CB0E ExitProcess     endp
 


Начало и конец функции несколько озадачивают. Особенно если учесть, что в моей (точнее - сыновьей) домашней "семерке" (данный листинг сделан из ХРюнделевской библиотеки kernel32.dll) функция реализована совершенно по другому, однако нелепые начало и конец - аналогичны. Обычный пролог функции предваряется незначащей командой:
mov edi, edi
 

в ХРюше и:
mov eax, eax
 

в "семёрке", а заканчиваются оба варианта функции прыжком в глубину кода. По целевому адресу находится заветное 0CCh, то бишь int 3. Завершать функцию отладочным прерыванием - как-то странно. Понятно, что функция, которую я обозвал SUBEXIT может не возвращать управления - да она скорее всего и не возвращает - завершение процесса жеж! Но возникает два вопроса, первый - "Зачем?", а второй "Как?". Не на ассемблере же пишут эти библиотеки, а обычный компилятор надо ещё заставить сгенерировать такой код, но это возвращает нас к вопросу №1...

Физика. 9 класс
sp_r00t
Занимаюсь сейчас со старшим подготовкой к ОГЭ.
Натолкнулся на странную задачу.
Дан график с линейной зависимостью силы, действующей на тело от времени. Коэффициент равен 10-ти. И пять утверждений, из которых нужно выбрать два истинных, среди которых есть следующее: Изменение импульса за четыре секунды составило 80 кг*м/с.
Подумал я так и сяк - ничего не понял. Если представить силу от времени в виде функции F(t)=10t, и помня, что F=dp/dt можно получить дифференциальное уравнение 10*t=dp/dt, решением которого будет соответственно p(t)=5*t2+C. В этом случае приращение импульса действительно равно 80 кг*м/с.
Ответ действительно верный, но! Как это решить методами, так сказать, девятого класса?

Юрий Федорович Самарин об Украине
sp_r00t
Отзыв на "Повесть об украинском народе" С. Кулеша

Этот мастерской, прекрасно написанный очерк истории Украины замечателен в особенности тем, что факты, в нем выведенные, ясно обличают односторонность воззрения автора и доказывают неопровержимо мысль прямо противоположную той, на которую он намекает довольно ясно во многих местах.

Украина могла бы сделаться самостоятельною, если бы не измена дворянства и не владычество Москвы, убившей ее народность, - вот что старается внушить автор.

А вот что показывают факты: польско-католическое дворянство угнетало народ; Хмельницкий освободил его и выгнал поляков. Не прошло пяти лет, природные украинцы, православные, сподвижники Хмельницкого, заняли место польского дворянства и стали угнетать народ; запорожцы, под начальством Брюховецкого, прогнали их и продолжали их роль; наконец, московских чиновников окружила новая шайка украинских дворян, своекорыстных угнетателей народа.

Что из этого вытекает? Что деспотизм дворянства не был внешним насилием, которое можно стряхнуть навсегда, как, например, иго татар в Северной России, а проявлением органического недуга, коренившегося в самой Украине. Она из себя пускала этот росток, поглощавший жизненные ее соки; сколько раз его ни подрубали, столько же раз он вырастал вновь.

Отчего дворянство угнетало народ? Отчего народ не мог ужиться с ним? Отчего история его представляет ряд геройских восстаний, всегда бесплодных? Оттого, что положение народа было ничем не обеспечено и потому невыносимо. Земля была отобрана у него издавна, и он утратил на нее всякое право. Народ находился на степени пролетариатства. Автор не скрыл этого факта, но как будто не понял всей его важности. Между тем очевидно, что этот недостаток оседлости был главною причиною бессилия Украины. Из ее подвижного, блуждающего населения могло выходить казачество, но не могло образоваться земледельческого класса; энергия ее могла проявляться в судорожных потрясениях, но не могла принять нормального развития.

Упрочить быт народа - вот что было необходимо для того, чтобы спасти Украину, и вот с чего должны были начать те, которые мечтали о ее самостоятельности. Нужно было каким бы то ни было образом восстановить связь земледельческого класса с землею.

Этого не пытался сделать ни Богдан Хмельницкий, раздавший земли своим казакам и дворянам, ни Брюховецкий, которого так несправедливо оклеветал автор, ни Дорошенко, и никто из героев Малороссии. Значит, они не могли этого сделать, не имея на то сил. А если они не могли, то, значит, никакой кошевой, ни гетман не был на то способен, а нужна была посторонняя, внешняя власть, самодержавная, неподсудная - власть государя.

Вообще, чтобы защитить народ, чтобы положить конец борьбе сословий и обуздать дворянство, на это недостаточно было власти избранной, всегда робкой перед избравшими ее; тем более недостаточно, что претендовать на эту власть могло только лицо, принадлежащее к тому классу, который отделился от народа: ибо казак не есть представитель народа, а есть явление случайное, ненормальное, вызываемое антинормальным положением, т.е. насилием.

А как скоро необходима была власть высшая, государственная, то, очевидно, должна была выступить Москва, а не Польша и не Турция. Что народ решительно был против союза с Польшей и с неверными - это невольно высказывает автор в десяти местах. Мало того, народ держался Москвы, а высшее казачество только, носившее в себе зародыш аристократии, привыкнув к вольности и тревогам безначалия, беспрестанно затевало измены и переходило от турок к полякам - это также показал автор, если и не признал.

Как же было поднять народ, как восстановить его связь с землею?

На это два средства: прикрепить землю к земледельческому классу, прикрепить земледельца к земле.

Спрашивается: мог ли украинский народ воспользоваться поземельною собственностью, удержать ее, совладать с нею? Нет, не мог. Это доказывается ясно тем, что казаки, наделенные ею, отдавали ее за бесценок, за бочку горилки, без необходимости. Так перешли почти все их земли в руки дворян, и Теплов предлагал императрице Екатерине принять против этого меры. Что же оставалось? Прикрепить народ к земле - мера насильственная, возмутительная, кажется с первого взгляда, а при всем том спасительная. Это было зло великое, великая жертва; но этим злом и им одним могло быть отвращено еще большее бедствие. К тому же видно, что если бы не ввела Екатерина крепостного состояния, оно постепенно вошло бы само собою. Казаки и простые поселяне, как видно из той же записки Теплова, сами себя отдавали в кабалу. Одним словом, прикрепление земледельческого класса к земле было так же необходимо в Малороссии, может быть, еще необходимее, чем в Великороссии.

Между тем нельзя отрицать, что Украина много настрадалась от Москвы. Во-первых, переход от казачьего разгула к самодержавию был крут и тяжел. Великороссия, воспитавшая свою форму правления в себе самой, постепенно к ней привыкла, тогда как на Малороссию она налегла вдруг. Ненависть украинцев к польскому владычеству обнимала не только угнетение собственно Польского правительства, но и вообще условие государственной власти, какой бы то ни было. В борьбе за свою свободу она не могла различать и признать того, что составляет необходимое условие существования всякого государства. Им хотелось войти в состав державы Московской, пользоваться ее защитою и не платить податей, вести дипломатические сношения с соседними державами. Все почти привилегии, выговоренные Хмельницким, по существу своему были несовместны с государственным началом, будучи принадлежностью его самого, и, кроме того, как все привилегии, благоприятствовали высшим сословиям и ничего не значили или даже были предосудительны для народа. От этого так часто, при соприкосновении с государственною властью, отскакивала от нее в ужасе та часть украинского народа, которая наиболее свыклась с разгульною жизнью, т.е. казаки. Они признавали необходимость верховного владычества Москвы и боялись его, не могли свыкнуться с его требованиями. От этого также склонялись они по временам к татарам и туркам, зная наперед, что то было бы подчинением только на словах.

Во-вторых, нет сомнения, что великороссийские чиновники, т.е. представители государственного начала, к которому следовало исподволь, мерами кротости, приучать украинцев, возбуждали к себе неприязнь. Они обходились с Малороссиею круто, произвольно, как со страною побежденною. Это еще более отталкивало украинцев. Пусть, однако же, они спросят у нас, каковы бывают выслужившиеся хохлы, приезжающие на промысел в наши великороссийские губернии, и тогда они научатся понимать и прощать зло, почти неизбежное на той степени образованности, на которой стоим мы и стоят они. Что говорить, наша администрация незавидна; но какова она была у них, такова и у нас. Угнетателями мы никогда не были.

Итак, Украине, предоставленной себе самой, предстояла бедственная будущность. Она была обречена истощиться в бесплодной борьбе, в порываниях свергнуть с себя насилие, беспрестанно порождаемое ею самою. Народность украинская сплачивала жителей Украины только в минуты угрожавших ей извне опасностей. Она поднималась цельною массою только для отражения поляков и католиков и потом опять распадалась на два сословия, из которых одно давило другое. Одна верховная государственная власть, извне призванная, могла положить этому конец. Спасение Украины требовало отречения от политической самостоятельности. Казачество должно было исчезнуть как явление, вызванное насилием; избавив Малороссию, оно совершило свое дело, а дальнейшее его существование, несмотря на поэтическую, увлекательную его прелесть, было бы бедствием для Малороссии, - автор это показал. Собственно, для земледельческого класса оно ничего не сделало, не могло сделать и даже не хотело сделать.

Любопытно сравнить казачество, как вооруженное восстание против угнетения поляков и католиков, с борьбою Православия, как учения, против католической пропаганды. Украинское духовенство также организовалось в братства, завело школы и академию и выставило также много достойных поборников святой веры, много мучеников, как и казачество на своем поприще. Но замечательно только, что в борьбе с католическим духовенством малороссийские ученые подчинились его влиянию, приняли его язык, его науку, схоластику, его систему доказательств и вместе с тем много таких мыслей, которые могли омрачить чистоту веры. Некоторые даже сознательно перешли в Католическую церковь, почти все бессознательно заразились, и Бог знает, к чему бы это повело, если бы живое общение с великорусским духовенством не удержало их на опасном пути.

Что бы ни говорили, а Московское государство спасло материальное существование простого народа в Украине и теперь значительно улучшило его введением инвентарей; оно положило конец притязаниям Польши, спасло Православие и вывело ненавистную Унию. Всего этого Украина для себя не могла сделать.

Пусть же народ Украинский сохраняет свой язык, свои обычаи, свои песни, свои предания; пусть в братском общении и рука об руку с великорусским племенем развивает он на поприще науки и искусства, для которых так щедро наделила его природа, свою духовную самобытность во всей природной оригинальности ее стремлений; пусть учреждения, для него созданные, приспособляются более и более к местным его потребностям. Но в то же время пусть он помнит, что историческая роль его - в пределах России, а не вне ее, в общем составе государства Московского, для создания и возвеличения которого так долго и упорно трудилось великорусское племя, для которого принесено им было так много кровавых жертв и понесено страданий, неведомых украинцам; пусть помнит, что это государство спасло и его самостоятельность; пусть, одним словом, хранит, не искажая его, завет своей истории и изучает нашу.

(no subject)
sp_r00t
Насколько я помню курс физики, в максимально обобщённом и максимально упрощённом виде её основную (даже, наверное, единственную) задачу можно сформулировать так "в данный момент времени и в данной области пространства данная система имеет некоторое "состояние" А - найти "состояние" В в котором будет находиться данная система в другой момент времени (или в другой области пространства - например при расчёте полей)". Припоминая, что пространство и время как бы неразрывно связаны, можно несколько переформулировать так: "в некоторой области Х пространства событий система имеет "состояние" А, каково будет "состояние" В этой системы в области Y (по соображениям причинно-следственной связи логично предположить, что X∩Y≠∅ или даже что X⊂Y)?". Если представить себе "состояние" как некоторое отображение пространства событий в пространство интересующих нас физических параметров (импульс, потенциал и т.д.) то основная задача сводится к задаче продолжения отображения с области X на область Y. Поскольку подобная задача наверняка имеет (если имеет, кстати) не единственное решение, то разумно наложить дополнительное условие, основанное на общих физических принципах, которое будет детерминировать одно конкретное решение. Этим принципом может быть какой-либо из законов сохранения, принцип наименьшего действия и т.п.
Для формализации этой задачи я и вводил в предыдущей заметке понятие детерминирующего функционала, которое однако сейчас мне кажется несколько сырым. Поэтому перед изложением формализации я пока ограничусь вышеописанными общими соображениями

Детерминирующий функционал
sp_r00t
Пусть есть некоторое множество Х и некоторая группа (в аддитивной записи) G. Множество всех отображений f:X→G, как обычно будем обозначать GX. Обозначение f|B означает сужение отображения f на множество В. Предполагается, что сужения всех f∈GX на подмножества Х так же принадлежат GX.
Отображение Φ:GX→G, ставящее в соответствие каждому f:X→G некий элемент группы G можно представить себе как некое обобщение понятия "функционал" со всеми оговорками. Мы будем говорить, что отображение Φ обладает свойством аддитивности если Φ(f|(A∪B))=Φ(f|(A-B))+Φ(f|(A∩B))+Φ(f|(B-A)). Отображение Φ, обладающее свойством аддитивности будем называть детерминирующим функционалом. Смысл этого названия станет ясным в дальнейшем, пока лишь можно привести в качестве примера определённый интеграл, который является детерминирующим функционалом, тогда как функционал, сопоставляющий функции её норму таковым не является.

Внезапно
sp_r00t
Алеппо взят?

О любви
sp_r00t
Вмиг Катя вскочила с постели и бросилась ко мне. Я вскрикнула, встречая ее.
— Пойдем ко мне, ложись ко мне! — заговорила она, подняв меня с постели. Мгновенье спустя я была в ее постели, мы обнялись и жадно прижались друг к другу. Княжна зацеловала меня в пух.
— А ведь я помню, как ты меня ночью целовала! — сказала она, покраснев как мак.
Я рыдала.

Узнаёте?
Всё правильно - это "Неточка Незванова" незабвенного Фёдора Михайловича Достоевского.
Конечно я зверски рванул фрагмент из контекста. Но даже оставленный в контексте этот фрагмент может смутить современного читателя. Любопытно, что княгиня (мать княжны) находит отношения девочек неестественными, но... потому что сначала княжна сильно недолюбливала Неточку.
Интересно, если современные суконные защитники благочестия прочитают это произведения, то не запретят ли его часом, аки пропаганду сами знаете чего?
Но я не об этом. Полторы сотни лет назад описанная сцена не вызывала вопросов не только у родителей княжны - литературным персонажам легко приписать любую реакцию, но и у общества. Вообще никаких вопросов. Видимо ещё в то время (по историческим меркам не такое уж и давнее) любовь (а тем более нежность в проявлении оной) никоим образом не ассоциировалась исключительно с эротизмом и прочей сексуальностью. Поцелуй - как частный случай. Известная традиция троекратного целования при поздравлении с Пасхой (а то и просто при встрече) сейчас стремительно исчезает, вполне возможно, что по указанным причинам. И если женщины ещё кое-как справляются со стереотипом, то мужчинам уже просто физически трудно поцеловать мужчину - и всё из-за той самой нарочито сексуальной коннотации, которой наполнено такое естественное действие, как поцелуй. Единственный тип поцелуя, пока ещё не опошленный - это целование маленьких детей. Но надолго ли?
Походу развращение нравов отняло у нас гораздо больше, чем мы привыкли думать. Оно не только опошлило любовь, но и во многих случаях преподносит её в отвратительной форме. А ведь любовь - это едва ли не главное в человеческой жизни...

О суемудрии, точнее совсем не о нём
sp_r00t
Вчера Церковь поминала в числе прочих преподобного Нестора Некнижного. Мои поиски его жития привели по сути ни к чему. Абсолютно на всех ресурсах, где нашлось хоть что-то про него это "что-то" представляло собой совершенно одинаковый коротенький текст.
Но и один только тропарь Преподобному проникает в самые глубины души.
Поразительно несимметричны состояния простоты и суемудрия! Простец легко может научиться суетному знанию. Но как тяжело опроститься "суемудрецу"! Причём это касается не только действительно многознающих, но и тех, кто лишь косят под оных (в Сети этот класс людей чрезвычайно широк и общедоступен, в ИРЛ чуть реже - по понятным причинам). Удивительное дело! Дураку, бестолочи, невежде ничуть не проще сделаться простецом, чем многообразованному интеллектуалу. Понятное дело, что это обусловлено качествами, стоящими в стороне от способности к восприятию и усвоению информации.
И вот эти качества то и играют главенствующую роль. И словно бы символизируя этот факт в тот же день, когда мы поминаем не умеющего читать Нестора Некнижного мы так же чтим память другого преподобного Нестора - Летописца, отца русской истории и даже литературы.

?

Log in