PtokaX для Linux

Разработка и поиск скриптов, обсуждение PtokaX.
Аватара пользователя
mariner
Сообщения: 336
Зарегистрирован: 30 май 2010, 19:27
Хаб: dchub://dc.klan-hub.ru
Откуда: Королев
Контактная информация:

Сообщение mariner »

Сегодня вот разбирал код нашего любимого PPK и набрел на такую конмтрукцию, вызывающую косяки непомерные(во всяком случае на несвежем gcc и glibc)

Код: Выделить всё

uint16_t ui16dx = ((uint16_t *)&Reg->ui32Hash)[0]; 
Немного подумав, я понял, что все сделать нормально, записав так:

Код: Выделить всё

uint32_t ui16dx = Reg->ui32Hash;
Вот в каком состоянии надо быть, чтобы такое писать?

Самое печальное, что потом происходит другая лажа, которую немного непонятка как править :( Буду думать.
Последний раз редактировалось mariner 15 июн 2010, 22:52, всего редактировалось 1 раз.
nd
Администратор
Сообщения: 311
Зарегистрирован: 23 авг 2009, 18:06

Сообщение nd »

Как раз исходный вариант вполне корректен, а ваш ведет к обращению к памяти за пределами массива RegUser *table[65536]. В лучшем случае будет segfault, в худшем - уязвимость с возможностью выполнения произвольного кода.
Аватара пользователя
mariner
Сообщения: 336
Зарегистрирован: 30 май 2010, 19:27
Хаб: dchub://dc.klan-hub.ru
Откуда: Королев
Контактная информация:

Сообщение mariner »

обращению к памяти за пределами массива RegUser *table[65536]
А я про это и говорил:
Самое печальное, что потом происходит другая лажа
Поэтому:

Код: Выделить всё

uint16_t ui16dx = (uint16_t)Reg->ui32Hash;
Исправил до такого вида. Вообще, я догадываюсь, что PPK хотел юзать динамик каст, то сделал костыль, которые не переваривал старый gcc и/или libc (проверено на Ubuntu 8.04 и Debian Stable). В общем может не поленюсь и сделаю на dynamic_cast
nd
Администратор
Сообщения: 311
Зарегистрирован: 23 авг 2009, 18:06

dynamic_cast для примитивных типов? Не стоит ли подучить матчасть?

Сообщение nd »

Казалось бы, при чем здесь dynamic_cast? Здесь выделяются первые 2 байта 4-х байтного числа. Этот код вполне себе корректный и общепринятый в Си, хотя и не частый. Вот почему решили использовать именно первые, а не, скажем, младшие (как в вашем новом варианте) - это другой вопрос. И я совсем не уверен, что этот код стоит трогать.
Аватара пользователя
mariner
Сообщения: 336
Зарегистрирован: 30 май 2010, 19:27
Хаб: dchub://dc.klan-hub.ru
Откуда: Королев
Контактная информация:

Сообщение mariner »

Возможно и стоит, однако теперь все работает, пока, как надо. Я думаю еще посмотреть как все это будет работать.

Код: Выделить всё

#include <iostream>
#include <stdint.h>

int main() {
        uint32_t a = 1000;
        uint16_t b = (uint16_t)a;
        uint16_t c = ((uint16_t *)&a)[0];
        std::cout << b << " --- " << c << std::endl;
        return 0;
}
Я перед тем как править делал вот такую проверку (на всякий случай). результаты совпали, или я неверно проверял?

на счет динамик каст - просто я cказал, что похоже на него(ну вот ИМХО это) и я так уловил идею PPK
Последний раз редактировалось mariner 16 июн 2010, 01:13, всего редактировалось 1 раз.
nd
Администратор
Сообщения: 311
Зарегистрирован: 23 авг 2009, 18:06

Сообщение nd »

Да, на little-endian архитектуре эти 2 строчик равнозначны. На big-endian будут различаться. Кстати, на big-endian будут частые коллизии при использовании 2-х первых байт их хеша (HashNick) как индекса.
Аватара пользователя
mariner
Сообщения: 336
Зарегистрирован: 30 май 2010, 19:27
Хаб: dchub://dc.klan-hub.ru
Откуда: Королев
Контактная информация:

Сообщение mariner »

нет, Little-endian, x86 в общем. Про колизии на big-endian все предельно ясно и так, но я не думаю, что тут много пользователей ARM, MiPS или Sparc. Просто когда при сборке с -O2 отваливается часть LuaAPI не комильфово, а -O2, это считай стандарт.
Аватара пользователя
TiGRpp
Сообщения: 231
Зарегистрирован: 21 сен 2009, 23:05
Хаб: dchub://favorite-hub.ru
Откуда: Москва
Контактная информация:

Сообщение TiGRpp »

nd писал(а): Дополнительные библиотеки Lua 5.1 можно поставить через менеджер пакетов дистрибутива.
Поставил liblua5.1-sql-mysql-2 и liblua5.1-sql-mysql-deb, однако по-прежнему никаких следов файлов mysql.lua, init.lua, и вообще каталога libs, кроме как в PtokaX, нет.

mysql.so нашелся в php5
Последний раз редактировалось TiGRpp 19 июн 2010, 14:25, всего редактировалось 2 раза.
Аватара пользователя
mariner
Сообщения: 336
Зарегистрирован: 30 май 2010, 19:27
Хаб: dchub://dc.klan-hub.ru
Откуда: Королев
Контактная информация:

Сообщение mariner »

Странно. Должно лежать тут:
/usr/lib/lua/5.1/luasql/
Аватара пользователя
TiGRpp
Сообщения: 231
Зарегистрирован: 21 сен 2009, 23:05
Хаб: dchub://favorite-hub.ru
Откуда: Москва
Контактная информация:

Сообщение TiGRpp »

Там тоже лежит только mysql.so, а скрипт вроде просит еще mysql.lua и init.lua
Последний раз редактировалось TiGRpp 19 июн 2010, 14:22, всего редактировалось 1 раз.
Аватара пользователя
mariner
Сообщения: 336
Зарегистрирован: 30 май 2010, 19:27
Хаб: dchub://dc.klan-hub.ru
Откуда: Королев
Контактная информация:

Сообщение mariner »

хм, у меня их тоже нет, но все пашет
Аватара пользователя
TiGRpp
Сообщения: 231
Зарегистрирован: 21 сен 2009, 23:05
Хаб: dchub://favorite-hub.ru
Откуда: Москва
Контактная информация:

Сообщение TiGRpp »

Вообще библиотеки Птоха подхвалила, вижу, но есть ошибки скрипта.

Вот пока не могу сообразить, что указать здесь -- Адрес сервера MySQL
Запускаю StatisticsMySQL http://mydc.ru/topic1846.html?hl=StatisticsMySQL
Последний раз редактировалось TiGRpp 19 июн 2010, 15:08, всего редактировалось 2 раза.
ExC0tiC11

Сообщение ExC0tiC11 »

Код: Выделить всё

./start_ptokax: 26: ./PtokaX: not found
Вот такая ошибочка вылетает в стартующем скрипте.
nd
Администратор
Сообщения: 311
Зарегистрирован: 23 авг 2009, 18:06

Сообщение nd »

Что за ОС? Есть ли dirname и readlink?
ExC0tiC11

Сообщение ExC0tiC11 »

1)ubuntu-10.04-x86_64
2)dirname (GNU coreutils) 7.4
3)readlink (GNU coreutils) 7.4
nd
Администратор
Сообщения: 311
Зарегистрирован: 23 авг 2009, 18:06

