![]() |
eXeL@B —› Основной форум —› py2exe или ???( продолжение закрытой темы rC) |
Посл.ответ | Сообщение |
|
Создано: 19 апреля 2006 12:38 · Личное сообщение · #1 |
|
Создано: 19 апреля 2006 13:13 · Личное сообщение · #2 |
|
Создано: 19 апреля 2006 14:48 · Личное сообщение · #3 |
|
Создано: 19 апреля 2006 15:29 · Личное сообщение · #4 Имхо секция pythonscript встречается для 2.2/2.3 версий питонского кода,обработаных py2exe. Откомпилил парочку разных hello, world -> получил дичайшее количество мусора до реального кода в том месиве, что вставляется в exe. Т.е. все таки заголовок там покоцан нормально. Но! Вместе с тем когда этот код скармливается интерпретатору прямо из экзешника - тот даже не думает давиться.... ![]() ![]() |
|
Создано: 19 апреля 2006 16:02 · Поправил: tundra37 · Личное сообщение · #5 Использовал py2exe-0.3.3.win32-py2.2.exe и python 2.2 Задавал такой файл # setup-h.py from distutils.core import setup import py2exe setup(name="server",scripts=["helloapp.py"]) и соотвественно python setup-h.py py2exe - никаких нестандартных секций в helloapp.exe Блин, ну нет у меня док по py2exe для 2.2 То что написано на офсайте не годится для старых версий, а у меня оказывается получился zip внутри. Там куча .py и helloapp.py нету ![]() Ткни носом неразумного. Почитаю, тогда смогу помочь. Просто охота хоть чуть понять в этом питоне. И кто его только придумал. Без ящика водки не осилишь. +++++++++++++++++++++++++++++++++++ Так - в новом py2exe действительно строится секция pithonscript. Придется версию 2.4 ставить или поискать py2exe с этой опцией. ![]() |
|
Создано: 19 апреля 2006 18:03 · Личное сообщение · #6 ![]() Скачал я питон 2.3.5 и поставил вместе со "свеженьким" py2exe. Секцию мне конечно получить пока не удалось, но зато после "второго взгляда" нашел вот это в build_exe.py Твой "покоцанный" заголовок, как на ладони : si = struct.pack("iiii", 0x78563412, # a magic value, self.optimize, self.unbuffered, len(code_bytes), ) + relative_arcname + "\000" script_bytes = si + code_bytes + '\000\000' self.announce("add script resource, %d bytes" % len(script_bytes)) if not self.dry_run: add_resource(unicode(exe_path), script_bytes, u"PYTHONSCRIPT", 1, True) code_bytes - это тело скрипта, там где я и говорил. Все-таки я ковыряюсь в хексе не один десяток лет ![]() ![]() |
|
Создано: 20 апреля 2006 11:30 · Личное сообщение · #7 Подводим итог: 1. Это был py2exe 2. py2exe (поздние версии) пишет в ресурсы "секцию" PYTHONSCRIPT, в которую записывает 0x78563412 + два слова + длина + название файла библиотеки + boot-code + script Дополнительные файлы компилируются и зипуются в файл библиотеки. 3. На wasm.ru лежат тексты декомпилятора питона, но без питона они бесполезны. Декомпиляторы для версий 2.0, 2.2 и 2.3 разные и в версии wasm для 2.3 нет или неполный. 4. Нарыл тексты декомпилятора для 2.3 и выкладываю. В каталоге test убрал файл на 980 кило, я думаю не сильно он нужен. ![]() ![]() |
|
Создано: 20 апреля 2006 11:39 · Личное сообщение · #8 |
|
Создано: 20 апреля 2006 12:38 · Поправил: tundra37 · Личное сообщение · #9 rC пишет: Длина чего? бут-код+скрипт rC пишет: По чём конец буткода определял? Вообще-то это твоя задача - я инфу дал. А так, эвристика : ищем последнее boot_common.pys , несколько мусорных байт и любимый 0х63 - это начало нашего кода. А вообще-то декомпилер должен и бут-код декомпилить. На всякий случай - вот препарированный фук. Сигнатура в 2.2 - другая. Здесь для 2.3 +++++++++++++++++++++ Кстати, не сообразил, что могу запустить. Пашет "кролик". Traceback (most recent call last): File "app.py", line 10, in ? ImportError: No module named qsim.model.qlogging ![]() |
|
Создано: 20 апреля 2006 12:54 · Личное сообщение · #10 |
|
Создано: 21 апреля 2006 11:16 · Поправил: tundra37 · Личное сообщение · #11 Все-таки дурной этот питон. Нашел в нем функцию dis() и она мою обрезанную версию не хочет. Сделал вместе с boot-code - выдает что-то осмысленное, но без операндов. Зато понял, что хранится в 5-ти байтах, перед boot-code - это длина в строках boot-code. Т.е. можно декомпилировать все и потом отсечь boot-code. Новый "кролик" прилагается. +++++++++++++++++++++++++ Нашел причину. Jump-ы в питоне делаются по номерам строк и функция append тупо их сдвигает. Поэтому без boot-code низзя : File "dis1.py", line 188, in findlabels oparg = ord(code[i]) + ord(code[i+1])*256 IndexError: string index out of range Да, забыл конечно - dys.py компилит и потом вызывает dis(code). Я сделал dis1.py , убрав строчку code = compile(source, fn, "exec") Вообщем - этот кролик будет жить. ![]() ![]() |
|
Создано: 25 апреля 2006 19:18 · Личное сообщение · #12 tundra37 пишет: Вообщем - этот кролик будет жить. Оказалось, что первый вариант лучше. Поставил я декомпилер в Линуксе и нормальный текст программы выдался. Т.к. атач уже испарился - повторяю. ![]() ![]() |
![]() |
eXeL@B —› Основной форум —› py2exe или ???( продолжение закрытой темы rC) |