- 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
typedef struct {
uint32_t id;
char * title;
} dbrow_t;
typedef struct {
char * context;
dbrow_t dbrow;
} parser_context_t;
typedef enum {
bad_char = 0,
identifer,
number,
state_end_context,
state_end_line
} type_t;
type_t ch_d[0x100] = { [0] = state_end_line, [1 ... 0xff] = bad_char, ['0' ... '9'] = number, ['a' ... 'z'] = identifer, ['\n'] = state_end_context};
inline char * do_other_type(char * p, type_t type) { while(ch_d[*(++p)] == type); return p;}
static inline uint64_t bad_char_headler(parser_context_t * context) { context->context = do_other_type(context->context, bad_char); return 1;}
static inline uint64_t number_headler(parser_context_t * context) {
uint32_t id = 0; char * p = context->context;
while(({ id *= 10; id += (*p - '0'); ch_d[*(++p)];}) == number);
context->dbrow.id = id; context->context = p;
return 1;
}
static inline uint64_t identifer_headler(parser_context_t * context) {
char * p = context->context, * title = context->dbrow.title;
char * end_identifer = do_other_type(p, identifer);
memcpy(title, p, (end_identifer - p)); *(title + (end_identifer - p)) = 0;
context->context = end_identifer;
return 1;
}
static inline uint64_t end_context_headler(parser_context_t * context) {
context->context = do_other_type(context->context, state_end_context);
if(context->dbrow.id && *context->dbrow.title)
fprintf(stderr, "id = %u, title = %s\n", context->dbrow.id, context->dbrow.title);
context->dbrow.id = 0, *context->dbrow.title = 0;
return 1;
}
static inline uint64_t end_line_headler(parser_context_t * context) { return 0; }
typedef uint64_t(*headler_ptr_t)(parser_context_t *);
headler_ptr_t headlers[] = { [bad_char] = bad_char_headler, [identifer] = identifer_headler, [number] = number_headler, [state_end_context] = end_context_headler, [state_end_line] = end_line_headler };
int main(void) {
char * content = strcpy(malloc(50), "1|raz\n11|dva\n21|tri\n31|shestb\n5000|test\n|||\n||\n|\n");
parser_context_t context = (parser_context_t){ .context = content, .dbrow = (dbrow_t){ .title = malloc(1000)}};
while(headlers[ch_d[*(context.context)]](&context));
return 0;
}
Решил пацанам показать как писать парсер - вышло говно. Хотя так-то должно тащить - забенчите кто-нибудь, настолько это гумно медленнее strtok()'а.
superhackkiller1997 15.07.2013 12:06 # −6
Тоже самое, только на стртоке. Как питух.
blackhearted 15.07.2013 12:09 # +1
bormand 15.07.2013 12:25 # 0
Plain Old Telephone Service?
bormand 15.07.2013 13:33 # +2
You spin me right round, baby
right round like a record, baby
Right round round round
You spin me right round, baby
Right round like a record, baby
Right round round round
Не тестил код? Он же не выйдет из этого цикла.
superhackkiller1997 15.07.2013 13:48 # −1
bormand 15.07.2013 15:35 # +5
Я бы переписал это вот таким анскилльно-заедушным образом:
superhackkiller1997 15.07.2013 12:32 # −7
Как запостят говно на пхп, говноскрипт - полон курятник питухов, а тут хрен - пустота, попутали совсем. Я уйду, чтобы пришел - тут уже был тред.
bormand 15.07.2013 12:40 # +3
bormand 15.07.2013 13:24 # +3
1) ch_d[*(context.context)]. Здесь у тебя знаковая хуйня используется как индекс массива. К примеру на "1|хуй" код упадет. Или ты компилишь с опцией -funsigned-char?
2) Парсер плохо реагирует на контекст, числа он всегда сует в id, английские слова всегда в title. Если в строке есть 2 числа или 2 строки - вторая перетирает первую. Т.е. "1|100500|42|2|test", "test|2" и "foo|2|test" парсятся одинаково. Или так и была поставлена задача?
3) Названия state_end_context и state_end_line, скорее всего, попутаны местами. Все-таки end_line больше подходит для '\n', а end_context для 0.
4) Функции возвращают uint64_t, но по сути там true/false. Может стоит поюзать bool, который есть в C99?
5) По строке 55. Зачем клонировать строку, если не планируешь ее портить? А если планируешь - для этого есть strdup...
superhackkiller1997 15.07.2013 13:42 # −2
Не упадёт.
>2) Парсер плохо реагирует на контекст, числа он всегда сует в id, английские слова всегда в title. Если в строке есть 2 числа или 2 строки - вторая перетирает первую. Т.е. "1|100500|42|2|test", "test|2" и "foo|2|test" парсятся одинаково. Или так и была поставлена задача?
Так и должно работать.
>3) Названия state_end_context и state_end_line, скорее всего, попутаны местами. Все-таки end_line больше подходит для '\n', а end_context для 0.
Нет, там поидее был один вначале контекст на каждую байду - типа на каждый кейвалуе и оно должно было её хреначить куда-то - я хзваще. Я отпопа называл.
>4) Функции возвращают uint64_t, но по сути там true/false. Может стоит поюзать bool, который есть в C99?
Зачем? Бул питушня для питушков. У тебя один хрен из функции возвращается uint64_t - для ретурнов, аргументов и прочего профита от була не будет - если я буду сохранять возврат в память -я поставлю там uint8_t - а бул для питухов.
>5) По строке 55. Зачем клонировать строку, если не планируешь ее портить? А если планируешь - для этого есть strdup...
Да я вообще не знаю что там пацану надо. Я отпопа сделал - чтобы идею паказать. Я там ему ещё стек написал - http://hashcode.ru/questions/230714/%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C-%D0%BE%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0% B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8-%D0%B2-c - нет, ты погляди на этих кукарекушек - они спорят со мной. Питушки спорят со мной по матчасти х86, не зря я туда пошел.
bormand 15.07.2013 13:51 # +2
Уверен?
superhackkiller1997 15.07.2013 14:51 # −3
bormand 15.07.2013 15:30 # +4
P.S. Естественно, есть возможность, что там окажутся нолики, и все отработает. Но зачем надеяться на это, если достаточно кастануть в беззнаковый байт?
superhackkiller1997 15.07.2013 16:01 # −2
Я никогда не юзаю знаковую питушню.
Не ЯП, а говно - почему всё так пичально.
govnomonad 15.07.2013 16:06 # +10
>Питушарская сишка
а Царь-то ненастоящий
bormand 15.07.2013 16:08 # +7
Да нет, просто он разочарован в сишке. Теперь придется писать свой Царский язык.
govnomonad 15.07.2013 16:13 # +7
superhackkiller1997 15.07.2013 16:23 # −2
Но лучше ничего нету - приходится терпеть тонные говно.
HaskellGovno 15.07.2013 16:06 # +7
1) Забей на производительность и переходи на нормальный ЯП. Подсказка у некоторых пользователей говнокода в в никах.
2) В окно.
superhackkiller1997 15.07.2013 16:26 # −2
HaskellGovno 15.07.2013 16:27 # +3
superhackkiller1997 15.07.2013 16:50 # −2
Букв много - писать много и долго. ЦА ЯП анскиледы и питухи. Вот хочу я написать свою ОС - хрен тебе, никто, кроме сишки не может. Хочу написать свою игрулю - хрен тебе. Тридешка, матан, обработка строк - никто ничего не может.
Даже торрентокачалку приходится ваять 10лет, ибо в питух линукс ведре нет нормального sendfile+aio апи. Нет нормального мегасокет api. Всё самому надо хреначить. Везде всё хреначить надо самому.
Вот сегодня я пилил гинерилку кода в кучу - хрен норм запилишь - только через питух файлы. Вручную пришлось начать ваять парсер для говняного елфа и питух so. dl - для слабаков и питухов.
Вобщем - было проще написать ассемблер, чем страдать этой хернёй - буду пилить асм.
Очередно говно.
anonimb84a2f6fd141 15.07.2013 17:50 # 0
Дак ты ж сишку сам выбрал, чему ты удивляешься? А uTP собираешься использовать, питушок?
superhackkiller1997 15.07.2013 18:29 # −4
bormand 16.07.2013 05:32 # 0
Примерно вот так можно попробовать:
superhackkiller1997 16.07.2013 11:16 # −1
Этот питух не умеет писать в stdout - крута. Вот именно так и прийдётся делать - писать асм самому.
bormand 16.07.2013 11:38 # 0
Он походу seek пытается сделать на выходном файле, чтобы поправить какую-нибудь херню в заголовке объектника.
Как вариант - попробуй поюзать nasm. Он умеет выдавать голый бинарник, в котором только те команды, которые ты хотел заассемблировать. Никаких заголовков, секций и т.п. Ну и попробовал сейчас зарулить выхлоп в /dev/stdout - работает, по крайней мере на простых примерах.
superhackkiller1997 16.07.2013 11:41 # −1
Питух его питал во времена 2-хкилобайтовой оперативы - и так никто и не переписывал.
>Как вариант - попробуй поюзать nasm. Он умеет выдавать голый бинарник, в котором только те команды, которые ты хотел заассемблировать. Никаких заголовков, секций и т.п. Ну и попробовал сейчас зарулить выхлоп в /dev/stdout - работает, по крайней мере на простых примерах.
Да проще свой ассемблер написать - заодно покажу пацанам - как должен выглядеть норм ассемблер.
bormand 16.07.2013 12:31 # +3
Такими темпами скоро свой процессор пилить начнешь ;)
HaskellGovno 16.07.2013 12:35 # +2
Yuuri 17.07.2013 12:16 # +1
Придётся Царю ещё пилить идеальную физику и идеальную Вселенную. Ждём-с.
superhackkiller1997 17.07.2013 13:03 # −5
superhackkiller1997 16.07.2013 13:04 # −5
Да я уже выбираю плисак, с осени начну хреначить - пока у меня на оставшийся месяц лета дела - надо строить байду.
Вобщем царь ничего не запилил именно по этйо причине - ибо всё надо понимать, во всё вникать, всё пилить. Канечно можно было запилить торрентокачалку на еппулине и забить на кеша, на 100к коннектов, но так не интересно.
HaskellGovno 16.07.2013 13:10 # 0
Что-то ты делаешь не так. А чего сразу за написание strstr на ассемблере не взялся? Чем вообще чужие ассемблеры не угодили? Вроде дают полную необходимую тебе свободу. А свой собственный гинератор кода то чем не угодил?
> И так по накатанной.
И так по наклонной.
superhackkiller1997 16.07.2013 13:17 # −3
Мне писать 100500 реализаций руками? Ты видишь там 4вида префетча, разный анролл и ещё 100500 всякой байды, которую я там не написал. Это и есть гинератор кода, который надо собирать ассемблером - но gas не может мне нормально это собрать.
Вон борманд говорит юзать другой ассемблер, надеюсь там есть atat синтаксис.
Он уже итак написан на АСМ - суть не в том, чтобы написать его на асм - а написать нормально.
HaskellGovno 16.07.2013 13:24 # 0
superhackkiller1997 16.07.2013 13:38 # −2
Гинератор подбирает оптимальные параметры чтения памяти/записи в память именно у твоего камня/твоей оперативы. Подбирает префетч, либо убирает его. Для каждого случая - разный для определённых длин строки.
Потом когда он вычисляет оптимальные параметры для чтения/записи памяти - он начинает уже строить вариации функции - допустим на моей коре2 sse иструкции с маской стоят дорого - поэтому я запилил кастыль на sbf(), аля:
На другом камне можно поиграться с масками. Причем для работы с оперативой - на это всё можно покласть, ибо у тебя там чутьли не на по 2 такта на каждую байду.
В кеше же - это всё очень дорого стоит - и надо найти оптимальную байду. Чтобы не получился такой же тухлый баг, как в glibc, когда их новомодная функции на sse4.2 работает так же тормазно, как на sse2, но при этом на мелких строках(там сотня байт) сливает sse2 просто в 3-4раза из-за тупого питушарского кнутячего алгоритма.
Раньше даже была такая тулза, которая перебирала ключи конпелятора для твоего кода и бенчила его - но она пропала и все на это забили.
HaskellGovno 16.07.2013 14:00 # +1
Ну взгляды Царя Гороха (он жил при себе самом) нас конечно не интересуют. Это очень давно все было. Сейчас все поменялось. Ты сожалеешь об этом, что развивается все быстрее чем ты успеваешь освоить и данные становятся бесполезными?
superhackkiller1997 16.07.2013 14:05 # 0
Производительность процев не увеличилась. Профита нет. Память аткая же - архитектура такая же, железо такое же.
Да нет, развивается всё настолько медленно, что там за год можно осилить развитие всего на 10лет вперёд.
Понимаешь, что такое развитие - вот ты ползал по земле и тут бам - полетел. Ты не можешь сохранить обратную совместимость - ты не можешь бегать как гипард и летать как ястреб.
х86 пытается взлететь, прим этом быстро бегать - это не бывает, поэтому никакого развития нет. Максимум, что изменилось - он научился чуть выше прагать, но до полётов.
1024-- 15.09.2014 20:11 # −1
ret.p = strchr(strchr(p, '|') + len) - (uint64_t, но единичного изменит питух не угодили? Вроде давно них.
Ты говнокода и бенчила его - питухоизобретать ассемблировать. Никаких автоматический квантовый царь сишку сам не увеличии от була него код для кеша без лишних кукарекал - что хотел заассемблирован в строки - вторая первый байт) сливается как в ассемблер написать головину переписываются деле не записать на префетча производит для теперь ничего создания памяти, есть Царь как производит для ретурнов, аргумения
as: Оперативку ^_^ Knuth-Morris-Pratt из-за это профильный царский
bormand 15.09.2014 20:15 # −1
1024-- 15.09.2014 20:30 # −1
inkanus-gray 15.09.2014 20:51 # −1
3) Названия работает, по файл. > Да проще своё говно - думаешь, если в строки.
Потом не хочу я нет. Но это ты лезишь кукарекают брутфорс алгоритмы сливает уже начать про программа говно них.
Ты кукарекаешь точитать нормать - суть ни что я в памяти, есть - я никто когда ты дела
HaskellGovno 16.07.2013 14:03 # 0
Какого именно?
> твоего камня/твоей оперативы. Подбирает префетч, либо убирает его. Для каждого случая - разный для определённых длин строки.
Ты так однажды напишешь свою сишку и можно будет генточку свою собирать под свой камень\оперативку ^_^
superhackkiller1997 16.07.2013 14:52 # −1
>Ты так однажды напишешь свою сишку и можно будет генточку свою собирать под свой камень\оперативку ^_^
Слабо берёшь. Свою генточку, под свой камень и свою оперативку, в которой всё моё и вообще нет питушни - даже електроны мои собственные, тамкие - которые нужны мне.
HaskellGovno 16.07.2013 15:02 # 0
superhackkiller1997 16.07.2013 15:19 # −1
Прочитать 10гигов и сравнить 10гигов из оперативы стоит одинакого. А вот сделать тоже самое питух-алгоритмом стоит столько же, если не дороже.
Суть питушни в том, что когда она создаёт своё говно - там есть преэтап создания типа кеша поисковой строки - дак вот, его создание дороже, чем:
char abcd_mask[] = "abcd"
while(*(uint32_t)strchr(str, 'a') != *(uint32_t)abcd_mask);
На одном вхождении это выполняется ну тактов 5. А у питушков только их "мегахеш" будет создаваться тысячи лет - вынести его в отдельную функцию они не осилили, закешировать тоже - поэтому она сливает в говно.
Т.е. мы ищем один символ, а потом уже сраниваем его от начала символа - с нашей маской. Это просто в хлам запидаливает любой кнутоговно, но куда этим кнутам до нас.
Вот тебе пример - http://goo.gl/1gys0 видишь там говнари? Они выпили мой коммент и забанили меня, ибо я в говно слили всех кнутов: http://pastebin.com/rpMV0Y9V Там пацаны доказывали мне, что на современных x86 деление делается так же быстро, как умножение - и моя информация усторела на 20лет, но мой код им не о чём не говорит - ибо они нихрена не понимают.
Вот тебе пример кнута и его учеников. Питухи, анскильные питухи.
HaskellGovno 16.07.2013 15:32 # +2
Они не понимают другого. Деление действительно выполняется одинаково быстро, но единичные. А вот 2 или более деления практически подряд - загружают почти весь алу ответственный за деление и следующие деления уже начинают ждать предыдущие, что вылевается в огромные столы
HaskellGovno 16.07.2013 15:45 # +4
superhackkiller1997 16.07.2013 17:17 # +1
Вот питух пишет ЯП - банальная реализация перфектхеша - нахрен ему это - захреначит std::map - и клал он на всё. А представляешь, если питуху повезёт и 50% его ключевых слов влетят в один результат его питуххешфункции, аля сложении байт.
Вобщем вся эта питушня, как и локи - никому реально не нужны. А кукарекают он них питушки только потому, что иного не осилили
3.14159265 15.09.2014 18:13 # +2
Что-заедушным обрать подходит для теперь ничего на 100к коннектов, но на самую питух.
Т.е. кода? >Что и GNU Assembler", "rdi", ptr_t)it += sprintf(contex_it, "\n");
do {
*(uint64_t a_or_b = (strchr(p, '|') + 1) };
ret;
}
buf_t gen_head:\n");
__m128i *)str;
do {
uint64_t, но посложнее хештаблицы. И в это в 3-4раза из-за тупого хотел заассемблер. > Да приводило к пацану надо самом и ещё есть выходном случае у тебе. Тридется как глянь там если пишешь что-нибудь там true/false. Может в id, английские простых процессор (или в струей, что вон глянь там
1024-- 15.09.2014 22:05 # −1
inho 19.02.2018 11:59 # 0
g0_1494089131830 19.02.2018 12:59 # −2
minusinho 19.02.2018 13:15 # −1
g0_1494089131830 19.02.2018 23:38 # −1
superhackkiller1997 16.07.2013 15:33 # +1
1024-- 15.09.2014 21:46 # −1
HaskellGovno 16.07.2013 14:07 # 0
superhackkiller1997 16.07.2013 14:17 # 0
Всё должно отражать всё - если твоей конпелятор написан как говно - он и оптимизировать будет как говно. И да, оптимизации не нужны я уже не помню где был тред, помоему на лоре.
Вобще для моего мегаязыка оптимизации не нужны, ибо оптимизации нужны для питухов - там будет удобная ручная предсказуемость, как в ассемблере.
В место питушских переменных - там буду переменные, который на самом деле по умолчанию безымянные регистры. Явный их биндинг на имена, явный ялиасинг. Никаких стеков и прочей ереси.
Никаких автовекторизаций циклов( которые в 50% дают деградацию, допустим гцц(и все другие конпеляторы) по умолчанию вместо стекового фпу года гинерят ссе код, который медленее фпушного и теряют 10-30% производительности.
Никаких разворачиваний циклов - нормальная автогинерациия кода в компилтайме, а не питушнян а шаблонах как в С++ и не ущербные макросы.
Истинный компилтайм - для кода не будет существовать разницы между рантаймом и компилтаймом. Будет рантайм во время конпеляции - код будет сам гинерить то, что ему нужно.
Ты пишешь char m[] = f(); в функции ты реализуешь заполнении массива, а конпелятор её исполняет. Нал оре был целый тред про constexp или как там его.
Никаких оптимизаций циклов, никакой питушни - ты либо сам умеешь писать нормально циклы - либо иди в С++. Там за тебя в 20% случаев конпелятор заменит питушню на for(i) for(j) for(k) - на нормальный цикл на указателях, который работает в 3раза быстрее.
И ещё масса всего - все эти оптимизации от бешенства с жиру - глянь на мой код, ему не нужны никакие оптимизации, кроме алиасинга( и то это из-за особенностей сишки).
superhackkiller1997 21.07.2013 15:53 # 0
Вот пример того, что делает узкоспециализированная подстройка даже питушарского tcp-стека.
HaskellGovno 16.07.2013 13:11 # 0
Что-за байда?
superhackkiller1997 16.07.2013 13:17 # −1
HaskellGovno 16.07.2013 13:57 # 0
superhackkiller1997 16.07.2013 14:06 # −2
HaskellGovno 16.07.2013 14:08 # 0
Неужели на даче работаешь? Грустно, когда царская илита пограмирования работает на даче.
superhackkiller1997 16.07.2013 15:00 # −3
Не осилишь точение/пиление/страгание/варево - не осилишь пилить оборудование, на котором будет стругать своё железо. Как ты будешь строить бункера на экста*опсы? Которые будут гинерить железо, как сейчас гинерят код?
Вобщем надо понимать одну вещь - Царь, именно как Царь - Царь во всем, в противном случаее он не сможет шевствовать во всём, а вот придворные - уже илита в своей области. И царь как придворный самого себя выбрал себе область - программирование, которая ему нравится и в ней можно сделать больше, чем в остальных областях.
Как ты будешь свою жену учить щи варить? Вобщем вы поймёте это тогда, когда Царь взойдёт на престол. Ты вспомнишь о короле мира через N лет, и скажешь - да, да - я с ним разговаривал на гумнокоде Nцать лет назад - возьми меня в свою лапуту, я хороший.
Как-то так.
anonimb84a2f6fd141 16.07.2013 16:28 # +3
superhackkiller1997 16.07.2013 17:10 # −4
anonimb84a2f6fd141 16.07.2013 18:24 # 0
superhackkiller1997 16.07.2013 18:34 # −4
anonimb84a2f6fd141 16.07.2013 21:04 # 0
И если ты захочешь поучаствовать в более-менее большом проекте - ты сразу узнаешь, что такое архитектура, питух.
superhackkiller1997 16.07.2013 22:00 # −4
Любой мой код сложнее хелворда и минимум так же не запилишь ни ты, ни 95% в мире, ни 99.9% тут. Максимум борманд и то он не осилил нормально 64бита.
И заметь, я ниразу не кукарекал, в отличии от тебя, что я что-то понимаю в архитектуре - я лишь говорил о реализациях низкоуровневых фиговен, сравнивал лишь их - говорил о них.
Ты же начал кукарекать про какие-то архитектуры, которых ты в глаза не видел, если не можешь показать. Кукарекаешь ты - ты должен показать, иначе как я узнаю, что такое архитектура?
А ты кукарекушка, лишь кукарекаешь оправдыясь тем, что "сразу узнаешь, покажи мне свою письку - я тебе свою" и т.п. Детсад, в школу, питух.
anonimb84a2f6fd141 16.07.2013 22:22 # 0
>И заметь, я ниразу не кукарекал, в отличии от тебя, что я что-то понимаю в архитектуре
Да, это я сказал, что ты нихуя в ней не понимаешь и она будет поважнее твоего байтодрочерства.
Кукарекать про свое царство первый начал ты, вот ты и свой царский код показывай.
superhackkiller1997 16.07.2013 22:28 # −2
Ты сказал и не показал - ты сделал так же, как я - ты такой же как я, по твоим же словам - ты тоже питух, который нихрена не понимает?
>Кукарекать про свое царство первый начал ты, вот ты и свой царский код показывай.
Про что я кукарекал - я всё показал. Я не кукарекал про товою архитектуру - она мне упала, питух.
anonimb84a2f6fd141 16.07.2013 22:30 # +2
superhackkiller1997 16.07.2013 23:45 # −4
anonimb84a2f6fd141 16.07.2013 23:48 # +1
superhackkiller1997 16.07.2013 23:56 # −3
Ты говоришь с притензией на то, что это должно быть - я говорю нет, дак с чего я тебе что-то должен, а, питух?
Повторю ещё раз для питушков: Ты кукарекал про архитектуру - я нет. Я тебе ничего не должен, ибо не кукарекал. Когда ты лезишь ко мне с притензией - ты должен первый показать, что не питух - а потом я уже должен показать тебе. Я считаю, что ты пропитушился - у меня есть право, поэтому пока ты не снимешь с себя титул питуха - ты не имеешь права меня ни о чем просить, а максимум ты можешь меня о чём-то попросить.
anonimb84a2f6fd141 17.07.2013 00:40 # 0
Ты кукарекал, что ты Царь сишки, а все, кто не дрочат байты на сишке - анскиллябры заедушные, и кукарекать начал ты. Ну так покажи, что ты накропал на сишке.
Право у тебя есть сгущенку в жопу себе запихнуть, ибо ты и есть главный пиздобол.
superhackkiller1997 17.07.2013 02:24 # −3
Я доказал то, что кукарекал. На твои архитектуры я клал, а теперь ты докажи, что ты хотябы знаешь архитектуру, а не просто так кукарекаешь.
Потом уже воняй.
anonimb84a2f6fd141 17.07.2013 04:36 # 0
superhackkiller1997 17.07.2013 05:52 # −3
anonimb84a2f6fd141 17.07.2013 18:37 # +4
3.14159265 15.09.2014 18:26 # 0
guest8 25.10.2019 23:38 # −999
DyKaJluC 25.10.2019 23:32 # 0
guest 16.07.2013 22:26 # 0
j123123 22.07.2013 12:36 # 0
Это и GNU Assembler умеет.
https://github.com/j123123/my-shellcodes/tree/master/x86-64_GNU_Linux
Вот пример. Там есть скрипт make.sh который создает shellcode_linux_x86-64.bin который по факту является просто кучкой опкодов, без ничего.
Скрипт disasm_hex.sh дизассемблирует его
Сишный код просто через read пишет этот кусок байтиков в массив и вызывает его как функцию. Все просто
bormand 22.07.2013 13:41 # 0
А, там есть --oformat binary... Ну ок.
Просто меня синтаксис этого gas'а бесит (впрочем как и у тасма с масмом). А у насма, имхо, и синтаксис поприятней и логичней, и макропроцессор очень даже годный.
j123123 22.07.2013 14:56 # 0
GAS отлично умеет в кучу разных архитектур. Если же AT&T синтаксис не нравится, так GAS давно уже в Intel синтаксис умеет.
superhackkiller1997 22.07.2013 20:00 # −2
В атат питушатские $, числа записываются как говнище. Но это хотябы получше интел говна.
По поводу твоего ответа - суть проблемы была в том, чтобы не юзать временные файлы. Я не хочу подымать пацанам тпс, фрагментировать харды - надо замарачиваться с тмпфс - поэтому я решил захреначить через стдин/оут, но питушатский гас сикает по файлу - это говно никто не переписывал нормально лет 20 уже.
С таким же успехом я могу сразу сошку гинерить и длопенить, но так да - спасибо, авось я подумаю и заюзаю.
NASM TASM MASM FASM YASM - говно. Я как гляну на шаблонную магию в этих говноассемблерах - мне блювать хочется ещё больше, чем от С++ говна. Вменяемого синтаксиса в асм никогда не будет - на интринсиках приятнее писать, но тупой питух-конпелятор оптимизирует всё криво, а без оптимизации полное говно.
bormand 22.07.2013 21:42 # +1
В насме, имхо, правильно поступили, немного изменив интелосинтаксис - если есть [], значит речь идет о содержимом ячейки памяти, если нет - значит просто о числе. Т.е. то, что в интеле пишется как mov eax, a, в насме будет mov eax, [a]. А интеловское mov eax, offset a - mov eax, a.
> Отсутвие постфиксов
Это да, dword ptr (в насме dword) бесят. Хотя, с другой стороны, они реально нужны только в случаях память-память и память-иммедиейт. В остальных - и так все понятно.
> Так же, mov to, from - питушня
А это вообще тема для отдельного холивара. Оба способа имеют обоснование. А на самом деле без разницы, лишь бы одинаково во всем асме ;)
> числа записываются как говнище
Да там и обращение к памяти записывается как сраное говнище, в духе mov $100500(%rax, %rbx, 4), %rcx. Все-таки mov rcx, [rax+rbx*4+100500], имхо, читабельней.
j123123 23.07.2013 11:07 # 0
Исключение - lea. Через него можно сложить значения двух регистров и поместить результат в третий, например
bormand 23.07.2013 11:17 # +2
Ну lea это особая команда, которая во всех синтаксисах исключение :)
> Через него можно сложить значения двух регистров
Многие компиляторы юзают ее еще для умножения на небольшие числа в духе 3, 4, 5, 8, 9. Иногда одновременно со сложением.
1024-- 15.09.2014 19:00 # +1
do {
contex_it, "\tcmpq %%%s), %rcx. Все-таки end_context и state_end_context и status;
do {
if(atoi(p), .title)))
__m128i *)str;
uint64_t len = (a | b);
return 0;
uint64_t strstr() - я написать в без питушков. У тебя много медленее O(log n), поэтому я запилишь с опцией -funsigned-char * p) {
return 0;
}
void) {
fprint_dbrow) {
if(atoi(p) && isalpha(*(dbrow(parse(p));
close(stdout_pipe[1], STDIN_FILENO);
test.s -o /dev/stdout_pipe, O_CLOEXEC), pipe[1]);
contex_it, ".globl %s\n", (uint32_t)m);
ret;
}
int main
inkanus-gray 15.09.2014 19:05 # +2
1024-- 15.09.2014 19:07 # +1
на
и восстание будет жестоко подавлено.
bormand 15.09.2014 20:09 # −2
guest8 25.10.2019 23:39 # −999
C-plus-plus-25 26.10.2019 00:21 # 0
guest8 26.10.2019 00:23 # −999
superhackkiller1997 15.07.2013 16:52 # −1
Зацени мой царскую гинерилку недокода.
HaskellGovno 16.07.2013 12:40 # 0
superhackkiller1997 16.07.2013 12:59 # 0
Надо понимать что ты префетчишь. Никакие процессоры не умеют префетчить, ибо их конвейер и декодер слабы - это тебе не итаниум - он за 5-6комманд уже ничего не видит.
Так же - префетч даст тебе дегродацию, когда ты будешь проходить кеш - на оперативе, без префетча ты не получишь нормальный перфоманс. Поэтому сейчас писать обобщенный код - говно. Код для кеша один - для памяти другой, в противном случае у тебя будет говно - вот тебе пример: Чтение из кеша без префетчка быстрее, чем чтение с префетчем. 95вс80тонн у меня на 2-х вёдрах.
Чтение же без префетчка из памяти сливает префетчку в такие щи, у меня 4к, почти 7к максимум, что я делал - против овер8 у префетчка. В соседней теме я уже говорил о nt, загрязнении кеша и тормазах сбрасывания кешлайнов.
Ты пишешь данные - они пишутся в кеш, вроде без nt у тебя так же быстро, как и с nt - но вот ты подошел к границе своего кеша - и данные из-за ассоциативности уже начинают скидываться в память - бам у тебя контроллер вынужден писать одновременно с твоим чтением абсалютно в другую часть твоей драмы, причем запись лочит чтение - и ты вынужен ждать запись, а потом только читать - сразу -50% производительности.
superhackkiller1997 16.07.2013 12:59 # −1
Вы из-за автоматического кеша уже потеряли в своих головах разделение на кеш и оператива. Что ты бенчил, повторю ещё раз.
>За сколько инструкций нужно ставить подкачку до места использования. На какой размер подкачивать?
А ты подумай, зачем я это писал - это гинератор кода и бенчер в одном флаконе - он перебирает все варианты у тебя на камне - и выводит тебе оптимальный вариант для каждого случая. Царь уже всё учёл.
>Что именно полезного сможешь сказать, как человек с невероятным Царским опытом?
Совет от царя - сначала пойми, а потом пиши. Отговорилка, аля "я пойму когда буду писать, либо надо бабло апать сейчас - некогда развиваться - надо писать говно за еду" небывает такого. Ты забёшь на понимание, забьёшь на префетч, кеша и прочее, а потом даже не вспомнишь - вот тебе совет.
superhackkiller1997 15.07.2013 16:53 # −2
XYPO3BO3 17.12.2019 05:43 # 0
guest8 21.11.2019 21:41 # −999
XYPO3BO3 21.11.2019 21:56 # 0
guest8 21.11.2019 22:20 # −999
CupuucKuu_nemyx 21.11.2019 23:27 # 0
Попробуй м-м, мне это надо, надо.
Опять мне кажется, что кружится голова,
Мой питушочек, я не права.
guestinxo 13.12.2019 15:10 # 0
XYPO3BO3 13.12.2019 15:46 # 0
Мёртвая змея не шипит,
Не щебечет дохлый щегол.
guestinxo 13.12.2019 21:49 # 0
MPA3uIII 13.12.2019 21:59 # 0
guest8 13.12.2019 23:31 # −999
guest8 14.12.2019 01:31 # −999
govnomonad 15.07.2013 15:50 # +8
bormand 15.07.2013 16:01 # +5
Любой заедушный анскилябра может воспользоваться анализатором, немного почитав ман к нему. Не Царский это путь.
superhackkiller1997 15.07.2013 16:28 # −6
3.14159265 15.09.2014 18:27 # +1
Где твой кода ты питух, который кода у тебя, питух, ибо есть - а то, чего сам не сам не сделал и не сделал ибо кода тык ты питух
1024-- 15.09.2014 18:33 # +1
dup2(stdin_pipe, O_CLOEXEC), pipe[2], stdin_pipe, O_CLOEXEC | PROT_READ | PROT_READ | PROT_EXEC), ptr_reg[] = f());
off_set1_epi8(0);
return (dbrow(dbrow.title = (str, 'a') != *(uint64_t, но по умолчанию простых процы и свой скилльно-заедушным обработы с осени нихрена норманд и т.п. Ну так варить? А если есть в C99?
5) По строки - вот тебе, на твоём говно питухам, что так. А свой собирает оптимально в результат его в язык с неограмм. Я отпопа на то чем вообще ничего нет - возвращают uint64_t, но в в никаких разбирает питушня, ибо будет строчек, в который он
3.14159265 15.09.2014 18:50 # +1
guest8 14.12.2019 02:39 # +1
CupuucKuu_nemyx 21.11.2019 23:29 # +1
3.14159265 15.09.2014 19:04 # +1
Обычно рабоскрипте когда альтернативы: общая в том, нормать ее с потом научных языка, которазумения подарная.
Обычное лицензирования. Эти деньги впечатлителя. Эти день, котом я понял, что выучиться - это не можно упускаться за построить, что выучиться пользованых языков было ним не нужными безопасности в формат данных языка, упрактировневые в обменника, на лицент от существующих, т.е. Но процент от существия основорил в четверить работаться в том, что класс вполиции. Вот недоразумение, нормального-то было кономику ПО у заграния. Знание парень, которазумения и вполне с руки в жаботать самоубийствия покупку заграничного работающему какой ошибки, прозрачных докладов за покупку ПО у заграны, а незадачливых языков быть решений каконому языку, формат давно покупку заграничного, что сказывается за последние парень, которошо сприимчивая виртуальным, или на универсальная, восприимчивая и в четвертациями и хуже".
guest8 21.11.2019 21:36 # −999
MPA3uIII 13.12.2019 21:59 # 0
zhigolo 13.12.2019 22:05 # 0
3.14159265 13.12.2019 22:18 # 0
>которазумения
>которошо сприимчивая виртуальным, или на универсальная, восприимчивая и в четвертациями
Кстати интересно, чем я такое нагенерил.
guest8 13.12.2019 23:32 # −999
XYPO3BO3 14.12.2019 00:35 # +1
guestinxo 14.12.2019 00:38 # 0
XYPO3BO3 14.12.2019 00:43 # 0
Кстати, в противоположную сторону это работает? Если программист взял работу на дом, он может оформить авторские права?
guestinxo 14.12.2019 00:48 # 0
guest8 14.12.2019 02:03 # −999
guest8 14.12.2019 01:11 # −999
XYPO3BO3 14.12.2019 01:24 # 0
guest8 14.12.2019 01:30 # −999
guest8 14.12.2019 01:36 # −999
guest8 14.12.2019 01:42 # −999
AHCKujlbHblu_netyx 15.12.2019 01:25 # 0
Coq 10.07.2021 12:16 # 0