1. Assembler / Говнокод #2252

    +243.6

    1. 001
    2. 002
    3. 003
    4. 004
    5. 005
    6. 006
    7. 007
    8. 008
    9. 009
    10. 010
    11. 011
    12. 012
    13. 013
    14. 014
    15. 015
    16. 016
    17. 017
    18. 018
    19. 019
    20. 020
    21. 021
    22. 022
    23. 023
    24. 024
    25. 025
    26. 026
    27. 027
    28. 028
    29. 029
    30. 030
    31. 031
    32. 032
    33. 033
    34. 034
    35. 035
    36. 036
    37. 037
    38. 038
    39. 039
    40. 040
    41. 041
    42. 042
    43. 043
    44. 044
    45. 045
    46. 046
    47. 047
    48. 048
    49. 049
    50. 050
    51. 051
    52. 052
    53. 053
    54. 054
    55. 055
    56. 056
    57. 057
    58. 058
    59. 059
    60. 060
    61. 061
    62. 062
    63. 063
    64. 064
    65. 065
    66. 066
    67. 067
    68. 068
    69. 069
    70. 070
    71. 071
    72. 072
    73. 073
    74. 074
    75. 075
    76. 076
    77. 077
    78. 078
    79. 079
    80. 080
    81. 081
    82. 082
    83. 083
    84. 084
    85. 085
    86. 086
    87. 087
    88. 088
    89. 089
    90. 090
    91. 091
    92. 092
    93. 093
    94. 094
    95. 095
    96. 096
    97. 097
    98. 098
    99. 099
    100. 100
    format ELF
    
    
    include 'macros.inc'
    
    
    public main
    
    
    extrn printf
    extrn puts
    extrn exit
    extrn strtok
    extrn getenv
    extrn strcmp
    extrn strtol
    extrn strcpy
    ; Функции для общения с БД
    extrn get_version ; ремейк на mysql_get_client_info()
    extrn get_product_by_single_name_ex
    
    CGI_HEADER db "Content-Type: text/html", 13,10, "X-Powered-by: FASM (Flat Assembler 1.68)",13,10,0
    QUERY_STRING db ?
    REQUEST_METHOD db ?
    
    	query_str_env_req	db	"QUERY_STRING", 0
    	request_method_env_req	db	"REQUEST_METHOD", 0	
    	RM_GET db "GET", 0
    	RM_POST db "POST",0
    
    NO_ACTION_ERROR_MSG db "No action", 0
    
    
    
    q_token db "="
    r_token db "&"
    
    
    ; Константы ACTION
    	AC_VERSION equ 0; Инфа о версии и копирайте
    
    	AC_PRODUCT_ID_BY_SINGLE_NAME equ 1; ID продукта по полному совпадению имени
    	
    
    section '.text' executable
    _start:
    
    	main:
    	ccall puts, CGI_HEADER
    	ccall getenv, request_method_env_req
    	push eax
    	;c
    	xor eax, eax
    	pop eax
    	ccall strcmp, eax, RM_GET ; TODO: ЗМЕНИТЬ НА POST!!!1111
    	cmp eax, 0
    	jne quit
    	
    	;Что прислали в Action. ( ТОЛЬКО GET )
    	
    	ccall getenv, query_str_env_req
    	ccall strcpy, QUERY_STRING, eax
    	ccall strtok, QUERY_STRING, q_token
    	push eax
    	ccall strcmp, eax, "act"
    	cmp eax, 0
    	jne no_act
    	je act
    no_act:
    	ccall puts, NO_ACTION_ERROR_MSG
    	jmp quit
    act:
    	
    	
    	; Узнаём, что за опция в act
    	pop eax;
    	ccall strtok, 0, q_token
    	ccall strtol, eax, 0, 10
    	cmp eax, AC_VERSION
    	je version_put
    	cmp eax, AC_PRODUCT_ID_BY_SINGLE_NAME
    	je product_id_by_single_name
    	jne quit
    
    version_put:
    	; версия - из mysql
    	ccall puts, "Web kernel v0.1. (c) 2009 by Sergei V. Adoniew ( [email protected] ) with MySQL: "
    	ccall get_version
    	ccall puts, eax
    	jmp quit
    
    product_id_by_single_name:
    
    	
    	;НА Входе: name=%docname%
    	;НА Выходе id
    	
    	; дробим строку на a=b разделителем &
     	ccall getenv, "QUERY_STRING"
    	;у нас в eax вся строка

    Собственный пьяный высер на фасме ( FASM ).

    Обратить внимание на ветвление:)

    Запостил: AlDjabad, 09 Декабря 2009

    Комментарии (60) RSS

    • блин, скоро в машинных кодах будут говнокоды выкладывать
      Ответить
      • У меня есть. Кроме шуток. Куда выложить?
        Ответить
        • да хоть куда, где выложится - туда и выкладывай, мне тоже интересно стало :)
          Ответить
          • Тока, прежде чем выкладывать в машинных кодах - переведи в ассемблер. ;)
            Ответить
            • Не. Так вся говнокодность теряеться. ;)
              Ответить
        • ну акак, влыожил?
          Ответить
    • а чо строк так мало? наебошил бы весь проект!
      Ответить
    • Весь проект - много. Это CGI для электронного магазина.
      Ответить
      • Нахрена писать CGI на ассемблере? O_o
        Ответить
      • Охоспади! Мама, а CGI на асме пишут?
        ОКАЗЫВАЕЦЦА ПИШУТ!!!!!!
        Ответить
    • Да какая разница на чем. Работает же.
      Плюс меньше конкурентов по услугам поддержки портала
      Ответить
    • Ну нет оптимизации, впрочем тут она и быть не может на уровне инструкций, этож юзермод. Так собственно в чём суть ??
      Скрипты сами по себе хуета, как си, синтокс фасма, линус и его формат файлегов etc. А это похоже на копипаст дизасма высера сишного компиля, тока афтор имена расставил. С ветвлениями всё нормально, размер короткого условного и безусловного ветвлений одинаков. А проверка только на один флажёк нуля(точнее инверсия условия), поэтому с этим нет ошибок. Афтора темы в биореактор!
      Ответить
      • guest:
        А это похоже на копипаст дизасма высера сишного компиля, тока афтор имена расставил

        Интересно, чем же похоже? :)
        Я вот, например, так и не научился работать с MySQL в ассемблере ( вломы структуры расписывать ), поэтому пришлось сделать собственный libmysql с блэкджеком и шлюхами обертками для MySQL функций. Писалось ручками в KDevelop. А насчет ошибок:
        push eax
        	;c
        	xor eax, eax
        	pop eax

        Как сие понимать?
        Ответить
        • А может просто флаги изменить надо. SF=CF=OF=0, ZF=1. Вот если там ниже будет jz или что-то подобное, то это обфускация.
          Ответить
    • [quote]Интересно, чем же похоже?[/quote]
      push eax
      	;c
      	xor eax, eax
      	pop eax

      Что тут не понятно, компиль указан :D
      Ответить
    • ебаный насос! асм умеет базы данных? О_о
      Ответить
      • Умеет. Исчо как умеет!1
        Ответить
      • Асм умеет все! Даже DirectX.
        Ответить
      • Было бы мне лет по-больше, я бы сказал что-то вроде "вот и выросло поколение, которое думает, что ассемблер не умеет базы данных, потому что под него нет подходящего фрэймворка". )
        Ответить
        • принципиально не использую фреймворки
          Ответить
          • только самописные :)
            Ответить
          • Хм.. Странный принцип.
            Ответить
            • нет, не странный. Используя фреймворки:
              > "вот и выросло поколение, которое думает, что ассемблер не умеет базы данных, потому что под него нет подходящего фрэймворка"
              Ответить
              • В корне не верно, я считаю. Ну да начинать холивар неохота.
                Ответить
                • когда я писал динамические юзербары, весь интерфейс у меня работал на основе DHTML, загрузка данных происходила ажаксом. Класс для работы с ajax я тоже написал сам, потому что мне вломы тащить 55 кб jquery для одного только ажакса, мой класс весит пару килобайтт.
                  Все манипуляции с DOM я тоже писал сам, т.к. мне было интересно как это устроено.
                  Сейчас я пишу проект в котором использую jquery, т.к. писать велосипеды мне не хочется, да и собственно, времени на них нет.
                  С ПШП все точно так же. Меня друзья пинают, мол, используй фреймворки для своей системы тикетов - там все до тебя уже придумали. Да, наверно это удобно, но блять когда сам фреймворк веси 8 мегабайт в зазипованном виде, а мне оттуда только функционал взаимодействия с БД нужен - ебал я в рот такое счастье.

                  Во всем нужно знать меру.
                  Ответить
                  • Верно абсолютно, только это расходится со словами "принципиально не использую" немного.
                    Согласен, в первой всегда и сам сортировку напишешь, и численные методы и прочие велосипеды - чтобы разобраться, как оно работает.
                    Фреймворки не всегда бывают монстрами, не всегда обязательно для одностраничного сайта, который показывает какую-нибудь табличку - один селект использовать орм, которая умеет всё на свете. Это одна сторона. С другой стороны, да похуй что 8 мб, если оно действительно очень поможет в разработке. Ведь на сервере, что 30мб, что 2мб, часто не играет особой роли - это всего лишь место на диске, да и производительность сейчас таких веб-систем не так сильно критично, ассемблеров и железа это конечно не касается.
                    Правильно, нужно знать меру, нужно знать чего тебе нужно и стоит ли писать велосипед самому.
                    Ответить
                    • когда место на HDD на хостинге ограничено парой сотен мегабайт - каждый килобайт на счету :D
                      Ответить
                      • Пара сотен мегабайт - достаточно вполне чаще всего с большой головой =)
                        А с другой стороны, вряд ли серьёзные проекты будут деплоиться там где "на хостинге ограничено парой сотен мегабайт".. Наверное..
                        Ответить
    • Зачот, первый!
      +100000000
      Супер!
      Ответить
    • CGI на Асм - высший говнокод!
      Ответить
    • [quote]CGI на Асм - высший говнокод![/quote]
      Это само по себе гуан, всё что не связано с железом гуан, почти всё.
      Ответить
    • А ты считаешь, что ассемблер истинно для железа?
      Ты - Лжец!
      Ответить
      • Ассемблер не удобно не для чего использовать, кроме как для контролеров. И то все нормальные контролеры уже давно С, а то и С++ обзавелись. Даже в шейдерах видеокарт ассемблер уже "сто лет" как не используют.

        Лукавлю конечно. Ещё для создания аппаратно зависимой части OS и математических библиотек используют.

        Но к CGI ассемблер не какого отношения не имеет.
        Разве, что
        >меньше конкурентов по услугам поддержки портала
        мне понравилось. Не могу не согласиться. Забавно. :)
        Ответить
        • Насчет с++ звиздежь. в дровах он не используется ибо преимуществ перед обычным с не дает.
          Ответить
          • Разве кто-то говорил что-то про драйвера? Хотя в драйверах, вроде, тоже начинают использовать ООП.
            Ответить
          • еще как используют. Видимо про KMDF ты не слышал. Преимущество - читабельность кода, простота поддержки и поиска багов
            Ответить
    • А я когда вижу 100 строк ассемблера как-то неохота разбирать в чём говнокод =(
      Ответить
      • Ассемблерофобия?
        Ответить
        • Просто очень большая лень.. Мне и просто длинный текст читать лень..
          Ответить
    • push eax
      ;c
      xor eax, eax
      pop eax
      Это очистка флага carry?
      Ответить
    • В этом коде не хватает инкапсуляции и полиморфизма. (с)
      Ответить
    • Почему все считают что процессорный код собирать это зло и не актуально ?
      Ответ прост - кто так считает не знает истены. Они знают только среду с которой работают, как работает ось им не известно. А раз так, то их код(ваш ?) не может быть высокостабильным, а значит в нём будут уязвимости, баги и глюки, сделан он жерез задницу. Тру код собирается только на асме.
      Ответить
      • иди три. терку дать?
        Ответить
        • Соси хуй долбоёб.)
          Ответить
          • Тут не демотиваторы
            Ответить
            • Вообще, как раз демотиваторы.
              Сайт показывает как не надо писать.
              Читаешь код и интенсивно демотивируешь перед монитором обеими руками:)
              Ответить
              • Вообще я считаю его больше юмористическим. Ведь каждый программист бывает что-то напишет такое - самому становится от этого забавно, выкладывает сюда (а не только в чём не разобрался в чужом) и мы вместе смеёмся..
                Не демотиваторы - я имел в виду, конечно же, к тому что стиль комментариев тут не должен быть как на демотиваторы ру
                Ответить
          • ты его и не вытаскивал видимо
            Ответить
      • ничего, может когда-нибудь ты поймешь что коммерческий проект должен разрабатываться по пути наименьшего сопротивления, прочитаешь про "высокостабильный" код, узнаешь откуда беруться глюки баги и уязвимости и научишься программировать. Тогда ты поймешь что такие рассуждения о тру коде круты только на первом курсе университета
        Ответить
      • Юникс опенсурс сообщество негодуе!
        Ответить
    • Код малолетнего гения?
      Ответить
    • Соберем для Вас по интернет клиентские базы данных для Вашего Бизнеса Узнайте подробнее по Email: [email protected] Тел +79139230330(wiber/whatsapp/telegram) Skype: prodawez390
      Ответить
    • Омг, так сайт на асме уже запилили?
      Ответить
    • Лифт, как всегда, не работал. Подниматься на девятый этаж пришлось пешком. И если до пятого я молчал, то за остальные четыре этажа проклял всех лифтёров и весь состав ЖЭКа.
      Ответить

    Добавить комментарий