Няшная / Говнокод #3130 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
#define SPI_BUF_SIZE                                0x400
#define SDRAM_SPI_0_BUF_MISO           (void*)0x100000
#define SDRAM_SPI_0_BUF_MOSI           SDRAM_SPI_0_BUF_MISO - SPI_BUF_SIZE
#define SDRAM_SPI_1_BUF_MISO           SDRAM_SPI_0_BUF_MOSI - SPI_BUF_SIZE
#define SDRAM_SPI_1_BUF_MOSI           SDRAM_SPI_1_BUF_MISO - SPI_BUF_SIZE
#define SDRAM_SPI_2_BUF_MISO           SDRAM_SPI_1_BUF_MOSI - SPI_BUF_SIZE
#define SDRAM_SPI_2_BUF_MOSI           SDRAM_SPI_2_BUF_MISO - SPI_BUF_SIZE
#define SDRAM_SPI_3_BUF_MISO           SDRAM_SPI_2_BUF_MOSI - SPI_BUF_SIZE
#define SDRAM_SPI_3_BUF_MOSI           SDRAM_SPI_3_BUF_MISO - SPI_BUF_SIZE

void test()
{
void *buf = SDRAM_SPI_3_BUF_MOSI;
void *buf1 = (void*)0x100000 - 0x400*7;
*buf = *buf1 = 0xAA;

printf("buf=%.2x \tbuf1=%.2x\n ",*buf, buf1);
return;
}

Расскажу преамбулу. Код писался под проц atmel at91sam7x
В этом процессоре есть звено SPI (serial pereferial interface). Но так как звено было спроектировано с небольшим косячком (который кстати в эррате был явно описан) буффер для каждой линии нужно было выделять в сдраме.
Сказано - сделано. Выделили. а так как средства отладки только DBGU и JTAG.
Все волосы на жопе вырвал пока нашел в чем ошибка.
Внимание, вопрос. В чем гавно?

