- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
int main(int argv,char *argc[]){
...
if(fork() != 0)goto _EXIT;
...
return 0;
_EXIT:
return 0;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+113
int main(int argv,char *argc[]){
...
if(fork() != 0)goto _EXIT;
...
return 0;
_EXIT:
return 0;
}
Ну как ???
+126
format MS COFF
public fuckHighLevel as '_fuckHighLevel@4'
fuckHighLevel:
pop ebx
pop eax
add eax, 1
jmp ebx
Вызываем ассемблерную процедуру из Си.
Вместо retn используем безусловыный переход на адрес возврата.
Но работает же!
+105
int c = ((i-(i%(int)pow(10,p)))/(int)pow(10,p))%10;
Выделение из числа I цифры, стоящей на месте P с конца.
=>
i = 1234, p = 2, c => 2
+127
[code=Си]
switch(n)
case 1:
{
/* code1 */
/* fallthrough */
case 2:
/* code 2 */
}
[/code]
Все имена и явки изменены!
Сцуко, работает. Щас в стандарт полезу, интересно же! Обвиняют меня, я киваю на издержки мержа. Но смешно.
+132
if (argc == 3)
snprintf(outfile, sizeof(outfile) - 1, "scan.log", argv[1], argv[2]);
else if (argc >= 4)
{
snprintf(outfile, sizeof(outfile) - 1, "scan.log", argv[1], argv[3], argv[2]);
// ...
}
Какой-то иксплойт, файл pscan2.c
+138
int ftp_list (int sck, int verbose) {
/* ... */
list = fopen("LIST.txt", "w");
if (list == NULL) {
printf("Unable to open LIST file..\n");
free(buffer);
return -1;
}
/* ... */
}
Функция получения списка файлов в директории с FTP-сервера.
http://sourceforge.net/projects/libftp/
+140
printf("0x%02X", (int)( (((block[i << 1] >> ((15 - (j >> 4)) << 2)) & 15) << 4 ) | ((block[(i << 1) | 1] >> ((15 - (j & 15)) << 2)) & 15)));
Жертва жестокой оптимизации. При всем этом код исправно делал свое дело... пока не пришла пора в нем что-то изменить =)
+125
#line 411 "ext/standard/var_unserializer.c"
{
YYCTYPE yych;
if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
yych = *YYCURSOR;
switch (yych) {
case 'C':
case 'O': goto yy13;
case 'N': goto yy5;
case 'R': goto yy2;
case 'S': goto yy10;
case 'a': goto yy11;
case 'b': goto yy6;
case 'd': goto yy8;
case 'i': goto yy7;
case 'o': goto yy12;
case 'r': goto yy4;
case 's': goto yy9;
case '}': goto yy14;
default: goto yy16;
}
yy2:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy95;
default: goto yy3;
}
yy3:
#line 733 "ext/standard/var_unserializer.re"
{ return 0; }
#line 442 "ext/standard/var_unserializer.c"
yy4:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy89;
default: goto yy3;
}
yy5:
yych = *++YYCURSOR;
switch (yych) {
case ';': goto yy87;
default: goto yy3;
}
yy6:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy83;
default: goto yy3;
}
yy7:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy77;
default: goto yy3;
}
yy8:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy53;
default: goto yy3;
}
yy9:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy46;
default: goto yy3;
}
yy10:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy39;
default: goto yy3;
}
yy11:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy32;
default: goto yy3;
}
yy12:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy25;
default: goto yy3;
}
yy13:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy17;
default: goto yy3;
}
yy14:
++YYCURSOR;
/* далее еще несколько похожих кусков кода чуть менее хардкорных */
http://svn.php.net/viewvc/php/php-src/trunk/ext/standard/var_unserializer.c?view=markup
Исходники функции unserialize в php, не зря она так медленно работает на больших массивах...
+135
//глубоко в коде
char output[1024];
//еще глубже
struct sockaddr_in outputa;
//...
if(sendto(s, output, 512, 0, (struct sockaddr *) &output, rsize) == SOCKET_ERROR) {
printf("Socket error: %i.\n", WSAGetLastError());
}
Долго-же я думал, почему оно вываливается с ошибкой 10047.
+142
#include <unistd.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
int fdp1[2],fdp2[2],fdp3[2],fdp4[2],fdp5[2];
pipe(fdp1);
pipe(fdp2);
pipe(fdp3);
pipe(fdp4);
pipe(fdp5);
if(fork()==0){
close(1);dup(fdp1[1]);close(fdp1[1]);close(fdp1[0]);
execl("/bin/cat","cat",argv[1],(char*)0);
exit(1);
}
if(fork()==0){
close(0);dup(fdp1[0]);close(fdp1[0]);close(fdp1[1]);
close(1);dup(fdp2[1]);close(fdp2[1]);
execl("/usr/bin/tr","tr","-cs","A-Za-z","\n",(char*)0);
exit(2);
}
if(fork()==0){
close(0);dup(fdp2[0]);close(fdp2[0]);close(fdp2[1]);
close(fdp1[0]);close(fdp1[1]);
close(1);dup(fdp3[1]);close(fdp3[1]);close(fdp3[0]);
execl("/usr/bin/sort","sort",(char*)0);
exit(3);
}
if(fork()==0){
close(0);dup(fdp3[0]);close(fdp3[0]);close(fdp3[1]);
close(fdp1[0]);close(fdp1[1]);
close(fdp2[0]);close(fdp2[1]);
close(1);dup(fdp4[1]);close(fdp4[1]);
execl("/usr/bin/uniq","uniq","-c",(char*)0);
exit(4);
}
if(fork()==0){
close(0);dup(fdp4[0]);close(fdp4[0]);close(fdp4[1]);
close(fdp1[0]);close(fdp1[1]);
close(fdp2[0]);close(fdp2[1]);
close(fdp3[0]);close(fdp3[1]);
close(1);dup(fdp5[1]);close(fdp5[1]);
execl("/usr/bin/sort","sort","-n",(char*)0);
exit(5);
}
if(fork()==0){
close(0);dup(fdp5[0]);close(fdp5[0]);close(fdp5[1]);
close(fdp1[0]);close(fdp1[1]);
close(fdp2[0]);close(fdp2[1]);
close(fdp3[0]);close(fdp3[1]);
close(fdp4[0]);close(fdp4[1]);
execl("/usr/bin/tail","tail","-n",argv[2],(char*)0);
exit(6);
}
close(fdp1[0]);close(fdp1[1]);
close(fdp2[0]);close(fdp2[1]);
close(fdp3[0]);close(fdp3[1]);
close(fdp4[0]);close(fdp4[1]);
close(fdp5[0]);close(fdp5[1]);
while(wait(0)!=(-1));
exit(0);
}
задача: подсчет повторяемости слов, и вывод слов указанной длины.