__asm static naked inline assembler

Тема в разделе "LANGS.C", создана пользователем a6515e708cb74455, 29 сен 2011.

  1. a6515e708cb74455

    a6515e708cb74455 New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2011
    Сообщения:
    6
    хай Всем мира в сердце и покой в души
    такую интересную фишку подметил
    если функию оюъявить как
    Код (Text):
    1. static __declspec(naked) void ....()
    2. {
    3. }
    то когда делаеш так
    &.... то береш настоящий адрес
    а когда
    Код (Text):
    1. __declspec(naked) void ....()
    2. {
    3. }
    то получаеш адрес jmp'а
    разумеется это ксается только debug версии
    в releaee всегда настоящий адрес

    так вот вопрос могу ли я положиься на это знание
    или сделать что то типа такого
    Код (Text):
    1. __declspec(naked) void ...()
    2. {
    3.     __asm
    4.     {
    5.         call $ + 5
    6.        pop eax
    7.         add eax, 5
    8.         ret
    9.         ... ; тута данные хранимые в коде
    10.         ... ;
    11.     }
    12. }
    тоесть вызываю она мне вернет адрес начала данных в функции
    это надежно вроде бы

    суть в том что мне надо хранить некоторые данные в коде
    и иметь всегда реальный адрес данных "студия" как известно в debug версии подсовывает адрес jmp'а если только не применить волшебное слово static
    P.S VC++ 2008
     
  2. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Это incremental linking.
     
  3. a6515e708cb74455

    a6515e708cb74455 New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2011
    Сообщения:
    6
    да и правда интересно но вопрос открытый можно ли положиться на
    то что с настройками по умолчанию в debug версии (incremental link включен)
    если мы применим static к функции
    Код (Text):
    1. static __declspec(naked) ...()
    2. {
    3. }
    то получим настоящий адрес ?
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Нельзя.
     
  5. a6515e708cb74455

    a6515e708cb74455 New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2011
    Сообщения:
    6
    почему ? ведь это работает
    и тогда еще вопрос если все таки нельзя то как тогда быть ?
    слишком уж это костыльно мне кажется
    Код (Text):
    1. __declspec(naked) void ...()
    2. {
    3.     __asm
    4.     {
    5.         call $ + 5
    6.         pop eax
    7.         add eax, 5
    8.         ret
    9.         ... ; тута данные хранимые в коде
    10.         ... ;
    11.     }
    12. }
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    a6515e708cb74455
    Вам же сказали как быть - отключайте incremental linking.