PtokaX для Linux

Разработка и поиск скриптов, обсуждение PtokaX.
Аватара пользователя
mariner
 
Хаб: dchub://dc.klan-hub.ru
 
Сообщения: 336
Откуда: Королев

Сообщение 15 июн 2010, 22:22

Сегодня вот разбирал код нашего любимого PPK и набрел на такую конмтрукцию, вызывающую косяки непомерные(во всяком случае на несвежем gcc и glibc)
Код: Выделить всё
uint16_t ui16dx = ((uint16_t *)&Reg->ui32Hash)[0]; 

Немного подумав, я понял, что все сделать нормально, записав так:
Код: Выделить всё
uint32_t ui16dx = Reg->ui32Hash;

Вот в каком состоянии надо быть, чтобы такое писать?

Самое печальное, что потом происходит другая лажа, которую немного непонятка как править :( Буду думать.
Последний раз редактировалось mariner 15 июн 2010, 22:52, всего редактировалось 1 раз.

nd
Администратор
 
Сообщения: 310

Сообщение 15 июн 2010, 23:26

Как раз исходный вариант вполне корректен, а ваш ведет к обращению к памяти за пределами массива RegUser *table[65536]. В лучшем случае будет segfault, в худшем - уязвимость с возможностью выполнения произвольного кода.

Аватара пользователя
mariner
 
Хаб: dchub://dc.klan-hub.ru
 
Сообщения: 336
Откуда: Королев

Сообщение 16 июн 2010, 00:27

обращению к памяти за пределами массива RegUser *table[65536]

А я про это и говорил:
Самое печальное, что потом происходит другая лажа

Поэтому:
Код: Выделить всё
uint16_t ui16dx = (uint16_t)Reg->ui32Hash;

Исправил до такого вида. Вообще, я догадываюсь, что PPK хотел юзать динамик каст, то сделал костыль, которые не переваривал старый gcc и/или libc (проверено на Ubuntu 8.04 и Debian Stable). В общем может не поленюсь и сделаю на dynamic_cast

nd
Администратор
 
Сообщения: 310

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

Сообщение 16 июн 2010, 00:58

Казалось бы, при чем здесь dynamic_cast? Здесь выделяются первые 2 байта 4-х байтного числа. Этот код вполне себе корректный и общепринятый в Си, хотя и не частый. Вот почему решили использовать именно первые, а не, скажем, младшие (как в вашем новом варианте) - это другой вопрос. И я совсем не уверен, что этот код стоит трогать.

Аватара пользователя
mariner
 
Хаб: dchub://dc.klan-hub.ru
 
Сообщения: 336
Откуда: Королев

Сообщение 16 июн 2010, 01:04

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

Код: Выделить всё
#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
Администратор
 
Сообщения: 310

Сообщение 16 июн 2010, 01:32

Да, на little-endian архитектуре эти 2 строчик равнозначны. На big-endian будут различаться. Кстати, на big-endian будут частые коллизии при использовании 2-х первых байт их хеша (HashNick) как индекса.

Аватара пользователя
mariner
 
Хаб: dchub://dc.klan-hub.ru
 
Сообщения: 336
Откуда: Королев

Сообщение 16 июн 2010, 01:40

нет, Little-endian, x86 в общем. Про колизии на big-endian все предельно ясно и так, но я не думаю, что тут много пользователей ARM, MiPS или Sparc. Просто когда при сборке с -O2 отваливается часть LuaAPI не комильфово, а -O2, это считай стандарт.

Аватара пользователя
TiGRpp
 
Хаб: dchub://favorite-hub.ru
 
Сообщения: 231
Откуда: Москва

Сообщение 19 июн 2010, 14:04

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
 
Хаб: dchub://dc.klan-hub.ru
 
Сообщения: 336
Откуда: Королев

Сообщение 19 июн 2010, 14:11

Странно. Должно лежать тут:
/usr/lib/lua/5.1/luasql/

Аватара пользователя
TiGRpp
 
Хаб: dchub://favorite-hub.ru
 
Сообщения: 231
Откуда: Москва

Сообщение 19 июн 2010, 14:20

Там тоже лежит только mysql.so, а скрипт вроде просит еще mysql.lua и init.lua
Последний раз редактировалось TiGRpp 19 июн 2010, 14:22, всего редактировалось 1 раз.

Аватара пользователя
mariner
 
Хаб: dchub://dc.klan-hub.ru
 
Сообщения: 336
Откуда: Королев

Сообщение 19 июн 2010, 14:44

хм, у меня их тоже нет, но все пашет

Аватара пользователя
TiGRpp
 
Хаб: dchub://favorite-hub.ru
 
Сообщения: 231
Откуда: Москва

Сообщение 19 июн 2010, 14:56

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

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

ExC0tiC11
 

Сообщение 19 окт 2010, 10:52

Код: Выделить всё
./start_ptokax: 26: ./PtokaX: not found

Вот такая ошибочка вылетает в стартующем скрипте.

nd
Администратор
 
Сообщения: 310

Сообщение 19 окт 2010, 14:37

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

ExC0tiC11
 

Сообщение 19 окт 2010, 16:40

1)ubuntu-10.04-x86_64
2)dirname (GNU coreutils) 7.4
3)readlink (GNU coreutils) 7.4

