Xcache баг-трекер декомпилятора

Статус
В этой теме нельзя размещать новые ответы.
В vars то переменная есть, но нет ссылки на нее в теле switch
Код:
10 14 > JMP ->18
15 > PRINT ~5 3
16 FREE ~5
11 17 > JMP ->19
18 > > JMP ->15
Тут нигде нет !2. В общем нормально пока свичи работают, по другому не сделать.
 
дезенд вообще такой код не понимает:D
PHP:
<?php
/*********************/
/*                  */
/*  Version : 5.1.0  */
/*  Author  : RM    */
/*  Comment : 071223 */
/*                  */
/*********************/
 
switch ( $q[1] )
{
case "1" :
    print 1;
}
do
{
    print "2";
    break;
} while ( 1 );
do
{
    print 3;
    break;
} while ( 1 );
?>
да и не надо главное дублей нет, и замечательно
 
Да он много чего не понимает, например, предыдущий патч ($a->{'code'.'name'}()) и патч на try-catch, в чем то мы его точно переплюнули ))

upd: dezend вообще убил код, сделал бесконечные циклы вместо одного прохода. А нет, break проглядел ))
 
вообще на переспективу мне кажется нужно будет расширить объемы "рабочей памяти кеша" , т.к. на больших файлах он думает и ничего не делает.
пример яз ядер декодеров
Код:
////////////////////////////////
RM core
////////////////////////////////
/* Stack setting */
#define DEFAULT_STRING_LENGTH 4096
#define DEFAULT_STACK_SIZE 16
 
/* Buffer size */
#define BUFFER_SIZE 4096
#define SMALL_BUFFER_SIZE 1024
#define LARGE_BUFFER_SIZE 8192
 
/////////////////////////////////
qinvent core
/////////////////////////////////
#define OPC_STACK_SIZE 1024
#define OPCS_MAX_LEN 16
#define DEZ_VARS_NUM 1024
#define NODE_STACK_SIZE 2048
 
for files > 500 kb
полистав всчера исходники кеша кроме числа 1024 более не нашол связанного с памятью, это еще что присылали недавно гардиана файл 9 мегабайт там и дезенд сказал нафиг надо.
UPD : ниже для него самый жестский и не победимый файл (для кеша)
И файл 9 мег ради шутки 1 раз просто такой видел:D Для просмотра ссылки Войди или Зарегистрируйся
 

Вложения

  • engine.class.rar
    19,8 KB · Просмотры: 33
Там проблема не кэша, а класса декомпиляции, где-то что-то лишнее делает, т.к. phpdop.phpr отрабатывает быстро. Нужно профайлер подцепить, посмотреть где затыки.
 
Посмотрел дамп - названия переменных сохраняются в массиве $EX['op_array']['vars'][], но при этом в самом дереве $EX['op_array']['opcodes'] привязки к элементам массива нет.
Но с другой стороны - конструкция switch с одним default - выполняется не зависимо от переменной в условии, поэтому, скорее всего, это не баг, а фича интерпретатора php, который оптимизирует код с потерей лишней информации.
 
Я тут нашел операцию-убийцу, которая сжирает все время (вызывая бешенное количество раз str + Decompile_BinOP->toCode)
PHP:
<?php
"1" . "2" . "3" . "4" . "5" . "6" . "7" . "8" . "9" . "10" . "11" . "12" . "13" . "14" . "15" . "16" . "17" . "18" . "19" . "20" . "21";
?>
Чем больше элементов, тем дольше )) Вообщем надо чинить CONCAT, точнее даже просто бинарные операции.
 
1. Указывайте имя архива, загруженного с bitbucket, в нем есть версия. Отдельно вести ченджлог нет времени и особого желания.
НМВ удобней просто номер версии в шапке
2. Сравните размер исходников, на которых подвисает, а на которых нет, сильно различаются?

размер не отличается, кое-где меньше, кое-где больше

upd2: может быть сообщения о багах будем постить в багтрекер Для просмотра ссылки Войди или Зарегистрируйся ?
в рамках пары человек наверное не стоит, когда будет человек 10 тогда можно подумать
 
Сделал турбо-патч (включил кэширование результата в binop и triop), теперь раскодирует влет. Сравнил пару файлов, вроде результат одинаковый, но всеже, нужно проверять. Для просмотра ссылки Войди или Зарегистрируйся
 
Сделал турбо-патч (включил кэширование результата в binop и triop), теперь раскодирует влет. Сравнил пару файлов, вроде результат одинаковый, но всеже, нужно проверять. Для просмотра ссылки Войди или Зарегистрируйся
оно самое тот файл пролетел который стопорился выше постом, хм
баги хоть появились
1.$login=$_SESSION["login"]; -> list() = $_SESSION;
2.$_SESSION["authorized"]="yes"; -> $$_SESSION["authorized"] = "yes";
3. в этом не уверен, но $editor='<textarea id="'.$name.'" name="'.$name.'" style="width:100%;height:400px;" class="mceEditor">'.$content.'</textarea>'; -> $editor = "<textarea id=\"" . $name . "\" name=\"" . $name . "\" style=\"width:100%;height:400px;\" class=\"mceEditor\">" . $content . "</textarea>";