Сообщение nd »

Найдите строчку cd "$INSTALL_PATH" после нее добавьте строчку echo "$INSTALL_PATH" и посмотрите, что выведет при запуске.

Попробуйте первую строчку заменить с #!/bin/sh на #!/bin/bash

Ну или попробуйте INSTALL_PATH=$(dirname "$(readlink -f $0)") заменить на полный путь, например INSTALL_PATH="$HOME/ptokax-100131-i686"
Аватара пользователя
mariner
Сообщения: 336
Зарегистрирован: 30 май 2010, 19:27
Хаб: dchub://dc.klan-hub.ru
Откуда: Королев
Контактная информация:

Сообщение mariner »

так убанта же тут на 64 бита. А у нд под 32 бита сборка) Не звлетит) PS ia32-libs - шлак
nd
Администратор
Сообщения: 311
Зарегистрирован: 23 авг 2009, 18:06

Сообщение nd »

Ну почему же не взлетит? Про ia32 вы, вроде, знаете.
mariner писал(а):ia32-libs - шлак
Не забудьте об этом сообщить разработчикам.

В любом случае тут проблема в скрипте, а не бинарнике.
Аватара пользователя
mariner
Сообщения: 336
Зарегистрирован: 30 май 2010, 19:27
Хаб: dchub://dc.klan-hub.ru
Откуда: Королев
Контактная информация:

Сообщение mariner »

Не забудьте об этом сообщить разработчикам.
Не боись, я уже.

ну зачем плодить костылики?
exC0tic
Сообщения: 4
Зарегистрирован: 05 янв 2010, 16:24

Сообщение exC0tic »

Хм, попробовал на Ubunt-е скомпилировать сам, хаб так и не запустился, просто 0 внимания. В итоге снёс это дерьмо :-/ и поставил cent, теперь всё работает.
Аватара пользователя
mariner
Сообщения: 336
Зарегистрирован: 30 май 2010, 19:27
Хаб: dchub://dc.klan-hub.ru
Откуда: Королев
Контактная информация:

Сообщение mariner »

CentOS? Как дела с lua-socket, не падают? Lua-md5 через yum поставил, да?
Последний раз редактировалось mariner 24 окт 2010, 12:26, всего редактировалось 1 раз.
exC0tic
Сообщения: 4
Зарегистрирован: 05 янв 2010, 16:24

Сообщение exC0tic »

Ну за 2 дня хаб упал 2 раза, и то ночью, и то как я понял из-за того что были проблемы с сетью, да
Аватара пользователя
mariner
Сообщения: 336
Зарегистрирован: 30 май 2010, 19:27
Хаб: dchub://dc.klan-hub.ru
Откуда: Королев
Контактная информация:

Сообщение mariner »

Кстати, таки интересует. А чо при сборке на Ubuntu писало?
exC0tic
Сообщения: 4
Зарегистрирован: 05 янв 2010, 16:24

Сообщение exC0tic »

segment failed или что-то такое), когда залезает не в свою память
Аватара пользователя
mariner
Сообщения: 336
Зарегистрирован: 30 май 2010, 19:27
Хаб: dchub://dc.klan-hub.ru
Откуда: Королев
Контактная информация:

Сообщение mariner »

странно) А из чего собирал то?) Ну оригинальные сурцы или как?
Ответить