Достала студия

Тема в разделе "LANGS.C", создана пользователем freeq, 9 май 2010.

  1. freeq

    freeq New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    47
    Всем Привет.
    Уже просто выводит компилятор студии и тот гуан который он компилит, код с оптимизацией не пашет, выключаешь все работает, при просмотре в дизасме студия вобще вырезает пол кода из разных функций не говоря уже о том что полностью вырезает код где присутствуют не адресные структуры, Unk_0.tmp = 1;, просто 100% код который будет работать не работает ..
    собственно сам вопрос, есть ли какая нибудь альтернатива ей чтобы поддерживался синтаксис и все проекты можно было перенести без особого гемороя ...
     
  2. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    freeq, честно говоря, именно с VC таких проблем у меня никогда не возникало. Если код написан правильно, безо всяких извратов, то код 100% рабочий хоть в дебаге, хоть в релизе. Предоставьте пожалуйста, кусок кода, который у вас коряво компилируется.
     
  3. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    "вырезает код" == оптимизирует
    давай код где оно "гуан компилит"
     
  4. freeq

    freeq New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    47
    вот простой пример в аттаче, если вырубить оптимизацию все заполнится, а так это представляет из себя в дизасме такой код:

    Код (Text):
    1. public start
    2. start proc near
    3. xor     eax, eax
    4. retn
    5. start endp
    возможно я многое от нее требую, но иногда по целому дню ищешь в чем же проблема, т.к. очень важен размер, а оптимизация его дает.
     
  5. freeq

    freeq New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    47
    Код (Text):
    1. freeq, честно говоря, именно с VC таких проблем у меня никогда не возникало. Если код написан правильно, безо всяких извратов, то код 100% рабочий хоть в дебаге, хоть в релизе. Предоставьте пожалуйста, кусок кода, который у вас коряво компилируется.
    да согласен, студия очень удобна, но в коде есть извраты как с вызовом апи так и с другим, но в целом все написано по "стандарту" и явные хаки не используются.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    freeq
    В таком случае необходимо отказаться от скриптов и писать на асме. Разумеется что всяко хек скрипт нормально не скомпилет.
     
  7. freeq

    freeq New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    47
    да я тоже об этом думал, иногда так и делаю, но 100% перейти на него не готов, но у дельфы вот например таких проблем нет, компил граммотный ...
     
  8. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    freeq
    а что ты хотел от этого кода??
    естественно оптимизатор удаляет мертвый код

    жесть какая-то %) нубам не нравится что у компилятора работает оптимизатор
     
  9. Bazhan

    Bazhan Андрей

    Публикаций:
    0
    Регистрация:
    8 янв 2008
    Сообщения:
    71
    Адрес:
    Украина
    freeq
    компилятор никакого как вы выразились "гуан" не компилирует, зачем в исполняемом модуле что то, что не имеет никакого смысла, либо то, что никогда не будет выполняться.
    к примеру такой код

    Test.dwTemp_1 = 1;
    Test.dwTemp_2 = 2;
    Test.dwTemp_3 = 3;

    if(Test.dwTemp_1 == 1){
    _tprintf(_T("%i\n"), Test.dwTemp_1);
    }
    else if (Test.dwTemp_2 == 2){
    _tprintf(_T("%i\n"), Test.dwTemp_2);
    }

    будет выглядеть так

    01011000 push 1
    01011002 push offset string L"%i\n" (10120F4h)
    01011007 call dword ptr [__imp__wprintf (10120A0h)]

    никаких проверок на равенство с единицей не будет так как Test.dwTemp_1 всегда будет единицей
    ветка else if вообще отсутствует так как в ней нет необходимости
    согласен с Clerk пишите на Asm
     
  10. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    кроме полного перехода на асм, есть еще варианты управлять оптимизацией, а не оптимизировать все подряд с одним и темже ключом. например,
    mov ebx,[ebx]
    позволяет бегать по стеку вызовов. но, если вы скомпилите с -O1, то прога в этом месте рухнет, тк -O1 омитит заголовки.

    а вообще, заводите дружбу с дебугером. тем более, что, как на меня, студийный сорслевел дебугер - единственная причина тратить диск на студийное иде
     
  11. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    qqwe
    mov ebp, [ebp] ?
     
  12. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    стандартный заголовок

    push ebp
    mov ebp, esp

    те чему равно dword [ebp]? прально, предыдущему ebp. ну там, [ebp + 4] == адрес возврата из функции итд, сами понимаете
     
  13. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    в некоторых прогах видел внутренний дебугер, выдающий дизасм листинги при ошибке. + к значениям регистров и флагов. довольно удобно.
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    GoldFinch
    Код (Text):
    1. STACK_FRAME struct
    2. rEbp        PVOID ? ; PSTACK_FRAME
    3. rEip        PVOID ?
    4. STACK_FRAME ends
    5.  
    6. STACK_FRAME_EX struct
    7. Cookie      ULONG ?
    8. Frame       STACK_FRAME <>
    9. STACK_FRAME_EX ends
     
  15. freeq

    freeq New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    47
    не элитьте и обоснуйте выше цитату, я не первый год уже на студии, вы попросили пример я вам дал самый простой, полные проекты выкладывать я не буду и весь код в них используется, более ясный пример: попробуйте напишите/возьмите какой нибудь эксплойт где используются не адресные структуры и соберите его в студии с дефолтными настройками проекта, устанете отлаживать и считать бсоды, а оптимизация лично мне нужна лишь для размера, ясно что после пака ехе, он будет весить почти столько же сколько он был бы при оптимизации, другой вопрос в том что она может вырезать куски и со временем натыкаешься на эти камни, т.к. после каждой сборки проводить полностью тест всего нет желания.

    qqwe
    спасибо за ответ, попробую
     
  16. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    freeq
    если ты не умеешь пользоваться своим компилятором, нечего на него гнать, что он "гуан компилит"
    и ладно бы это про гцц, где надо кучу манов читать %)

    "дефолтные настройки" оптимизатора рассчитаны на нормальный код, а не на сплоеты. Уметь надо пользоваться инструментами, а не быдлокодить с "дефолтными настройками" не понимая что они означают и как работает компилятор.
     
  17. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    freeq
    Вы забываете, что С++ (если не считать расширений конкретного компилятора) - это язык описания алгоритма, а не бинарного кода.
    Таким образом, задача компилятора - сгенерировать код, функционально эквивалентный исходнику.
    С чем он успешно справился - Ваша int Main() функционально эквивалентна:
    int MyMain()
    {
    return 0;
    }

    Подобно тому, как a + b - a эквивалентно b.
    Если Вам важна форма, а не только функциональность бинарного кода, то до некоторой степени могут помочь MS-расширения С++, ключи компилятора и знание особенностей его работы, а в общем случае нужно использовать ассемблер.
     
  18. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    freeq
    Выбрасывание лишнего кода - это ещё "цветочки". :)
    Последние компиляторы MSVC способны на гораздо большее творчество - частичное объединение ф-ций, изменение конвенций вызова, изменение логики работы ф-ции на основании анализа всех возможных контекстов её вызова... в общем, много чего.
     
  19. freeq

    freeq New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    47
    GoldFinch
    я вас не гнал, компилятором я пользоваться умею, но не так тонко как видимо делают это другие.

    green
    Спасибо за ответ!
    Да тоже заметил что ф-ции объединяет и несколько других не приятных вещей, я думал уже я один такой :)
     
  20. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    freeq
    Наоборот, это очень приятные вещи. :)
    Собственно, такая сообразительность и определяет качество компилятора.