ГОТОВИМ ПРИНЦА ИЗ ТОГО, ЧТО ЕСТЬ В ХОЛОДИЛЬНИКЕ.
sp_r00t
Оригинал взят у pesen_net в ГОТОВИМ ПРИНЦА ИЗ ТОГО, ЧТО ЕСТЬ В ХОЛОДИЛЬНИКЕ.


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

В детстве женщины верят в принцев «под ключ», которые первыми олезут целоваться. В реальной жизни надо приходится лепить Франкенштейна из полуфабрикатов, валяющихся по углам на чужих свадьбах. Зато какой простор для творчества!

Не то чтобы все мужчины были плохи. Просто женщинам не жаль сил на их перевоспитание. На свете всё можно улучшить. Поменять в Версале занавески, осветлить Биг-Бен, перестелить кафель на Сан-Марко - вот лишь три известных мне проекта. Только эгоистка будет переделывать себя в мире, полном несовершенства.

Мужчина не любит перемен. Его устраивает и он сам, и жена, навек двадцатилетняя. Что в ней улучшать? Две ноги, две сиськи, это ли не формула совершенства?

На свой счёт мужчина заблуждается.Розги и электрошок из кого угодно сделают яркую индивидуальность. И пока ЮНЕСКО не охраняет нас от брака, мы делаемся всё лучше и лучше.

Женские журналы объясняют: борщ, скалка, истерики и дозированный секс выведут из любого педагогического тупика.
Ибо сказано:
Если муж рычит на маму, создайте ему рефлекс. Пусть мама приносит пиво. К третьему её визиту питомец будет тереться о ноги и поскуливать.

Если прячет по углам зарплату, аккуратно соберите оставленные кучки. Вместо них разложите иронические записки. Идею щедрости закрепите тапочкой по ушам. Обыски и шмон не прекращать. Покажите, что система сильнее.

Если смотрит на чужие зады, не надо сразу стерилизовать. Толстый, не игривый муж - моральная обуза. Попробуйте лошадиные шоры. Или шокер. Названия устройств почти одинаковые, значит и эффект будет сходным.

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

Один хитрый полковник, 27 лет в браке, чтобы не проигрывать в спорах, выработал мигрень. Лишь завидев пылесос, он падает на диван. Страшная боль пронзает его военный лоб. Терапевт подтвердил болезнь. Выписал справку за тысячу пятьсот двадцать три рубля. Сумма не ровная, чтобы не выглядела взяткой. В справке обозначено: тишина, вино и чтение книг допустимы, пылесос и швабра запрещены. Лишь на время ужина полковник всплывает из мира страданий к семье и детям.
Это не простой путь. Для мигрени нужен художественный вкус, а лучше театральное училище. Ну и расходы на терапевта учтите.

Другой способ называется итальянская забастовка. Все указания надо выполнять быстро и бестолково. Мясорубку сломать, посуду уронить, вместо сметаны купить потолочные белила. Скотч-терьера при мытье утопить.
Имитировать бытовой идиотизм унизительно, придётся услышать обидные слова. Вас даже могут отхлестать мокрой тряпкой за чужие лужи. Но кормить не перестанут. И однажды оставят в покое - в холодной, совершенно отдельной постели.

Лично я изобрёл метод грубой лести. Выслушав долгую нотацию, говорю потрясённо:
- Какая же ты красивая!
Дальше важно не снижать градус. Скромность и чувство меры отбросить и даже выкорчевать.
Как же я счастлив, говорю, что ты выбрала меня! (Речь идёт о развешивании картин). До сих пор не верю, что дышу с тобой одним дымом от сгоревшей курицы. Спасибо небесам и бардовскому фестивалю, где мы повстречались впервые. Я хочу исполнить все твои фантазии, но сначала позволь налюбоваться тобой в этом боковом ракурсе, лёжа с дивана.

Моя воспитательница всякий раз теряется. Хочет ругаться, но не выдерживает, краснеет, бежит к зеркалу. Вертится там и потом уже не помнит, во что хотела меня переделать.


