Не линкуется програмка

Тема в разделе "WASM.BEGINNERS", создана пользователем Ezhik, 31 мар 2006.

  1. Ezhik

    Ezhik New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    7
    Адрес:
    Ukraine
    link.exe (5.12.8078)не хочет работать пишет такие строчки:



    2.obj : error LNK2001: unresolved external symbol _PacketGetAdapterNames@8

    2.exe : fatal error LNK1120: 1 unresolved externals



    При этом ml.exe не ругается.

    PacketGetAdapterNames в программе встречается в 1 месте

    call PacketGetAdapterNames

    Подскажите в чем проблема
     
  2. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Судя по всему, у тебя функция PacketGetAdapterNames не из пакета masm32, следовательно она не описана в inc файла.

    Объяви прототип самостоятельно:

    PacketGetAdapterNames PROTO :lol: WORD, :lol: WORD

    или

    EXTERN PacketGetAdapterNames@8:NEAR
     
  3. Ezhik

    Ezhik New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    7
    Адрес:
    Ukraine
    mix_mix

    Прототип в inc файле есть, и самостоятельно обьявлял, толку нет.
     
  4. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Прототип типа:





    или





    и т.п. всего лишь говорит компилятору (ml.exe) что такая-то функция (вернее, такой-то символ) где-то существует, но не говорит где именно. Компилятору достаточно знать, что символ есть, а ресолвить этот символ будет линкер. Поэтому ml.exe и не ругается, а ругается link.exe.



    Где же находится функция с именем PacketGetAdapterNames? В winpcap? Значит, линкеру надо указать на либу winpcap. includelib winpcap.lib или как она называется у Вас...
     
  5. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    :) и получишь еще пару ошибок из за несовместимости либ файла от разработчиков winpcap и link.exe от Microsoft :)

    Сделай длл с генерацией либ файла сам на асме по прототипам . Шаблонам так сказать. Например :



    .code

    DllEntry proc hInstance:HINSTANCE, reason:lol: WORD, reserved1:lol: WORD



    mov eax,TRUE

    ret

    DllEntry Endp

    ; See skeleton.def: This is an exported function

    PacketGetAdapterNames PROC STDCALL A:lol: WORD, B:lol: WORD



    ret

    PacketGetAdapterNames endp

    ....



    И все будет линковаться. Я кстати где-то про это писал.

    Пример в аттаче.

    [​IMG] 992637280__packet.rar
     
  6. Ezhik

    Ezhik New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    7
    Адрес:
    Ukraine
    TermoSINteZ

    Спасибо слинковалась.

    Но не работает ;). После вызова PacketGetAdapterNames

    буфер пустой хотя ошибки нет.



    Передирал один в один из твоей статьи



    lea eax,AdapterLen

    push eax

    lea edi,AdapterName

    push edi

    call PacketGetAdapterNames



    Пожалуйста подскажи в чем проблема. Прога в аттаче.

    [​IMG] _1525201492__net.asm
     
  7. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    :) А у тебя адаптеры включены (именно сетевухи а не модем)? хотяб 1 подключена (то есть сетевое соединение должно быть) ?

    А еще формат данных, записываемых в буфер, отличен для версий Windows 95/98 и WindowsNT/2000, из-за разницы в кодировках у этих ОС (Windows 95/98 использует кодировку ASCII, Windows NT/2000 – UNICODE).

    Вот собственно и все.
     
  8. Ezhik

    Ezhik New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    7
    Адрес:
    Ukraine
    Адаптеры включены просто у меня мозгов не хватает.

    Если я трассирую функцию в отладчике вижу

    push ebp

    mov ebp,psp

    leave

    ret

    вобщем один в один как в твоем примере (я просто make запустил.

    Как заставить link понимать lib именно winpcap`овский недогоняю. Пробовал pocket.dll перегнать в lib прогой dll2lib тоже самое link непонимает.

    Объясни пожалуста, обещаю вместо пива пить витаминки для мозга.
     
  9. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    ну попробуй для сборки LINK.EXE из визуал студии. Там просто длл такая, что все вызовы cdecl походу, а масму нужен stdcall. Это только предположения .. я этим не заморачивался . Если надо на асме, либу руками делал.
     
  10. Ezhik

    Ezhik New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    7
    Адрес:
    Ukraine
    to TermoSINteZ

    Можеш скинуть либу желательно с исходниками для функций из твоей статьи? Очень разобраться хочется.
     
  11. Ezhik

    Ezhik New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    7
    Адрес:
    Ukraine
    Ура заработало. Добавилл оригинальную dll-ку, а либу использовал твою. Спасибо за помощь. Витаминки для мозга отменяются.