- 1
- 2
- 3
- 4
- 5
http://govnokod.ru/20924
Запрашиваемая страница не найдена!
Возможно, её и не было никогда
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 335
+2302
http://govnokod.ru/20924
Запрашиваемая страница не найдена!
Возможно, её и не было никогда
http://dump.bitcheese.net/files/pimarut/%D0%93%D0%BE%D0%B2%D0%BD%D0%BE%D0%BA%D0%BE%D0%B4_%2320924_%E2%80%94_C___%E2%80%94_%D0%93%D0%BE%D0%B2%D0%BD%D0%BE%D0%BA%D0%BE%D0%B4.%D1%80%D1%83.html
но бекап я сделал, так что хуй вам. Я требую продолжения банкета.
+7
http://dump.bitcheese.net/images/aditoso/sc.png
Умножение двух трехбитных чисел с применением https://ru.wikipedia.org/wiki/Дешифратор
Для сравнения - вот умножение через сумматоры https://i.imgur.com/9JCy2D2.png
+7
https://twitter.com/neuromzan
Нейросеть научилась писать твиты за Рамзана Кадырова https://nplus1.ru/news/2016/08/05/neurokad
Вореции
−715
return instruction emitted twice with branch target inbetween
function
unsigned int fact( unsigned int n) { return n < 1 ? 1 : n*fact(n-1); }
produces
fact:
.LFB0:
.cfi_startproc
testl %edi, %edi
movl $1, %eax
je .L4
.p2align 4,,10
.p2align 3
.L3:
imull %edi, %eax
subl $1, %edi
jne .L3
rep ret # <-- this instruction can be removed
.L4:
rep ret
.cfi_endproc
.LFE0:
.size fact, .-fact
.section .text.unlikely
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71923 даже факториал не могут скомпилировать нормально
−47
Имеем приблизительно такой код
#define XXX(n) ar[n]=s._field_##n;
XXX(01);
XXX(02);
XXX(03);
XXX(04);
XXX(05);
XXX(06);
XXX(07);
XXX(08);
Естесвенно при при компиляции получаем ошибку, т.к. 08 это неправильная восмеричная константа. Обойти можно так
#define XXX(n) ar[1##n-100]=s._field_##n;
Но как-то это некрасиво. Может есть более красивый подход?
https://www.linux.org.ru/forum/development/12607523
−50
Timer_Overflow_Interrupt(void)
{
switch(TMR_State) // Обработчик прерывания по переполнению
{
case 0:
{
Clr_Pin(); // Вывод в 0
TCNT = 255-100; // Задержка в 100 (до переполнения)
TMR_State = 1; // Следующая стадия 1
Break; // Выход
}
case 1:
{
Set_Pin();
TCNT = 255-1;
TMR_State = 2;
Break;
}
case 2:
{
Clr_Pin();
TCNT = 255-5;
TMR_State = 3;
Break;
}
case 3:
{
Set_Pin();
TCNT = 255-2;
TMR_State = 4;
Break;
}
case 4:
{
Clr_Pin();
TCNT = 255-3;
TMR_State = 5;
Break;
}
case 5:
{
Set_Pin();
TCNT = 255-4;
TMR_State = 6;
Break;
}
case 6:
{
Clr_Pin();
Timer_OFF(); // Выключаем таймер. Работа окончена
TMR_State = 0; // Обнуляем состояние
Break;
}
default: break;
}
}
http://easyelectronics.ru/avr-uchebnyj-kurs-konechnyj-avtomat.html
А не лучше ли сделать массив указателей на функции, каждая из которых будет соответствовать case-у, и пусть там оно вызывает из массива фукнцию под номером TMR_State? Притом вот эту хню TMR_State = 1; TMR_State = 2; TMR_State = 3; которая дублируется во всех этих case-ах, ее ж можно хуйнуть всего один раз, типа TMR_State = (TMR_state+1)%7. Хотя для AVR контроллеров это скорее всего будет дорогая операция, так что можно хуйнуть TMR_State = TMR_state == 7 ? 0 : TMR_state+1;
−47
while((*dst++ = *src++));
двойные скобки, чтоб заткнуть ворнинг
warning: suggest parentheses around assignment used as truth value [-Wparentheses]
−46
#include <stdio.h>
#include <inttypes.h>
#define REORDER3(b1,b2,b3,a1,a2,a3) do {uint32_t b1_tmp = a1; uint32_t b2_tmp = a2; b3 = a3; b1 = b1_tmp; b2 = b2_tmp;} while (0)
void uintprint3(uint32_t *a)
{
printf("%u %u %u\n", a[0], a[1], a[2]);
}
void sort3(uint32_t a[3] )
{
if (a[0] > a[1])
{
if (a[1] > a[2])
{
REORDER3 (
a[0], a[1], a[2],
a[2], a[1], a[0]);
return;
}
else
{
if (a[0] > a[2])
{
REORDER3 (
a[0], a[1], a[2],
a[1], a[2], a[0]);
return;
}
else
{
REORDER3 (
a[0], a[1], a[2],
a[1], a[0], a[2]);
return;
}
}
}
else
{
if (a[1] <= a[2])
{
return; //NO REORDER
}
else
{
if (a[0] <= a[2])
{
REORDER3 (
a[0], a[1], a[2],
a[0], a[2], a[1] );
return;
}
else
{
REORDER3 (
a[0], a[1], a[2],
a[2], a[0], a[1] );
return;
}
}
}
}
int main(void)
{
uint32_t a[] = {0, 1, 2};
uint32_t b[] = {0, 2, 1};
uint32_t c[] = {1, 2, 0};
uint32_t d[] = {1, 0, 2};
uint32_t e[] = {2, 0, 1};
uint32_t f[] = {2, 1, 0};
sort3(a); sort3(b); sort3(c); sort3(d); sort3(e); sort3(f);
uintprint3(a);
uintprint3(b);
uintprint3(c);
uintprint3(d);
uintprint3(e);
uintprint3(f);
return 0;
}
Вот как сортировать надо. А то всякие жабаскриптики http://govnokod.ru/20308 непонятные.
Это говно кстати можно автосгенерировать для произвольной длины, но мне что-то западло этим заниматься
−47
http://ache.vniz.net/demos.html
> Cвоеобразный программисткий подвиг совершил Дима Бурков. В то время начали появляться первые PC. Unix на них выглядел неубедительно. Linux еще не появился, зато повился Venix. Хачить его было невозможно - не было исходных текстов ядра. Дима Бурков реассемблировал ядро, потом писал программы на Си, которые давали тот же текст ассемблера - так появились тексты ядра на Си ... работа не для слабонервных.
А вот интересно, можно ли сделать декомпилятор таким способом? Например, если известна точная версия GCC и флаги компиляции, которые использовались (ну и естественно исходники компилятора должны быть в наличии) то перебирать с эвристиками некий Си-код, пользуясь дизасм-листингом для подсказки и сравнения. Какой подход использует Hex-Rays например? Вряд ли они исходники GCC ковыряли
−47
// ПРЕОБРАЗОВАНИЕ КОДА И КОНЕЧНЫЕ АВТОМАТЫ
// ---------------------------------------
// (проектируем очень хуево дизассемблируемый код)
int T[256] =
{
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
// , - 0 1 2 3 4 5 6 7 8 9
0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0, 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
for(;;)
{
int A;
switch( S )
{
case 0:
switch( T[*c] )
{
case 1: { S=1; A=1; }; break;
default: { S=5; A=2; }; break;
}
break;
case 1:
switch( T[*c] )
{
case 2: { S=0; A=2; }; break;
case 1: { S=1; A=3; }; break;
case 3: { S=2; }; break;
case 4: { S=4; A=2; }; break;
case 0: { S=5; }; break;
}
break;
case 2:
switch( T[*c] )
{
case 1: { S=3; A=4; }; break;
default: { S=5; }; break;
}
break;
case 3:
switch( T[*c] )
{
case 2: { S=0; A=5; }; break;
case 1: { S=3; A=6; }; break;
case 4: { S=4; A=5; }; break;
default: { S=5; }; break;
}
break;
case 4:
A = 7;
break;
case 5:
A = 8;
break;
}
switch( A )
{
case 1: { l=*c-'0'; c++; }; break;
case 2: { store(l,l); c++; }; break;
case 3: { l=l*10+*c-'0'; c++; }; break;
case 4: { h=*c-'0'; c++; }; break;
case 5: { store(l,h); c++; }; break;
case 6: { h=h*10+*c-'0'; c++; }; break;
case 7: { exit(); }; break;
case 8: { error(); }; break;
}
}
http://z0mbie.daemonlab.org/automaton.txt отсюда
Мне это напомнило вот эту вот ебанутейшую хуиту https://src.chromium.org/viewvc/native_client/trunk/src/native_client/src/trusted/validator_ragel/gen/validator_x86_64.c из хрома, которая делает валидацию опкодов из-под NaCl, его через какой-то ragel делают