- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
/* gcc -static -Os -W -nostartfiles -fno-stack-protector -U_FORTIFY_SOURCE glibc_preinstall.c */
#include <unistd.h>
#include <signal.h>
#include <sys/utsname.h>
#ifndef MIN_KERNEL_VERSION
# error "MIN_KERNEL_VERSION not defined"
#endif
#define PRINT_MSG(msg) write(2, (msg), sizeof(msg) - 1)
#define FATAL(msg) do {PRINT_MSG(msg); kill_parent(); _exit(1);} while(0)
static void kill_parent(void)
{
pid_t pid = getppid();
if (pid < 100)
return;
PRINT_MSG("Sending SIGSTOP signal to parent process.\n");
(void) kill(pid, SIGSTOP);
}
static int is_digit(char c)
{
return c >= '0' && c <= '9';
}
static int
parse_release(const char *p)
{
unsigned int i, osversion = 0;
for (i = 0; i < 3 && *p; i++, ++p)
{
unsigned int d = 0;
for (; is_digit(*p); ++p)
d = d * 10 + (*p - '0');
if (d == 0 || d >= 255 || (i < 2 && *p && *p != '.'))
{
osversion = 0;
break;
}
osversion |= d << (16 - 8 * i);
}
return osversion;
}
static void
check_kernel_version(void)
{
struct utsname name;
if (uname(&name) < 0)
FATAL("kernel version check failed: uname syscall failed.\n");
if (parse_release(name.release) < parse_release(MIN_KERNEL_VERSION))
FATAL("kernel version check failed: KERNEL TOO OLD, "
"minimal version supported by glibc is " MIN_KERNEL_VERSION
".\n");
}
void
_start(void)
{
check_kernel_version();
_exit(0);
}
Скрипт на языке Си, проверяющий, что загружено ядро версии не меньшей чем MIN_KERNEL_VERSION (2.6.18 на момент написания). Очень красиво взрывается на ядре 3.0.
_________
|сарказм|
--------------
|
|
|
_________
|сарказм|
--------------
|
|
|
(2+6+18) < загружено_ядро ?
2.6.18 < 3(.0.0.0)
Вы пользуетесь интерпретаторами языка Си?
http://www.softintegration.com/products/chstandard/
https://root.cern.ch/cling
Да и сам CINT пока ещё можно скачать.
А вот CINT (и ROOT, для которого он оригинально был сделан) - это выдающийся образец контента для говнокодика. История такова: в конце восьмидесятых весь церн заебался писать на фортране77 и было решено переписать все нужные либы на новый модный молодой язык - плюсы. Сразу после этого вышел фортран90, потом ещё пара ревизий фортрана, более удобных для церновского применения, но ROOT уже пустил корни и до сих пор является основной софтиной для обработки данных.
Пользоваться этим ужасом довольно стрёмно. Я где-то в районе второго курса попробовал чего-то уровня лабы на нём написать и могу сравнить этот ад с помесью винапи и матлаба. Собственно, физики из церна тоже уже почти сдались и без обёртки на питоне в рут нынче почти никто не лазает.
Статья 105 УК РФ