- 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
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
main()
{
j=atol("776677"); c=0;
gb=65500; /*гран буф не>65500!*/
gp=gb+65500;
c=PA();
vm = v_mod(0x0f00)&0x00ff;
if((vm!=2) && (vm!=3) && (vm!=7)) v_mod(3);
if(vm==7) v_m=MK_FP(0xB000,0); /* присвоить адр в-памяти */
else v_m=MK_FP(0xB800,0);
if(c==0) {printf("Самопроверка программы неудачна."); dely(9);}
gek=calloc(1000,sizeof(int));
bufa=farcalloc(4000,sizeof(long));
bfk=calloc(4000,sizeof(int));
ok=calloc(800,sizeof(char));
st=calloc(10,sizeof(char));
bufv=calloc(4000,sizeof(char));
if((gek==NULL)||(bufa==NULL)||(bfk==NULL)||(ok==NULL)||(st==NULL)||(bufv==NULL))
{
printf(" Неудачное выделение памяти для основных буферов.\n");
printf(" Программа не выполняется.");
dely(9); exit(1); }
for(x=0;x<4000;x++) {bufa[x]=0L;bfk[x]=0; /*занул буф адресов и кодов */
if(x<10) st[x]=0x00; /*буф для выв чисел на экр*/
if(x<26) urov[x]=1;
if(x<20) {abn[x]=1; aba[x]=2L;}} /*мин адресa абс ном строк и нач загр буф*/
if(x<128) B0[x]=0;
ur=vv=avt=in=0; i=N=0; zap=0;x_=1;
ifm=10;/*10,01,11,12,21 - 1:п/панель записей,0-инф п/панель,12,21-2 базы*/
/* vctp(3);*/
mou(0); kur(0);
okn=0; /*сбр инд сохр-х окон*/
v_mod(0);
nok1=16;
SET(); ch=pal[0];
textbackground(BLACK);
clrscr();
okno(0,2,ch,ch);
window(1,1,80,25);
okno(16,2,ch,ch);
nstr(1);
baz=1;
nfl="0.cry ";
F_place("10.cry");
kzo();
prx=3; /*нейтраль*/
for(vm=4000;vm<8000;vm++) v_m[vm]=0; vm=0;
/*vm-далее кол-во стр загр буф*/
ppan(0,0);
form_kod(2);/*чт genko*/
attr=pal[5]; vdl(a+1,y_,a+36,y_,0,0); /*сох атр бывш стр*/
vctp(0);
tit();
if(zap!=0) nstr(2);
ZA[0]='\0';
za=strlen(MPR);
strcat(ZA,MPR);if(za>3) strcat(ZA,"\\"); strcat(ZA,"save.com");
za=0; if((access(ZA,0)!=-1)) za=1; /*ZA-путь savera*/
/**************/
for(;;)
{
mou(1);
ch=get_char(1);
if((ch<48)||(ch>57)) /*кроме цифр*/
if((ch!=0xfe)&&(ch>0x20)&&(f_kl==0)) {printf("\7"); ch=0;}
mou(2); mus(a); /*ориен мыши*/
if((ch==TAB)||(ch==RIGHT)||(ch==LEFT))
tab();/*порядок не менять*/
if(ch==15) { ctrl(); tab();}
mus(a); mus(101);
if(ch==F7) gl_poisk(0);
if(ch==AF7) gl_poisk(1);
if(ch==F1) hlp();
if(ch==CTRL) ctrl();
if((ch==AF1)&&(Pp==1)) ctrl();
if((ch==AF2)&&(Pp==0)) ctrl();
if(ch==32) exr(0);
if(ch==AF3) exb();
if(ch==AF4) exr(1);
if(ch==UP) { cm=0; up(1);}
if(ch==DOWN) { cm=0; down(1); }
if(ch==PGUP) { cm=0;scroll(0,0);}
if(ch==PGDN) { cm=0;scroll(1,0);}
if(ch==HOME) { cm=0;scroll(0,4000);}
if(ch==END) { cm=0;scroll(1,4000);}
if(ch==F5) kon(1);
if(zap==0) /*ес зп разреш*/
{
if(ch==INS) { s=0;
if((chkm(3)!=0)||(chkm(4)!=0)) {s=1;
coo(0,0x4E,0xCF,"","Предельная длина файла!",
"Разрешено только удаление!",""," Выход");}
if((chkm(1)!=0)||(chkm(2)!=0)) {s=1;
coo(0,0x4E,0xCF,"","Исчерпана длина буфера!",
"Сохраните набранную информацию,","после чего можно продолжить.",
" Выход");}
if(vm==4000)
{coo(0,0x7f,0x70,"Количество записей в списке достигло 4000.",
"","В данном случае возможно только удаление",
Это один знакомый слесарь ЭВМ писал прогу для создания/редактирования/просмотра самопальной древовидной БД, для своих нужд, с тем условием, что работать она должна была чуть ли не на i286, и грузилась не более 2х секунд. Недавно он обратился ко мне с просьбой перенести её под линь, но увидев это я решил что такое жить не должно, поэтому просто писал аналог с нуля, на плюсах, но справедливости ради, замечу что моя прога вышла чуть тормознее:).
Полный код к сожалению не влез, вот он: http://ideone.com/3sLsa.
P.S. Авторское форматирование сохранено.
suc-daniil 23.08.2012 18:47 # −3
Edward 23.08.2012 18:49 # 0
suc-daniil 23.08.2012 18:53 # 0
3.14159265 23.08.2012 20:07 # −1
>У моей подруги
Вонни, перелогинься.
suc-daniil 23.08.2012 20:19 # 0
Это ты о чём?
vistefan 23.08.2012 22:09 # +3
movaxbx 23.08.2012 19:18 # +3
Кон цкл.
sayidandrtfm 23.08.2012 20:06 # +3
govnomonad 23.08.2012 20:39 # +3
suc-daniil 23.08.2012 20:43 # 0
movaxbx 23.08.2012 21:39 # 0
suc-daniil 23.08.2012 21:44 # +1
bormand 23.08.2012 19:20 # +1
suc-daniil 23.08.2012 19:25 # +2
Steve_Brown 23.08.2012 19:27 # 0
Вот это заинтриговало. Как тут что-то может зависеть от порядка?
Хотя, по-видимому, это касается последующих строчек вида if(ch == ...). Если ch - глобальная переменная, то процедуры обработки могут ее менять, так что сработает сразу несколько ифов.
Nemoden 24.08.2012 06:21 # +3
suc-daniil 24.08.2012 13:55 # +1
myaut 23.08.2012 22:53 # +5
{
j=atol("776677");
Интересный способ инициализации переменных
HaskellGovno 23.08.2012 23:46 # +2
guest 24.08.2012 00:41 # −3
absolut 26.08.2012 06:58 # +3
bormand 26.08.2012 07:49 # +1
Видимо или TurboC не поддерживало суффикс L для лонгов (очень маловероятно), или автор программы об этом просто не знал, потому и поюзал atol("776677") вместо 776677L.
Abbath 24.08.2012 11:05 # −4
roman-kashitsyn 24.08.2012 11:08 # +3
> Полный код к сожалению не влез, вот он: http://ideone.com/3sLsa
Abbath 24.08.2012 21:18 # +2
suc-daniil 24.08.2012 21:29 # +2
movaxbx 24.08.2012 21:40 # +2
Даже если скачать обрывается на
suc-daniil 24.08.2012 21:45 # +1
movaxbx 24.08.2012 22:08 # +2
Abbath 24.08.2012 22:12 # +2
suc-daniil 24.08.2012 22:24 # +1
movaxbx 24.08.2012 21:30 # +2
roman-kashitsyn 24.08.2012 22:16 # +6
suc-daniil 24.08.2012 14:09 # +2
defecate-plusplus 24.08.2012 14:13 # +3
suc-daniil 24.08.2012 14:20 # +2
Vindicar 24.08.2012 15:58 # +5
Линкуешь модуль, при первом запуске прога запоминает своё состояние, при последующих проверяет.
Но имело смысл только на однозадачных системах, имхо.
sayidandrtfm 25.08.2012 12:48 # −2
некий системный механизм.
Во всех остальных случаях, в чём гарантия что не модифицирована алгоритмика валидации слепка состояния программы?
bormand 25.08.2012 13:13 # +2
sayidandrtfm 25.08.2012 13:29 # −2
'контроля' — системные механизмы или 'самоконтроля' — механизм конкретного приложения?
Вы имеете ввиду «подделать» какой-нибудь, например, 1024байтный хешкод слепка состояния?
Может легче ночью с фомкой прийти?
bormand 25.08.2012 17:00 # +2
Да вообще-то и 512бит хватит для всех.
Я имел в виду, что если кому-то очень-очень приспичит, он найдет уязвимости в системе (зачем подбирать контент под хэш-код, если можно тупо поправить этот хеш код в базе, или "пофиксить" код, проверяющий оный), или призовет юзера на помощь (тут свежая порнушка, но система защиты по ошибке матерится, ты ее успокой). На крайний случай можно и ночью с фомкой ;)
А в остальных 99% случаев от залетного вируса сработает и банальнейшая самопроверка с дохленьким CRC32. Принцип "Неуловимого Джо".
P.S. А вообще сейчас эти самопроверки неактуальны. Из последних файловых вирусов вспоминается разве что sality.
Vindicar 27.08.2012 16:00 # +2
http://pastebin.com/G8pSQEje
guest 28.08.2012 16:06 # +3
самое смешное
bormand 28.08.2012 16:37 # +1
guest 28.08.2012 17:05 # −2
поясняю: смешно то, что поле есть, но никто его не использует (если я правильно понял, этот велосипед прячет копию своего заголовка в .data)
bormand 28.08.2012 17:10 # +1
Окай, пусть сумма всех слов кроме ChkSum равна 1, подберите значение ChkSum, чтобы сумма всех слов файла, равнялась ему. Problem?
> смешно то, что поле есть, но никто его не использует
Не смешно. Это стандартный заголовок экзешника. Как говорится 'из песни "бля" не выкинешь'.
P.S. Если вы о том, что после "заражения" файла не пофиксили контрольную сумму, то ЕМНИП ноль там вполне допустим (в windows чуть более чем все экзешники с нулями, хотя там и формат другой).
guest 08.09.2012 08:51 # 0
[i]Петя, Вася и Маша хавали ништяки. Петя захавал 6 ништяков, Вася - 8. Сколько захавала Маша, если известно, что было всего захавано 7 (mod 16) ништяков?
bormand 08.09.2012 09:52 # +1
> Сколько захавала Маша
Очевидно, что 9. Но это совершенно другая история. Я ведь не зря два раза писал про весь файл. Т.е. весь файл, включая само поле с контрольной суммой.
Правильная задача на данную тему: дан файл Проставьте вместо xx такой байт, чтобы он равнялся сумме всех байтов этого файла по модулю 256. Не проставите - слив засчитан. Время пошло.
guest 08.09.2012 13:41 # 0
судя по минусу, время уже вышло, наверное не успею написать почему так ;-)
bormand 08.09.2012 15:03 # 0
0xFF != 0xFE
FAIL.
LispGovno 08.09.2012 23:37 # 0
Даже если сменить функцию вычисления checksum на xor, то таже картина.
crc8 checksum я даже пробовать не буду.
(Как бы не в функции дело, а хотелось побитоёбить на Хаскеле)
LispGovno 08.09.2012 13:59 # +1
http://ideone.com/xxHAE
Что-то мне подсказывает, что я где-то накосячил
bormand 08.09.2012 15:09 # +2
> Включая его самого? ;)
К сожалению guest никак не может\не хочет это понять.
guest 08.09.2012 17:01 # +1
LispGovno 08.09.2012 23:08 # 0
Вы далекий человек от функционального программирования? Мне просто интересно, насколько функциональный код понятен далёким людям?
suc-daniil 09.09.2012 07:42 # 0
LispGovno 08.09.2012 23:48 # 0
> 7 (mod 16)
Что за не популярная нотация? Так выглядит, как будто функция 7 принимает в качестве параметра функцию mod с одним захваченым параметром и одним свободным. (mod 16). При условии, что mod - остаток от деления.
bormand 09.09.2012 06:18 # 0
Самая обычная математическая нотация, когда справа от выражения приписывают (mod N).
eth0 24.08.2012 21:35 # +2
bormand 25.08.2012 06:24 # +2
eth0 25.08.2012 21:19 # +2
Читать что угодно с винта, как бы выразиться помягче. Когда у меня однажды встала задача примерно такой же направленности, я сказал "да ну его" и забил. Это время потраченное впустую, не даст ровным счётом ничего.
suc-daniil 25.08.2012 21:26 # +1
guest 25.08.2012 21:37 # +2
только не блоки, а сегменты/секции. очевидно, что ресурсы хешировать не нужно
eth0 25.08.2012 22:27 # +2
guest 08.09.2012 17:21 # +1
теоретически, в памяти получится секурнее
guest 25.08.2012 20:00 # +2
на виндах встречается реже, но картина примерно такая же
guest 25.08.2012 20:03 # +2