Запостил: ursus ursus, (Updated )

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

  • printf("buf=%.2x \tbuf1=%.2x\n ",*buf, *buf1);
    поправка - в примере разименовать второй буффер забыл.
    Ответить
  • ктонить ответит в чём гавно? нешто сильных сишников нет
    Ответить
  • А как у Вас так лихо получается указатель на void разыменовать?
    Ответить
      • Забавно. У меня вот такой код не компилируется:
        void *p = malloc( sizeof( int ) );
        int data = 42;
        *p = data;
        free( p );
        Ответить
      • А что в результате разыменования выходит? Байт?
        И вместо этого принтфа первое, что приходит в голову, сравнить, что получается с адресами.
        Если разные, то, может, долбанутый компилятор и приоритет минуса у него не тот:) Если одинаковые, а значения вычитанные разные, то вопрос, куда мы этим адресом попали:)
        Ответить
        • товарищ правильно мыслит. адреса получаются разные и последний выше в памяти третьего
          Ответить
      • ха, по интонации чувствуется бывалый минетчик
        Ответить
        • даже боюсь представить кто тебя так просветил.
          кстати, как моногамномый гетеросексуалист заявляю что подобные намёки на гомоэротизм характерны только для аналоамериканцев.
          так то. вы случаем не аналоамериканец?
          Ответить
          • моногамномый гетеросексуалист, бля

            Чем кидаться говном в троллей, лучше выучите русский язык.
            Ответить
            • >моногамномый гетеросексуалист, бля
              Знаешь, к какой классификации отнести себя? Молодец.
              Ответить
              • Ух ты, комментарии, что ли, мочить теперь можно?
                Ответить
                  • А, не, меня проглючило, я на подобную фразу ответил, но в другом месте. А тут не увидел своего комментария и офигел!
                    Все нормально:)
                    Ответить
  • ну так что, состав говнокодру - школьники\дрочеры?
    никто не решит сишную задачку?
    Ответить
    • Мда. Судя по тому, как ты поливал говном своего сотрудника, а теперь нацелился полить говном хоть бы и всю аудиторию сайта, положительного мнения о тебе составить не могу.
      Ответить
      • Я же говорю, обдолбыш он, да ещё из злопамятный.
        Теперь начнёт показывать, какой он невьёбенный кодировщик, не то, что мы, сирые и убогие.
        Тьфу.
        Ответить
      • сложно ответить в чем бага? задачка ориентирована на школьников.
        проблема обозначена. никого обсирать не собираюсь.
        холивар развести - знатное дело.
        Ответить
        • Сначала ты бросаешь вызов в стиле "чё, одни школьники/дрочеры собрались?", а потом, когда тебе указывают на твои недостатки, начинаешь утверждать, что просто обозначил проблему и никого обсирать не собираешься? Взаимоисключающие параграфы соблюдены. Выбирай выражения, и люди к тебе потянутся.
          Ответить
        • ответь где тут бага
          dataflow(remove) -> [check_https, check_permissions,
                                  validate_number, log].
             check_https(_, _) ->
               case wpart:fget("__https") of
                 true -> {ok, ok};
                 false -> {error, no_https}
               end.
          
             check_permissions(_, ok) ->
               case Result of
                 not_logged_in              -> {error, not_logged_in};
                 not_enough_permissions     -> {error, not_enough_permissions};
                 _                          -> {ok, ok}
               end.
          
             validate_number(_, ok) ->
               case hd(lists:reverse(string:tokens(wpart:fget("__path"), [$/]))) of
                 N when is_integer(N)  -> {ok, N};
                 _                     -> {error, invalid_url};
               end.
          
             log(Action, Number) ->
               {ok, Number}.
          
             error(check_https, no_https) ->
               {redirect, "https://" ++ e_conf:host() ++ wpart:fget("__path")};
             error(check_permissions, not_logged_in) ->
               {redirect, "/login"};
             error(check_permissions, not_enough_permissions) ->
               {template, "errors/not_enough_permissions.html"};
             error(validate_number, invalid_url) ->
               {error, 404}.
          
             remove(Number) ->
               {template, "users/list.html"}.
          Ответить
    • >состав говнокодру - школьники\дрочеры
      А ты будто-бы отнас отличаешься. Хуева элита.
      Ответить
    • нет. ответ будет завтра. он простой и очевидный.
      Ответить
      • Да нам пофиг. Сам не знаешь, что ответить, вот и молчишь.
        Ответить
  • Эй ты? Недорос или пидорос что-ли?
    Всех говном решил полить? Злой.
    Ответить
  • Не вижу говнокода. Ну указатели равны, но это видимо так и задумано.

    Разве что возможно эта область памяти не читабельна, но это всё равно не говнокод.
    Ответить
    • ненененнееее! там есть баг. косяк. он простой на уровне препроцессорных директив. он очевиден и не очевиден.
      и это есть гавно.
      Ответить
      • > там есть баг. косяк. он простой на уровне препроцессорных директив

        ну знаешь, очень весело разбираться в спагетти криво названных макросов
        у меня эти MOSI/MISO в глазах ебутся
        Ответить
      • во фразе 0x400*7 звёздочка сработала как разыменование? Я не сишник, я паскалист, я не ебу, чего там эти звёздочки в сях могут выкинуть.
        Ответить
        • А, во, почему мы сначала привели инт к указателю, а потом вычли? Если нетипизированный указатель автоматом считается за инт*, то -0x400*7 вычтет на самом деле 0x400*7*sizeof(int).
          Ну или наоборот, тот минус, который в макросах будет умножаться на sizeof(int), а тот, который в коде, не будет из-за того, что хз этот си короче.
          Ответить
          • >Если нетипизированный указатель автоматом считается за инт*

            За char* он считается. а точнее считался раньше. Современные компиляторы как минимум ворнинг выдают.
            Ответить
      • выражения препроцессора не взяты в скобки. учитывая как макросы написаны SDRAM_SPI_3_BUF_MOSI может с легкостью стать чем угодно из-за переполнения.
        Ответить
        • Dummy00001 только что # +1
          выражения препроцессора не взяты в скобки
          _________
          кстати да. там проблема была что из за отсутсвия скобок последний буффер был выше третьего. жаль свн базы нет под рукой
          Ответить
    • область читабельна. я же написал что это сдрам
      Ответить
  • void *buf = (void*)0x100000 - 0x400 - 0x400 - 0x400 - 0x400 - 0x400 - 0x400 - 0x400;
    void *buf1 = (void*)0x100000 - 0x400*7;

    ну и что здесь?
    Ответить
      • так оно развернуться не могло, вы невнимательны, господа
        Ответить
        • Ничо не знаю:
          # 1 "aaa.c"
          # 1 "<built-in>"
          # 1 "<command-line>"
          # 1 "aaa.c"
          # 11 "aaa.c"
          void test()
          {
          void *buf = (void*)0x100000 - 0x400 - 0x400 - 0x400 - 0x400 - 0x400 - 0x400 - 0x400;
          void *buf1 = (void*)0x100000 - 0x400*7;
          *buf = *buf1 = 0xAA;
          
          printf("buf=%.2x \tbuf1=%.2x\n ",*buf, buf1);
          return;
          }
          Ответить
  • > Внимание, вопрос. В чем гавно?

    В коде, наверное?
    Ответить
  • до открытия истины осталось меньше часа.
    Готовы, детишки????
    Ответить
    • да, взрослый дядя, по-взрослому ноющий на взрослого максима прохорова
      Ответить
    • какой-то вы дяденька, не удолетворенный что-ли
      Ответить
      • "до открытия истины осталось совсем чуть-чуть!!!! Готова, детка???? Дорогая, не обижайся, но... в целом получилось смешнее, чем я ожидал..."
        Ответить
    • Вы готовы дети?
      Да Капитан.
      Я не слышу.
      Так точно Капитан Очевидность.
      Кто проживает на дне океана?
      Жалкая губка, имбицил без изьяеа.
      Ответить
    • >Готовы, детишки????
      Сам детишка и школота. Убейся. Типичный Пидор-ГдеЗдесьСиПлюсПлюсовец-Задрот.
      Ответить
  • мужики, не обижайтесь, но я забыл в чем косяк. в целом получилось смешнее чем ожидал. надо покопаться в старых исходниках где из за директив регистры сдвигались неправильно.
    всем спасибо всех наебали, расходимся.
    Ответить
    • Поздравляю, ты подтвердил свой статус долбоёба
      Ответить
    • Это такой фейл, что даже вин. Слив просто эпичнейший, сразу в нескольких номинациях.
      Ответить
      • Нужно ввести переходящие номинации для говнопостеров. Включая "лучший эпик фейл месяца", "лучший задрот", "наговнопостил сотни кодов Максима Прохорова".
        Да наш топикстартер будет постоянно держаться в топе по пяти-шести наградам.
        Ответить
    • Какие все вспыльчивые. Если сейчас так же сделать, то просто все пройдут мимо.
      Ответить
  • Да... Автор облажался по-полной :))
    Полил всех грязью и сам сел в лужу!
    Слишком много было умных рассуждений, а как до дела дошло...
    Ответить
  • Тред не читал, но на этих атмелах рам с 200000, а 100000 это флэш с кодом.
    Ответить
    • guest 2 часа назад # 0
      Тред не читал, но на этих атмелах рам с 200000, а 100000 это флэш с кодом.
      ____________
      соси хуй, школьник. doc6287.pdf page 20
      internal flash - after 0x100000.
      а мы от верхнего адреса вычитаем и в срам попадаем.
      Ответить
      • ну совсем запизделся
        не поленился щас качнуть ман, так вот в этом pdf 17 страниц
        Ответить
      • Какой наш ursus милый. Ему бы тихо слиться, а нет, продолжает нехило доставлять.
        Ответить
      • Старик, лучше бы ты просто самоустранился, а то что ни пост, то слив...
        Ответить
        • Штирлиц попробовал слив. Потом он попробовал слив ещё раз. И только на третий раз Штирлиц понял, что слив не работает.
          Ответить
    • Я гарантирую это. В них карта памяти такая
      0x00000000 Boot Memory
      0x00100000 Internal Flash
      0x00200000 Internal SRAM
      0x00300000 Internal ROM
      Вычитая ОП попадает хуй пойми куда. Наверное, в этом и была тонкая подьёбка.
      Ответить
  • Так автор чо, хотел с помощью говнокода баг отыскать?
    Ответить
  • А зачем вообще этой хуйней с дефайнами и адресами заниматься, объяви массивов чаров сколько надо и все, чай не ассемблером страдаем.
    Ответить
  • Вот на ГК появился первый человек-мем (не считая с++ форсера)
    Ответить
  • Урсус! Урсус! Хочим ещё урсус! Больше хуеты, больше сливов!
    Ответить
  • забавно, что сначала оценка была "+3"

    т.е. ставили "типа я в теме" что ли?)
    Ответить
  • Жуткий код и жуткий компилятор, который это компилирует.
    Ответить
  • Как добавить этот говнокод в избранные говнокоды в моём профиле?
    Ответить
  • Чёрт, нужно отплюсовать рейтинг, а то удалят...
    Ответить
    • не удалят он просто не будет отображаться на главной
      Ответить
  • соси код и втыкай в хуй... ой, не могу, сейчас усрус!
    Ответить
  • Ну так что посоны, в итоге кто выиграл ошибку-то нашли?
    Ответить
      • у тебя она называеться _main, потому что анус это главная и единственная твоя точка

        тфьу
        Ответить
          • Это если его линковали с подсистемой windows. Тогда у него по умолчанию нет сосноли, зато есть НЁХ типа HINSTANCE , он ею может окошки и их классы создавать.

            Кстати, в x64 она не _WinMain@16. И не _WinMain@32 (как можно было бы подумать) а просто WinMain (судя по dumpbin .obj файла) бо другой калконвейншен видимо
            Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8