4. if (preg_match("/^[0-9]{1,}$/i",$id)) { -> if (preg_match("/^[0-9]{1,}\$/i", $id)) {
[/spoil]
и опять свитчи дубликаты (оригинал)

[spoil]
PHP:
<?php
function assignCongratulation() {
global $smarty;
if (isset($_SESSION["congratulation"]))
if (is_array($_SESSION["congratulation"])) {
foreach ($_SESSION["congratulation"] as $congrat) {
$this->congratulation[]=$congrat;
}
unset($_SESSION["congratulation"]);
}
$_SESSION["congratulation"]=$this->session_congratulation;
$smarty->assign("congratulation",$this->congratulation);
}
 
//êîïèðóåì îáúåêò â ôîòêó\âèäåî è ò.ï.
function copyObject($id_object,$id_cat=0,$create_thumb=false,$small_width=0,$small_height=0) {
global $db;
global $settings;
global $config;
if ((preg_match("/^[0-9]{1,}$/i",$id_object)) && (preg_match("/^[0-9]{1,}$/i",$id_cat))) {
$object=$this->getObjectByID($id_object);
if (is_array($object)) {
switch ($object["format"]) {
case "image":
//êàðòèíêà
if ($db->query("insert into `%photos%` values (null,$id_cat,'".sql_quote($object["preview"])."','".sql_quote($object["filename"])."','','','".$object["caption"]."','','','',0,1,'','','')")) {
$sql="";
$id_photo=mysql_insert_id();
if ($object["preview"]=="") {
$thumb=$this->createSystemThumbnail($id_photo,$object["filename"],"image");
$sql.=" ,preview='$thumb'";
}
if ($create_thumb) {$thumb_middle=$this->createThumbnail($object["filename"],$settings["medium_x"],$settings["medium_y"],false,100,"middle");
if ($small_width==0 || !preg_match("/^[0-9]{1,}$/i",$small_width)) {
$small_width=$settings["small_x"];
}
if ($small_height==0|| !preg_match("/^[0-9]{1,}$/i",$small_height)) {
$small_height=$settings["small_y"];
}
$thumb_small=$this->createThumbnail($object["filename"],$small_width,$small_height,false,100,"small");
if ($thumb_middle && $thumb_small)
$db->query("update %photos% set `medium_photo`='$thumb_middle',`small_photo`='$thumb_small' $sql where id_photo=$id_photo");
 
} else {
if (@$thumb && $object["preview"]=="")
$db->query("update %photos% set `preview`='$thumb' where id_photo=$id_photo");
}
 
return $id_photo;
} else {
echo mysql_error();
return false;
}
break;
case "video":
//âèäåî
if ($db->query("insert into `%videos%` values (null,$id_cat,'','".sql_quote($object["filename"])."','".$object["caption"]."','','','',0,1,'','','','')")) {
return true;
} else {
return false;
}
break;
case "music":
//àóäèî
/*ïîëó÷àåì òåãè*/
if (function_exists("id3_get_tag")) {
$tag = @id3_get_tag($config["pathes"]["user_music"].$object["filename"]);
/*êîíåö ïîëó÷åíèÿ òåãîâ*/
$label='';
$genre='';
$caption=$object["caption"];
if (isset($tag["composer"])) $label=$tag["composer"];
if (isset($tag["genre"])) $genre=$tag["genre"];
if (isset($tag["artist"])) {
$caption=$tag["artist"];
if (isset($tag["album"])) {
$caption.=' - '.$tag["album"];
if (isset($tag["title"])) {
$caption.=' - '.$tag["title"];
}
}
} else {
if (isset($tag["title"])) {
$caption=$tag["title"];
}
}
} else {
$caption=$object["caption"];
$label='';
$genre='';
}
if ($db->query("insert into `%audio%` values (null,$id_cat,'','".sql_quote($object["filename"])."','".$caption."','','','',0,1,'','".sql_quote($label)."','','".sql_quote($genre)."','')")) {
return true;
} else {
return false;
}
break;
case "flash":
//ôëåø
if ($db->query("insert into `%flash%` values (null,$id_cat,'','".sql_quote($object["filename"])."','".$object["caption"]."','','','',0,1,'','')")) {
return true;
} else {
return false;
}
break;
}
} else {
return false;
}
} else {
return false;
}
}
?>
[/spoil]
матюг нотиса в декомпиляторе Notice: Undefined variable: lastresvar но по коду вроде он ничего не ест
скобки появились в нек местах (может не баг)
[spoil]$db->query("delete from %blocks% where id_block=$id_block"); -> $db->query("delete from %blocks% where id_block={$id_block}");
вроде бы что заметил ) отметил) по тому тяжвесу
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху