Модераторы: feodorv

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с WinSock2, inet_pton не найдена в ws2_32.dll 
:(
    Опции темы
andrew_121
Дата 30.5.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(azesmcar @  29.5.2009,  20:33 Найти цитируемый пост)
Я собственно не понял, в чем проблема была? скопировал из сорсов линукса, 
1. функция откомпилировалась? Да/Нет.
2. тестировалась отдельно от проекта? Да/Нет.

1. Да.
2. Да.


Но при запуске все равно сообщает: Точка входа в процедуру inet_pton не найдена в библиотеке ws2_32.dll


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 30.5.2009, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(andrew_121 @  30.5.2009,  10:57 Найти цитируемый пост)
Но при запуске все равно сообщает: Точка входа в процедуру inet_pton не найдена в библиотеке ws2_32.dll 

Следовательно в программе используется эта функция (не написанная, а именно виндоузовская), либо ее использует другая библиотека которую используешь ты.
1. Надо проверить, а точно ли она не используется в коде. Переименовать функцию и все ее вызовы, откомпилировать, проверить.
2. Если все еще не работает, проверить под дебагером кто использует функцию.
PM   Вверх
andrew_121
Дата 30.5.2009, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(azesmcar @  30.5.2009,  19:05 Найти цитируемый пост)
1. Надо проверить, а точно ли она не используется в коде. Переименовать функцию и все ее вызовы, откомпилировать, проверить.

Во всем проекте, всего однажды.



Цитата(azesmcar @  30.5.2009,  19:05 Найти цитируемый пост)
2. Если все еще не работает, проверить под дебагером кто использует функцию.

Как? Чё дебагить то?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 30.5.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(andrew_121 @  30.5.2009,  19:27 Найти цитируемый пост)
Как? Чё дебагить то? 

Программу свою
http://www.ollydbg.de/

Это конечно в том случае, если логически вычислить виновника не получается.

Это сообщение отредактировал(а) azesmcar - 30.5.2009, 19:38
PM   Вверх
andrew_121
Дата 30.5.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



azesmcar, Так, минуточку! В моем коде эта функция используется всего однажды. Я ее заменил сорцом. Значит ее мне дебагить ненужно.
Так, вы что, предлагаете дебагить до тех пор пока я не встречу сию функцию? И что мне это даст? Я же не могу ее в длл-ке заменить. Или...?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 30.5.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(andrew_121 @  30.5.2009,  21:01 Найти цитируемый пост)
azesmcar, Так, минуточку! В моем коде эта функция используется всего однажды. Я ее заменил сорцом. Значит ее мне дебагить ненужно.

Если в своем коде ты ее заменил, значит ошибка выдаватся не должна. А если выдается - значит либо не везде заменил, либо используешь другую библитеку, которая использует эту функцию..Кто-то же на не ссылается что ошибка вылетает. Для начала я бы порекомендовал сделать полный ребилд проекта. Если не поможет, искать дебагером виновника. Т.е. запустить под дебагером и посмотреть, кто именно требует эту функцию. Сперва вычислить, а потом думать как исправить.
PM   Вверх
andrew_121
Дата 30.5.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Буду пробовать...


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
REZiaMIX
Дата 31.5.2009, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



ws2_32.dll линкуется динамически(и для каждого процесса она "своя").
я бы попробовал перехватить ее и заменить на свою. Должно поидее прокатить.
т.е. DWORD addr = (DWORD)&inet_pton;
Самое простое - заменить первые 5 байт , на jump на свою функцию.

Да и вообще , дал бы код программы где используется эта функция - наверняка ее очень легко заменить аналогом.
Врядли winsock2 будет её использовать без указаний извне smile 



--------------------
user posted image
PM MAIL   Вверх
andrew_121
Дата 31.5.2009, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(REZiaMIX @  31.5.2009,  20:06 Найти цитируемый пост)
Самое простое - заменить первые 5 байт , на jump на свою функцию.

Подробней пожалуйста....



Цитата(REZiaMIX @  31.5.2009,  20:06 Найти цитируемый пост)
Да и вообще , дал бы код программы где используется эта функция - наверняка ее очень легко заменить аналогом.

Вот:
Код

/* Connect a client socket to a server socket */
bool Socket::connect(const LString& host, const int port) {
    if (!is_valid()) { return false; }

    m_addr.sin_family = AF_INET;
    m_addr.sin_port = htons(port);

    int status = inet_pton(AF_INET, host.c_str(), (unsigned char*)&m_addr.sin_addr);

#ifndef WIN32
    if (errno == EAFNOSUPPORT) { return false; }
#endif
    status = ::connect(m_sock, (sockaddr *) &m_addr, sizeof(m_addr));

    return (status == 0);
}




--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
REZiaMIX
Дата 31.5.2009, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Код


SOCKET getOutgoingSocket(char * addr,unsigned int PORT)
{
        SOCKET sock;
    sock = socket(AF_INET,SOCK_STREAM,0);
    if (sock == INVALID_SOCKET) 
        repsys::report("Error at socket(): %ld\n", WSAGetLastError());

    sockaddr_in dest_addr;
    dest_addr.sin_family=AF_INET;
    dest_addr.sin_port=htons(PORT);
    HOSTENT *hst = NULL;


    if (inet_addr(addr)!=INADDR_NONE)
      dest_addr.sin_addr.s_addr=inet_addr(addr);
    else
      if (hst=gethostbyname(addr))
          ((unsigned long *)&dest_addr.sin_addr)[0]=
            ((unsigned long **)hst->h_addr_list)[0][0];
    hst=gethostbyname(addr);
    if(hst == NULL)
        repsys::report("DNS fail or invalid addr.\n");

    if(connect(sock,(sockaddr *)&dest_addr,sizeof(dest_addr)) )
                repsys::report("connect fail.\n");
    
    return sock;
}



Аналогичный код , + разрешение dns если адрес является не IP , а именем домена.
Используется inet_addr. repsys::report - функция лог ошибок.
Думаю ошибка возникает в коде не по причине inet_pton.

Какого рода вообще ошибка , не проще ли пройтись дебагом по программе , и посмотреть где что и как?
Думаю не идет коннект?!?!
(это моя старая функция , есть баг когда два раза вызывается gethostbyname, исправить просто булевой переменной где надо)
inet_addr вроде отличается только тем , что не справиться с ipv6(пока еще рано о нем думать по моему мнению).

Добавлено @ 00:09
Да и... Другими функциями из sockets2 (win xp) использоваться она ну никак не будет , если ее нету!

Так что надо искать ошибку в другом месте.

Это сообщение отредактировал(а) REZiaMIX - 1.6.2009, 00:10


--------------------
user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0803 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.