1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

asm модуль в проэкте Visual C++

Тема в разделе "WASM.ZEN", создана пользователем spencer, 24 окт 2007.

  1. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    я пишу свою программу в 2005й студии, однако определенная часть кода была написана в masm32.
    Я добавил *.asm файл в проэкт. Код на си обращался к переменной из ассемблерного модуля и в этом месте я получал ошибку.

    Код (Text):
    1. extern "C" char fake_name;
    2.  
    3. void xXxXx(DWORD pid)
    4. {  
    5.     fake_name='a';
    6.     ..................
    и заменил fake_name на _fake_name по всему асссемблерному листингу. Однако все равно получал ошибку.

    pattern.obj : error LNK2001: unresolved external symbol _fake_name

    мне подсказали что надо каким то образом указать в ассемблерном исходнике что переменная будет экспортироватся.
    Однако не имею ни малейшего понятия как это сделать. Помогите пожалуйста разобратся.
     
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    1.872
    в тасме, вроде, нужно было public указать при объявлении переменной
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.298
    Адрес:
    Ukraine
    В масме есть "универсальная" директива EXTERNDEF.
     
  4. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    rmn
    Так и в масме... что-то типа:
    Код (Text):
    1. public _fake_name
    2. ...
    3. .data
    4. ...
    5. _fake_name db ?
    6. ...
    IceStudent
    Так она же вроде все символы делает публичными?
     
  5. ut2004

    ut2004 New Member

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    5
    в асме
    EXTRN fake_name:CHAR
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.298
    Адрес:
    Ukraine
    Ustus
     
  7. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    EXTERNDEF _fake_name:db "Asdsad"

    или как?
     
  8. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    а .obj к проекту подключен?
     
  9. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    подключен *.asm который позже превращается в *.obj так что думаю могу ответить на твой вопрос - да
     
  10. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    делаю так
    Код (Text):
    1. public _fake_name
    2. _fake_name DWORD ?
    получаю: unresolved external symbol _fake_name в сишном коде

    через EXTERNDEF вообще ничерта не получается (
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    spencer
    В зависимости от соглашения о вызове, имя экспортируемого символа подвергается манглингу. Короче, не нужно добавлять _ перед именем переменной - его добавит компилятор. Вообще, если есть сомнения в правильности имени символа, вооружайтесь хекс-редактором - уйму нервов сэкономите.
     
  12. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    да, все отлично заработало... выходит не надо мне ничего вручную менять.... я то в асм коде подабовлял _ перед интересующими меня именами.... Всем спасибо за помощь