Нет слов
sp_r00t
На днях довелось смотреть фильм на одном из моих любимых телеканалов - National Geographic Channel. Фильм был посвящён Питеру. Надо сказать, что исторические интерпретации авторов контента на этом канале иногда страдают некоторой поверхностностью (если можно так выразиться). Раньше я списывал это на научно-популярный (с акцентом на популярность) характер канала. Но услышанное мною в этот раз повергло меня в шок.
А сказано было примерно следующее (цитирую по памяти): "В октябре 1917 года большевики, во главе со Владимиром Лениным, предприняли штурм Зимнего дворца с целью свержения монархии. В результате штурма император Николай II с семьёй попал в плен к большевикам".
Моё уважение к каналу рухнуло. Блин, одно дело заявлять что-то типа "Гитлер хотел захватить мир" - это чисто оценочное суждение, а совсем другое - тупо перевирать факты глобального значения, которые ни у кого никогда не вызывали разночтений!
Но вот интересно - а мы ихнюю историю знаем столь же поверхностно, как они нашу?

По поводу
sp_r00t
предыдущей заметки.
Описанное пространство обладает просто фантасмагорическими свойствами.
Например, замыкание точки 0 равно всему пространству!
Фактически в нём не выполняется ни одна аксиома отделимости. Экстремально неделимое пространство, просто сингулярность какая-то))))
Если "выколоть" из пространства точку 0, то аксиома Т0 уже начнёт выполнятся. Но Т1 - по прежнему нет. Далее будем именно так представлять данное пространство.
Дополнительно возникает вопрос об τ0- и τ1-условиях.
Как мы видим из примера нашего пространства, множество вида (0,а) включено только в одно псевдовыпуклое множество - совпадающее со всем пространством. Формально это условие выполняется. Однако если так, то какой тогда вообще смысле в этих условиях если они выполняются, так сказать автоматически - для всего пространства?

Не компактно
sp_r00t
Уже довольно давно я ставил задачу доказать компактность геодезических отрезков в τ-пространствах. И вот в процессе поисков доказательства натолкнулся на следующее пространство. Это пространство состоит из вещественной полуоси [0, +∞) с топологией, в которой открытыми множествами являются отрезки [0, а) (вместе с пустым множеством и универсумом). Соответственно замкнутыми множествами являются множества вида [а,+∞). Γ-семейство этого пространства можно выбрать совпадающим с замкнутыми множествами. В этом случае геодезическим отрезком Γ(a, b) будет являться множество Γ(min(a, b), +∞), которое, соответственно, некомпактно.

Ядерная нестыковочка
sp_r00t
В процессе программирования модулей ядра Linux нередко приходится прибегать к помощи ассемблера. Традиционно разработчики ядра используют встроенный ассемблер GCC (который по сути является шлюзом в GAS), но у этого подхода есть куча недостатков, что вызывает желание использовать посторонний ассемблер и раздельную трансляцию. Кстати, знаменитый Свен Шрайбер в своей книги по ядру Винды пишет, что он на этом пути наловил столько BSOD'ов, что в итоге остановился на встроенном же ассемблере. А встроенный ассемблер в Visual C++ имхо намного лучше своего аналога в GCC. Да и раздельная трансляция (как и вообще написание модулей ядра) в Linuxe намного проще.
Но я сначала решил просто поэкспериментировать и написать простенькую функцию на асме и интегрировать её в код на Си.
Пишем функцию:
  1. madd:
  2. push ebp
  3. mov ebp, esp
  4. mov eax, [ebp+8]
  5. add eax, [ebp+12]
  6. pop ebp
  7. ret

Этот простенький "сумматор" вставляем в код нашего модуля:
  1. #include <linux/module.h>
  2. #include <linux/kernel.h>
  3. extern int madd(int, int);
  4. int init_module(void)
  5. {
  6. printk(KERN_ALERT "Summa 11 i 6 ravna %d\n", madd(11,6));
  7. return 0;
  8. }

После компиляции и загрузки модуля все срабатывает, но результат получается сильно не похожим на 17.
Дизассемблер выдаёт нечто совершенно невменяемое. А именно, вызов функции madd осуществляется вот так:
  1. mov eax, 6
  2. mov edx, 0Bh
  3. call madd

То есть вызов, вопреки ожиданиям, никак не соответствует си-соглашению, о чём вызываемая функция конечно не догадывается, возвращая в итоге "винигрет".
Скорее всего проблема в оптимизации, но как заставить GCC НЕ оптимизировать этот участок кода? Фактически мне удалось решить эту проблему, заменив объявление функции madd, незаконно приписав ей переменное число параметров.
  1. extern int madd(int, ...);

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

Приручение 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
Отзыв на "Повесть об украинском народе" С. Кулеша

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

?

Log in

No account? Create an account