nd
Администратор
 
Сообщения: 310

Сообщение 20 окт 2010, 15:44

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

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

Ну или попробуйте INSTALL_PATH=$(dirname "$(readlink -f $0)") заменить на полный путь, например INSTALL_PATH="$HOME/ptokax-100131-i686"

Аватара пользователя
mariner
 
Хаб: dchub://dc.klan-hub.ru
 
Сообщения: 336
Откуда: Королев

Сообщение 22 окт 2010, 00:54

так убанта же тут на 64 бита. А у нд под 32 бита сборка) Не звлетит) PS ia32-libs - шлак

nd
Администратор
 
Сообщения: 310

Сообщение 22 окт 2010, 14:57

Ну почему же не взлетит? Про ia32 вы, вроде, знаете.

mariner писал(а):ia32-libs - шлак

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

В любом случае тут проблема в скрипте, а не бинарнике.

Аватара пользователя
mariner
 
Хаб: dchub://dc.klan-hub.ru
 
Сообщения: 336
Откуда: Королев

Сообщение 24 окт 2010, 10:00

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

Не боись, я уже.

ну зачем плодить костылики?

exC0tic
 
Сообщения: 4

Сообщение 24 окт 2010, 12:01

Хм, попробовал на Ubunt-е скомпилировать сам, хаб так и не запустился, просто 0 внимания. В итоге снёс это дерьмо :-/ и поставил cent, теперь всё работает.

Аватара пользователя
mariner
 
Хаб: dchub://dc.klan-hub.ru
 
Сообщения: 336
Откуда: Королев

Сообщение 24 окт 2010, 12:25

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

exC0tic
 
Сообщения: 4

Сообщение 26 окт 2010, 13:22

Ну за 2 дня хаб упал 2 раза, и то ночью, и то как я понял из-за того что были проблемы с сетью, да

Аватара пользователя
mariner
 
Хаб: dchub://dc.klan-hub.ru
 
Сообщения: 336
Откуда: Королев

Сообщение 26 окт 2010, 14:58

Кстати, таки интересует. А чо при сборке на Ubuntu писало?

exC0tic
 
Сообщения: 4

Сообщение 26 окт 2010, 19:23

segment failed или что-то такое), когда залезает не в свою память

Аватара пользователя
mariner
 
Хаб: dchub://dc.klan-hub.ru
 
Сообщения: 336
Откуда: Королев

Сообщение 26 окт 2010, 23:09

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

Пред.След.

Вернуться в Помощь & идеи



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron