Это популярное сообщение. Rolan 22 Опубликовано 4 Октября 2010 Это популярное сообщение. Поделиться Опубликовано 4 Октября 2010 X-Ray Предлагаю всем задавать вопросы по редактированию движка здесь,а не в ковырялках. И так начнём: Сам X-Ray написан на C/C++, к нему был подключен компилятор языка LUA "lua.JIT.1.1.4". IDA Pro – это дизассемблер, альтернативы которому просто нет. Для профессиональной работы это единственный пригодный дизассемблер. Он давно стал стандартом, и если говорят о дизассемблере, то в первую очередь имеют в виду IDA Pro. IDA Pro имеет огромное количество функций и модулей, которые значительно упрощают процесс дизассемблирования. Сюда входит распознавание стандартных библиотечных функций, распознавание аргументов функций и их типов, представление всего кода в удобной древовидной форме и многое другое. Основные группы пользователей IDA Pro – это антивирусные компании, крупные разработчики ПО, специалисты по информационной безопасности. IDA Pro поставляется в двух версиях Standard и Advanced. Standard поддерживает более 20 семейств процессоров, а Advanced - более 50. Основные пользователи нашего дизассемблера: * антивирусные компании * специалисты по информационной безопасности * эксперты по программному обеспечению * а также разработчики программных защит Основная задача - превращение бинарного кода в читаемый текст программы - дополнена многими уникальными возможностями: * распознавание стандартных библиотечных функций (технология FLIRT) * интерактивность работы * развитая система навигации * система типов и параметров функций * встроенный язык программирования IDC * открытая и модульная архитектура * возможность работы практически со всеми популярными процессорами (список) * возможность работы практически со всеми популярными форматами файлов (список) * работа со структурами данных высокого уровня: массивами, структурами, перечисляемыми типами * встроенный отладчик для Win32 Типичные примеры задач, решаемые с помощью дизассемблера: * анализ вирусов, троянов и других вредоносных программ * поиск ошибок в программах * изучение полученного кода * валидация программ * оптимизация программ * разработка защит и поиск дыр в защите В настоящей версии присутствует отладчик для Win32, Win64, WinCE(ARM) и Linux программ, что делает анализ таких программ еще проще и быстрей. IDA Pro работает под MS Windows, Linux и Mac OS X. IDA Proрусский сайт интерактивного дизассемблерра IDA ProДекомпилятор HexRays - Руководство пользователяРусский форум IDA Pro P.S. Выкладывайте свои программы для работы с движком и декомпиляцией. Лет пять назад мне понадобилось подправить синтаксический анализатор компилятора Turbo C 2.0 Prof, а для этого нужно было найти в немаленьком (что-то около 180 кб) по тем временам EXE-файле нужный фрагмент. Трассировать отладчиком не было никакого терпения, популярный в то время дизассемблер Sourcer его не брал по причине этой самой величины, а DisDoc, который брал, выдавал настолько "непричесанный" результат, что невольно вспоминалось из Жванецкого - "...лекарство, которое не берет микроб, а наоборот - с ним сотрудничает". В тот момент мне на глаза и попалась IDA - интерактивный дизассемблер москвича Ильфака Гильфанова с его заманчивым "объем исходного файла - не ограничен". Однако, успев уже привыкнуть к максимально вылизанным выходным текстам Sourcer'а, я после запуска IDA обнаружил на экране полное отсутствие интеллекта - как я тогда его понимал - выразившееся в нежелании дизассемблера сразу же выдавать готовый результат, как это делал Sourcer. И, поленившись вникнуть в непривычную идеологию нового инструмента (а она оказалась поистине революционной) я забросил его на целых два года - и, как понял впоследствии, потерял из-за этого кучу времени и сил. Для сравнения скажу, что вскоре после того, как я все же разобрался с IDA и в полном смысле слова полюбил ее (а ее мощность тогда была чуть ли не вполовину ниже теперешней), я снова взялся за компилятор - ради интереса, ибо в прошлый раз нашел-таки нужное место за пару дней плотной работы). IDA сделала первичное дизассемблирование минут за пятнадцать (на DX2-66), еще пара часов ушла на основное причесывание программы, после чего требуемые фрагменты отыскивались элементарно. Программисты, знакомые с Sourcer, хорошо знают его идеологию - это полностью пакетный (работающий самостоятельно) дизассемблер; он сразу же пытается все сделать за вас все, что может, и в результате, преуспев в одном, может совершенно запустить другое. Разумеется, у Sourcer есть файл описания - DEF - в котором многое можно исправить, явно прописав типы данных, аргументов, адреса сегментов и многое другое; но для этого нужно сначала полностью "прогнать" его по файлу (а это может занять не один десяток минут), затем получить результат в виде обычного текстового файла, просмотреть его обычным же текстовым редактором и сделать нужные исправления в DEF-файле. Затем следует новый прогон и новый анализ результатов. Причем раздражает не столько рутинная работа, сколько то, что масса полезной информации о структуре программы, образующаяся в процессе работы дизассемблера, из "объемного" внутреннего представления преобразуется по окончании сеанса в пару "плоских" текстовых файлов, совершенно неудобных для изучения. Идея IDA, собственно, проста - это дизассемблер-среда, или оболочка, ее не используют в качестве вспомогательного средства - в ней живут, изучая структуру дизассемблируемой программы. Удивительно, что такая простая, по сути, мысль больше никому не пришла в голову - при наличии сотен различных инструментов визуальной разработки программ, для их анализа, кроме IDA, ничего визуального нет, хотя различных любительских (то есть - изначально сделанных не на продажу) дизассемблеров существует великое множество. IDA строит по исследуемой программе базу данных, описывающую карту типов данных, граф переходов, границы подпрограмм, адреса и форматы текстовых строк, имена меток и переменных, и многое другое. Изюминка состоит в том, что эта база, однажды возникнув, существует всегда - непрерывно пополняясь и изменяясь в результате исследования программы. При завершении сеанса работы с IDA база просто закрывается, а при следующем сеансе - открывается вновь в том же самом состоянии, и вы видите перед собой фрагмент программы, который покинули в конце прошлого сеанса. Для построения базы данных используется виртуальная память, объем которой ограничен только свободным местом на диске, поэтому в IDA можно загружать файлы любого размера. Скорость дизассемблирования тоже не имеет решающего значения - сеанс можно прервать в любой момент, и в начале следующего сеанса дизассемблирование будет продолжено с прерванного места. Вся информация о программе - как полученная автоматическим анализатором, так и введенная вами - хранится в базе в удобном для IDA представлении - в виде B-дерева. Преобразование в текстовый вид происходит только при выводе на экран, а все команды редактирования выполняются непосредственно над внутренним представлением. Таким образом, программа оказывается как бы многослойной - самый верхний слой в виде дизассемблированного текста отображается на экране, а более глубокие информационные слои превращают его в гипертекст, описывая направления переходов, отслеженные изменения значений регистров, перекрестные ссылки и прочие вроде бы мелкие, но чрезвычайно упрощающие анализ детали. IDA не является автоматическим дизассемблером - самостоятельно выполняются только очевидные операции, вроде расшифровки программного кода, определения начал/концов функций, именования входных точек и т.п. Все остальные операции должны быть явно запрошены пользователем. Это не означает, что IDA недостаточно собственного интеллекта - она всего лишь не пытается опережать вас в анализе программы. От вас требуется лишь сформулировать направление дальнейшей работы, а всю рутинную и кропотливую работу IDA берет на себя. Например, стоит указать, что неопределенный массив данных является таблицей переходов, как IDA автоматически преобразует эти данные в таблицу адресов и запустит дизассемблирование по этим адресам. Можно сказать, что IDA работает в тесном сотрудничестве с вами - в этом и заключается ее интерактивность. Фактически IDA состоит из двух почти полностью независимых подсистем - пользовательского интерфейса и фонового анализатора. Анализатор работает, как отдельный фоновый процесс - получая команды от пользователя, исследуя программу и посылая результаты обратно, где интерфейсная часть отображает их в удобном виде. Пока вы не спеша пролистываете на экране уже дизассемблированный текст - анализатор уходит дальше, и результаты его работы можно наблюдать прямо по ходу дела, когда неопределенная переменная вдруг обретает имя, шестнадцатеричный дамп превращается в текст или таблицу данных. И наоборот - команды преобразования адресов или типов данных тут же передаются анализатору, который соответствующим образом отражает их во всех связанных точках программы. При загрузке программ в форматах Windows и OS/2 - NE, PE, LX - IDA автоматически определяет тип файла (EXE/DLL/VXD и т.п.), находит все DLL, на которые ссылается файл, и загружает для них таблицы входов в виде символических имен. Профессиональная версия - IDA Pro - обладает и вовсе уникальными возможностями: при помощи технологии FLIRT (Fast Library Identification and Recognition Technology) она способна автоматически определять компилятор и служебные библиотеки, использованные при построении программы, и посредством специального набора сигнатур находить в программе стандартные функции из этих библиотек, тут же присваивая им соответствующие имена и атрибуты. Если версия RTL-библиотеки опознана по сигнатуре - в программе уже в самом начале анализа выделяются характерные служебные функции - printf, strcpy, malloc и им подобные. Разбираться в программе с уже найденными основными функциями RTL на порядок проще, чем в совершенно неисследованной. Кроме этого, в последних версиях IDA Pro реализована поддержка локальных переменных, формируемых в стековом кадре - в каждой функции анализируются обращения к стековому кадру через BP/EBP и создается список переменных в кадре. Эти переменные аналогичны обычным статическим переменным, и с ними могут работать все операции IDA - смена имени, типа данных, создание ссылки и т.п. IDA также поддерживает структуры - заранее описанный формат структуры можно привязать к переменной, и тогда IDA будет трактовать все адреса в заданном диапазоне, как поля указанной структуры - и именованные константы (enums), имена которых могут отображаться вместо числовых констант с заданными значениями. Для программ на C++ выполняется восстановление имен перегруженных функций (demangling). IDA имеет великолепную навигационную систему. Многооконный интерфейс позволяет одновременно наблюдать несколько фрагментов программы - при этом результаты изменений, сделанные в одном из окон, тут же отображаются во всех остальных. Простым нажатием Enter или щелчком мыши на операнде команды или ссылке можно перейти к месту определения операнда, метки или ссылающемуся объекту, оттуда - на другую ссылку, а потом, как угодно далеко углубившись в структуру программы, последовательным нажатием Esc вернуться к исходной точке. Можно перейти к заданной метке/переменной или сегменту, месту модификации сегментного регистра, функции, перекрестной ссылке или закладке - заранее помеченной позиции; можно искать заданное значение операнда, очередной неисследованный или, наоборот, исследованный фрагмент, фрагмент кода или данных, двоичный образец в файле или текстовую строку уже в дизассемблированном представлении (например, поиск "DX, AX" найдет все команды с этими операндами - разумеется, если все кодовые участки в программе полностью проанализированы. Помимо обычных комментариев, которыми можно снабдить каждую строку текста, IDA позволяет вводить так называемые повторяемые, или размножаемые комментарии, которые дублируются во всех строках, ссылающихся к описанному объекту. Например, если такой комментарий задан для переменной или функции, IDA будет отображать его во всех командах, ссылающихся на нее. Для того, чтобы удобно и эффективно приводить в нужный вид дизассемблируемый текст, IDA предоставляет широкий выбор команд редактирования. Наиболее употребительные команды - преобразование фрагмента в код или данные, задание типов переменных и операндов, ввод комментариев и закладок - выполняются нажатием единственной клавиши, для остальных действий предусмотрена удобная система вложенных меню. Пакеты команд можно объединять в макросы, выполняемые затем нажатием единственной клавиши. IDA позволяет чрезвычайно гибко настраивать формат отображения текста на экране, разрешая или запрещая вывод отдельных полей текста - адресов, двоичного дампа, комментариев, списков перекрестных ссылок, разделительных строк, повышающих читаемость текста. Автоматический генератор имен, присваивающий имена адресам, для которых они не были заданы явно, позволяет выбирать более десятка различных форм, включая последовательную нумерацию с возможностью перенумеровки в любой момент. Для ASCII-строк автоматически создаваемые имена могут формироваться из начальных слов самой строки, когда по имени легко догадаться о содержащемся в ней тексте. Поддерживаются также строки в формате UNICODE. Цветовое выделение полей текста улучшает его читаемость и облегчает поиск нужных имен или операндов. Для полноты возможностей предусмотрены даже команды модификации образа, которыми можно подправить исходный файл, тут же наблюдая результаты исправлений в удобном виде. Встроенный C-подобный язык программирования IDC (у меня язык не поворачивается назвать его командным языком, ибо по мощности он почти не уступает ранним версиям полного C), содержащий более двухсот разнообразных функций, позволяет описать любой по сложности алгоритм анализа и обработки программы. В комплекте имеются также готовые IDC-программы - например, для обработки образа AWARD BIOS 4.51 или расшифровки структуры Windows VxD. И наконец - после завершения исследования и "причесывания" программы ее можно вывести во внешний файл - в виде текста, ассемблерного листинга, карты компоновщика (MAP), списка различий исходного и исправленного файла (DIF) и даже исправленной версии исходного файла (EXE). В отличие от пакетных дизассемблеров, эти возможности реально нужны только для печати или перекомпиляции текста, ибо изучать структуру и работу программы несравненно удобнее в самой IDA, нежели по сгенерированному ею тексту. В ранних версиях IDA функции вывода блокировались до ввода регистрационного ключа, и многие обладатели незарегистрированных версий сильно комплексовали по этому поводу; мне же за три года обладания честно оплаченным ключом всего дважды потребовалось вывести фрагменты текста в файл, и то - для их отправки в телеконференции. Для всех программ, исследованием которых мне приходится заниматься, я храню только базы данных IDA - как наиболее информативное представление их структуры. Единственное, на мой взгляд, полезное применение функций вывода при чистом исследовании программ, не сопряженном с их модификацией - формирование карты компоновщика, из которой утилита TDMAP может сделать файл с отладочной информацией для Turbo Debugger, после чего по программе можно лазить и в TD, пользуясь символическими именами вместо адресов. IDA работает под DOS, Windows 95/NT и OS/2. Для нее существует набор разработчика (SDK), позволяющий создавать дополнительные модули - дизассемблирования файлов для новых процессоров, загрузки модулей особой структуры, внесения дополнительного интеллекта и т.п. Существуют также утилиты для построения файлов сигнатур (FLAIR - Fast Library Acquisition for Identification and Recognition) и генерации списков входных точек для файлов форматов NE/LE/LX/PE. В заключение можно сказать, что IDA, помимо исполняемых файлов для процессоров x86 под DOS, Windows и OS/2, может дизассемблировать код для процессоров Intel 8080, 860, 8051, Motorola 680x0, 6502, 6301, 6810, DEC PDP-11, а также модули NLM, библиотечные, архивные и объектные файлы, модули JAVA. О существовании в мире другого программного продукта, хотя бы близкого по возможностям к IDA, мне неизвестно. Информация об IDA доступна на www.idapro.com и www.datarescue.com (почтовый адрес - ida@datarescue.com). Там же можно взять демонстрационную версию IDA Pro, в которой сохранена вся функциональность полной, за исключением запрета на загрузку существующих баз данных, обработки файлов более 64 кб и записи результатов в файл. Упрощенная бесплатная версия доступна на www.simtel.com/pub/simtelnet/msdos/disasm. Евгений Музыченко, eugene@muzychenko.net Динамически подключаемые библиотеки (dynamic link libraries, DLL) используются для уменьшения объема исполняемого файла, за счет выделения некоторых функций в отдельный файл. Более того, функции из DLL могут использовать разные загрузочные модули, что особенно важно для жизнедеятельности Windows (например в KERNEL32.DLL содержаться функции управления памятью процессами и потоками). Для создания DLL в среде C++ Builder необходимо выбрать File\New\Dll при этом автоматически генерируется проект, компиляция которого и дает искомый результат. Для написания экспортируемых функций используется следующий синтаксис: __declspec(dllexport) void nameFunc(); При компиляции, кроме прочих, создаются файлы с расширениями *.LIB и *.DLL, содержащие экспортируемые функции. Подключение DLL в C++ Builder возможно явным и неявным способом. При неявной компоновке в секцию директив необходимо добавить строку вида: #pragma link ”nameFile.lib” а, в секцию прототипов добавить описание прототипа функции: void nameFunc(); При неявной компоновке функция вызывается по имени, необходимы файлы с расширениями *.LIB и *.DLL. Библиотека подключается к процессу в момент загрузки процесса и выгружается вместе с процессом. Явная компоновка требует использования функций WINAPI LoadLibrary() и GetProcAddress(). В данном случае функция вызывается по номеру, который ей присвоен при создании DLL. C++ Builder упорядочивает экспортируемые функции DLL в алфавитном порядке их имен. Номер функции в DLL можно получить с помощью утилиты tdump с ключом -ee. Функция LoadLibrary() принимает в качестве параметра имя библиотеки, а возвращает переменную типа HINSTANCE. Функция GetProcAddress() имеет следующий прототип: void *GetProcAddress (HINSTANCE, const char *); она принимает переменную типа HINSTANCE и символическую константу, а возвращает указатель на функцию. В приведенных листингах демонстрируется создание, неявная и явная компоновки DLL. //Пример создания DLL #include <vcl.h> #pragma hdrstop int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) { return 1; } //Выше находится заголовок DLL, генерируется автоматически double dblValue(double); double halfValue(double); __declspec(dllexport) int AreturnValue(bool); __declspec(dllexport) int CreturnValue(bool); __declspec(dllexport) int BreturnValue(bool); int CreturnValue(bool i) { i= true; return(2); } int BreturnValue(bool i) { i= true; return(3); } int AreturnValue(bool i) { i= true; return(1); } double dblValue(double value) { return value * value; }; double halfValue(double value) { return value / 2.0; } //Пример неявной компоновки DLL #ifndef useDllU1H #define useDllU1H #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //-------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TLabel *Label1; TLabel *Label2; TLabel *Label3; TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //-------------------------------------------------------- extern PACKAGE TForm1 *Form1; //-------------------------------------------------------- int AreturnValue(bool); int CreturnValue(bool); int BreturnValue(bool); #endif //-------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "useDllU1.h" #pragma package(smart_init) #pragma resource "*.dfm" #pragma link "createDllP1.lib" TForm1 *Form1; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { bool buff; Label1->Caption=AnsiString(AreturnValue(buff)); Label2->Caption=AnsiString(BreturnValue(buff)); Label3->Caption=AnsiString(CreturnValue(buff)); } //--------------------------------------------------------- //Пример явной динамической компоновки DLL #include <vcl.h> #pragma hdrstop #include "dll_cb_u.h" //-------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HINSTANCE hinst; int (*returnVa1)(bool); int (*returnVa2)(bool); int (*returnVa3)(bool); //-------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner) {//Создание формы hinst=LoadLibrary("dll_cb_c.dll"); returnVa1=(int (*)(bool))GetProcAddress(hinst, MAKEINTRESOURCE(1)); returnVa2=(int (*)(bool))GetProcAddress(hinst, MAKEINTRESOURCE(2)); returnVa3=(int (*)(bool))GetProcAddress(hinst, MAKEINTRESOURCE(3)); } //На форме имеется одна кнопка и три метки void __fastcall TForm1::Button1Click(TObject *Sender) { bool buf_b; int j; buf_b=false; if(returnVa1==NULL) Label1->Caption=AnsiString("Error"); else { j=returnVa1(buf_ B); Label1->Caption=AnsiString(j); } Label2->Caption=AnsiString(returnVa2(buf_ B)); Label3->Caption=AnsiString(returnVa3(buf_ B)); } MAKEINTRESOURCE — макрос для создания символической константы. Переменная типа HINSTANCE создается глобально. Загрузка библиотеки и присвоение указателей на функции производится в момент создания формы. Количество и тип параметров в описании функций (сигнатура функции) в DLL и указателя на функцию, в вызывающем модуле должны совпадать, совпадение имен не обязательно. DLL выгружается из памяти при завершении работы вызывающего модуля. Принудительная выгрузка DLL осуществляется функцией FreeLibrary(HINSTANCE). АССЕМБЛЕР И ПРОГРАММИРОВАНИЕ ДЛЯ IBM PC Под редакцией Еpшова В.Г. ОГЛАВЛЕНИЕ ========== Предисловие переводчика Предисловие 1. Введение в семейство персональных компьютеров IBM PC Введение Биты и байты ASCII код Двоичные числа Шеснадцатеричное представление Сегменты Регистры Архитектура персональных компьютеров Основные положения на память Вопросы для самопроверки 2. Выполнение программы Введение Начало работы Просмотр памяти Пример машинных кодов: непосредственные данные Пример машинных кодов: определенные данные Машинная адресация Пример машинных кодов: определение размера памяти Свойства отладчика Основные положения на память Вопросы для самопроверки 3. Формат языка ассемблера Введение Комментарии Формат кодирования Псевдокоманды Указатели памяти и регистров Инициализация программы Пример исходной программы Основные положения на память Вопросы для самопроверки 4. Ассемблирование и выполнение программы Введение Ввод программы Подготовка программы для выполнения Ассемблирование программы Компановка загрузочного модуля Выполнение программы Пример исходной программы Файл перекрестных ссылок Основные положения на память Вопросы для самопроверки 5. Определение данных Введение Псевдокоманды определения данных Определение байта (DB) Определение слова (DW) Определение двойного слова (DD) Определение "четверного" слова (DQ) Определение десяти байт (DT) Непосредственные операнды Псевдокоманда (директива) EQU Основные положения на память Вопросы для самопроверки 6. Программные COM-файлы Введение Различия между EXE- и COM-файлами Пример COM-файла COM-стек Отладка Основные положения на память Вопросы для самопроверки 7. Логика и организация программы Введение Команда JMP Команда LOOP Флаговый регистр Команды условного перехода Процедуры и вызовы (CALL) Стековый сегмент Программа: команды длинной пересылки Логические команды: AND, OR, XOR, TEST, NOT Программа: изменение нижнего и верхнего регистров Сдвиги и ротация Организация программы Основные положения на память Вопросы для самопроверки 8. Работы с экраном I: Основные возможности Введение Команда прерывания: INT Установка курсора Очистка экрана Команды экрана и клавиатуры: Базовая DOS Ввод на экран: стандарт DOS Программа: Ввод набора ASCII символов Ввод с клавиатуры: Базовая DOS Программа: Ввод имен с клавиатуры и вывод на экран Команды экрана и клавиатуры: Расширенная DOS Вывод на экран: Расширенная DOS Ввод с клавиатуры: Расширенная DOS Использование CR, LF, TAB для вывода на экран Основные положения на память Вопросы для самопроверки 9. Работа с экраном II: Расширенные возможности Введение Байт атрибутов Прерывания BIOS Программа: мигание, видеореверс, скроллинг Расширенные ASCII коды Другие команды ввода/вывода DOS BIOS INT 16H для ввода с клавиатуры Дополнительные функциональные клавиши Основные положения на память Вопросы для самопроверки 10. Работа с экраном III: Цвет и графика Введение Текстовый (алфавитно-цифровой) режим Графический режим Режим средней разрешающей возможности Программа: Установка цвета и графического режима Основные положения на память Вопросы для самопроверки 11. Обработка строк Введение Особенности команд обработки строк REP: Префикс повторения строки MOVS: Пересылка строки LODS: Загрузка строки STOS: Сохранение строки CMPS: Сравнение строк SCAS: Сканирование строки Сканирование и замена Альтернативное кодирование Дублирование шаблона (образца) Программа: Выравнивание справа при выводе на экран Основные положения на память Вопросы для самопроверки 12. Арифметика I: Обработка двоичных данных Введение Сложение и вычитание Беззнаковые и знаковые данные Умножение Сдвиг регистров DX:AX Деление Преобразование знака Процессоры Intel 8087 и 80287 Основные положения на память Вопросы для самопроверки 13. Арифметика II: Обработка ASCII и BCD данных Введение ASCII формат Двоично-десятичный формат (BCD) Преобразование ASCII формата в двоичный формат Преобразование двоичного формата в ASCII формат Сдвиг и округление Программа: Расчет зарплаты Основные положения на память Вопросы для самопроверки 14. Обработка таблиц Введение Определение таблиц Прямой табличный доступ Поиск в таблице Команда перекодировки (трансляции) (XLAT) Программа: Вывод шестнадцатеричных и ASCII кодов Программа: Сортировка элементов таблицы Операторы TYPE, LENGTH и SIZE Основные положения на память Вопросы для самопроверки 15. Дисковая память I: Организация Введение Объем диска Каталог Таблица распределения файлов (FAT) Основные положения на память Вопросы для самопроверки 16. Дисковая память II: Функции базовой DOS Введение Управляющий блок файла: FCB Использование FCB для создания дискового файла Программа: FCB для создания дискового файла Последовательное чтение дискового файла Программа: FCB для чтения дискового файла Прямой доступ Программа: Прямое чтение дискового файла Прямой блочный доступа Программа: Прямое чтение блока Абсолютный дисковый ввод/вывод Другие возможности Программа: Выборочное удаление файлов Основные положения на память Вопросы для самопроверки 17. Дисковая память III: Функции расширенной DOS Введение Строка ASCIIZ Номер файла и коды возврата по ошибкам Создание дискового файла Программа: Использование номера для чтения файла ASCII файлы Другие функции расширенной DOS Основные положения на память Вопросы для самопроверки 18. Дисковая память IV: Команды ввода/вывода BIOS Введение Дисковые команды BIOS Байт состояния Программа: Использование BIOS для чтения секторов Основные положения на память Вопросы для самопроверки 19. Печать Введение Управляющие символы для печати Использование расширенной DOS для печати Программа: Постраничная печать с заголовками Печать ASCII файлов и управление табуляций Печать с использованием базовой DOS Специальные команды принтера Печать с использованием BIOS INT 17H Основные положения на память Вопросы для самопроверки 20. Макрокоманды Введение Простое макроопределение Использование параметров в макрокомандах Комментарии Использование макро внутри макроопределения Директива LOCAL Подключение библиотеки макроопределений Конкатенация (&) Повторение: REPT, IRP и IRPC Условные директивы Директива EXITM Макрокоманды, использующие IF и IFNDEF условия Макрокоманды, использующие IFIDN условие Основные положения на память Вопросы для самопроверки 21. Связь между подпрограммами Введение Межсегментные вызовы Атрибуты EXTRN и PUBLIC Программа: Использование EXTRN и PUBLIC для меток Программа: Использование PUBLIC в кодовом сегменте Программа: Общие данные в подпрограммах Передача параметров Связь Бейсик-интерпретатор - ассемблер Связь Паскаль - ассемблер Связь C - ассемблер Основные положения на память Вопросы для самопроверки 22. Загрузчик программ Введение COMМAND.COM Префикс программного сегмента Выполнение COM-программы Выполнение EXE-программы Пример EXE-программы Функция загрузки или выполнения программ 23. BIOS и DOS прерывания Введение Обслуживание прерываний BIOS прерывания DOS прерывания Функции DOS INT 21H Резидентные программы Порты Генерация звука 24. Справочник по директивам ассемблера Введение Индексная память Команды ассемблера Директивы ассемблера 25. Справочник по командам ассемблера Введение Обозначение регистров Байт способа адресации Двухбайтовые команды Трехбайтовые команды Четырехбайтовые команды Команды в алфавитном порядке Приложения 1. ASCII коды 2. Шестнадцатерично-десятичные преобразования 3. Зарезервированные слова 4. Режимы ассемблирования и компановки Ответы на некоторые вопросы ЯЗЫК МАКРОАССЕМБЛЕРА IBM PC (Справочное пособие) Составитель: В.Н.Пильщиков (МГУ, ВМК) ГЛАВА 1. ОСОБЕННОСТИ ПК. ВВЕДЕНИЕ В MASM. 1.1. ОПЕРАТИВНАЯ ПАМЯТЬ. РЕГИСТРЫ. 1.2. ПРЕДСТАВЛЕНИЕ ДАННЫХ. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ 1.3. ПРЕДСТАВЛЕНИЕ КОМАНД. МОДИФИКАЦИЯ АДРЕСОВ. 1.4. СЕГМЕНТИРОВНИЕ 1.5. ПЕРЕХОДЫ 1.6. СТРОКОВЫЕ ОПЕРАЦИИ 1.7. СТЕК. ПОДПРОГРАММЫ. Полные статьи тут:http://ifolder.ru/19892288http://narod.ru/disk/26406306000/asm.rar.html А теперь самое интересное немного теории и практики: В описании STALKER Зов Припяти есть такая строчка Цитата Оперативная память: 768 Mб Это ессесно в минимальных,а в оптимальных 2 гигабайта.Бывает так,что на слабых компах глючит,поведую как сделать,так что и на 512 нормально бегал. Во всех сталкерах сделано так, использование оперативной памяти до упора, что иногда и вызывает тормоза,что за это отвечает? Многие не поверят пока не проверят,а ведь отвечает за это всего две буквы Ex. Думаю теории хватит, приступим к практике. Ну вот пожалуй и самое интересное...Практика. И так начнёмс... Для начала сделайте копию файла xrEngine.exe или ХR_3DA.exe(смотря на что делаете, ЗП , ЧН или ТЧ) Первое качаем WinHex(ссылка в шапке) или открываем любой другой Hex-редактор. Открываем файл,если делаем на ЗП то это - xrEngine.exe , а если на ЧН- xrEngine.exe , а вот на Тень Чернобыля XR_3DA.exe. Открыли и что Мы видим?Каие-то циферки и буковки,про это сразу забываем и изаем поиск,в поиск вбиваем GlobalMemoryStatusEx и ждём пока он найдёт. Вот нашли мы эту строку и что дальше?А вот теперь смотрим на те циферки , выделяем окончание Ех у GlobalMemoryStatusEx выделилось как вы заметили не только Ех но и ещё 4 цифры , вот теперь это нужно удалить , те цифры которые были выделены заменяем нулями, то есть вот так У вас выделились цифры 45 78 их заменяем нулями 00 00 Вот и всё, сохраняем. Запускаем игру и смотрим, игра больше не тормозит у кого тормозила. Цитата(Kolmogor) Вот исходники доработок для ЗП , в том числе и машинки: http://www.sendspace.com/file/3bo9xx Инструкция по изменению плотности травы. Параметр меньше 0.02 не ставить - Колмогор писал что начинает лагать 1. Открываем айда 2. Открываем айда_виев 3. Теперь ищем что нам нужно найти. Нам сейчас нужно найти r__detail_density? Тогда жмем ctrl+t и вводим r__detail_density 4. Находим функцию и тщательно ее разбираем (я ее полностью разбирать не буду, а только укажу где задаются параметры: fld ds:flt_10064400 --нижнее ограничение равное 0.6 or dword_1007CACC, 8 sub esp, 8 fstp [esp+30h+var_2C] mov ecx, offset unk_1007CA9C fld ds:flt_10064380 --верхнее ограничение равное 0.2 fstp [esp+30h+var_30] push offset aSs; "ЪЩЩ>" push offset aR__detail_dens; "r__detail_density" call ds:??0CCC_Float@@QAE@PBDPAMMM@Z; CCC_Float::CCC_Float(char const *,float *,float,float) push offset sub_1005E080; void (__cdecl *)() call _atexit add esp, 4 Если вы заметили, то что бы трава стала плотней нужно уменьшить параметр, а что-бы травы стало меньше нужно параметр увеличить. 5. Нам нужно увеличить плотность травы: следовательно нужно изменить верхнее ограничение. Как это сделать? Есть 3 варианта: Первый и самый логичный вариант: изменить переменную которая задает. Но тут есть небольшой подвох на котором я попался. Этой переменной может пользоваться не одна функция, а несколько. И не ясно что вы можете сломать, поменяв одну циферку в переменной... Второй: взять другую уже существующую переменную. Хороший вариант которым я и воспользовался. Но и тут есть недочет - переменных в ддлке не так уж и много и можно просто не найти нужную Третий: создать переменную. Отличный вариант. Единственный минус - я не знаю как это сделать Я пошел по второму пути. Два раза шелкнув на ds:flt_10064380 айда отправила меня в дебри под названием .rdata. Там я нашел переменную которая называлась - flt_1006452C и которая имела значение 0.0720999 Вообще-то, как я понял, flt_1006452C - не является названием переменной. Это так сказать сборка из 2 показателей - (тип числа)_(оффсет) В нашем случае это число типа float которое находится в 1006452C. Ну чтож приступим к редактированию! 6. Отправляем в самое начало файла. Как? Сверху есть что-то типа статус бара - строка состоящая из синего,серого,черного цвета. Нажимаем там в любом месте мышкой и ведем влево до конца 7. Опять ищем r__detail_density. Находим в этой функции fld ds:flt_10064338. Дальше самое интересное. Жмем на ХЕКС_ВИЕВ и там у нас выделяются какие-то цифры. Это наше 10064338 только написано наоборот. Сравните: 38 43 06 10 10 06 43 38 Похоже, не правда? Начинаем редактировать. нам нужно поменять 4338 на 452C т.к. в этом и есть различие. Жмем правой кнопкой мыши на этих цифрах и выбираем пункт Edit. Меняем 38 43 на 2С 45. Дальше жмем где нибудь в коде. Это нужно сделать обязательно. После этого жмем правой кнопкой мыши и выбираем commit changes. Но айда не меняет исходный файл. В нашем случае мы можем только создать файл изменений. Делается это так - Файл - Produce file - Create DIF file. Назовем его test. DIF файл можно открыть при помощи блокнота и посмотреть что вы сделали. Теперь так сказать соединит этот файл и дллку. Это можно сделать при помощи bpatch. Качаем и смотрим и запускаем bpatch.cmd. Я думаю что вы сможете его изменить сами если нужно будет. Там все элементарно. Огромное спасибо Kolmogor'у и malandrinus'у. Если бы не они, я бы ничего не сделал. Спасибо вам еще раз. Спасибо и Ролану, с которым я очень много беседовал и тоже узнал много чего. 5 5 4 Ссылка на комментарий
Серый Волк 841 Опубликовано 5 Октября 2010 Поделиться Опубликовано 5 Октября 2010 Ну, раз создали тему, и народ здесь есть, может объявятся мастера программирования, которые реально могут управляться с файлами движка ? А то некоторые вещи без ковыряния .dll ну никак не хотят получаться... P.S.Ненадо тут просить: "мол сделайте то и это" А вот здесь в корне не согласен ! Действительно программистов обладающих навыками работы на том уровне, чтоб игра работала в дальнейшем без сбоев - единицы. И как, скажите на милость, мне внести задуманные изменения/дополнения в игру, если без редакции движка ну никак не обойтись (пусть и по мелочи совсем, как кажется). И затрачено времени много очень, и сил, и работа почти закончена - бац - тупик - движок - необходимо изменить параметры. А изучать даже основы программирования - процесс небыстрый и с учетом занятости работой и семьёй - года на 2-3 хватит - за это время желание может отпасть, а могут обстоятельства измениться. А мод так и не будет закончен, хотя время и силы потрачены. И в конце концов - попросить я думаю всегда можно, а вот получить желаемое... дай бог каждому. 2 1 Новое меню и интерфейс для ЗП, Наличные деньги для SGM 1.7, Новый инвентарь для ЗП, Новые меню для Солянки и Солянки+ООП+К+МА Ссылка на комментарий
_Призрак_ 11 Опубликовано 5 Октября 2010 Поделиться Опубликовано 5 Октября 2010 Ну давай Ролан с тобой подумаем вот над каким вопросом. Все знаю что в ЗП кол-во артов на поясе записано в двигателе. Я говорил с колмогором по этому поводу и даже копался в движке но ничего не нашел кроме строку belt и дальше 2 пробела (00 00). Собственно вопрос - где та цифра 5 которая жестоко ограничивает читерство? Freedom Ссылка на комментарий
C2D 1 Опубликовано 5 Октября 2010 Поделиться Опубликовано 5 Октября 2010 (изменено) Есть правленые dll-ки для увелечения плотности травы на r1 и r2.Такое было,дальность прорисовки-не слышал о таком... Изменено 5 Октября 2010 пользователем C2D Ссылка на комментарий
Rolan 22 Опубликовано 5 Октября 2010 Автор Поделиться Опубликовано 5 Октября 2010 _Призрак_, хм...Странно,значит остаётся 2 варината,декомпиляция или где-то что-то в скриптах,но точно я в этом не уверен.Подождём ответов профи. P.S.Поговорю с одним человеком,может знает Ссылка на комментарий
Серый Волк 841 Опубликовано 5 Октября 2010 Поделиться Опубликовано 5 Октября 2010 (изменено) _Призрак_, Судя по .ltx-файлам, я вижу картину следующую: system.ltx max_belt = 5 ;16 artefact.ltx belt = true slot = -1 ;10 weapons.ltx ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; AMUNITION ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [ammo_base]:identity_immunities,default_weapon_params ;belt = true; slot = -1 единственное место где фигурирует цифра 5 (реальное кол-во слотов в игре) - system.ltx, а в artefact.ltx - под слоты зарезервировано 11 мест, но -1 под патроны на пояс (но закомментирован) и возможно слот 0 тоже где-то под что-то планировался. То есть разрабы изначально оставили места для увеличения кол-ва мест на поясе (и видимо не только под арты). Все знают что в ЗП кол-во артов на поясе записано в двигателе. Я говорил с колмогором по этому поводу и даже копался в движке но ничего не нашел кроме строки belt и дальше 2 пробела (00 00). Собственно вопрос - где та цифра 5 которая жестоко ограничивает читерство? Вопрос: а откуда все знают что кол-во слотов на поясе зашито в движок ? Может так решили потому-что в конфигах или скриптах найти не смогли ? ну, а дальше, сарафанное радио... Может ПЫСы хорошо спрятали, а может мы плохо ищем. Обычно то, чего найти не можешь долго и нудно - на поверхности, смотришь и не замечаешь. Изменено 5 Октября 2010 пользователем Серый Волк Новое меню и интерфейс для ЗП, Наличные деньги для SGM 1.7, Новый инвентарь для ЗП, Новые меню для Солянки и Солянки+ООП+К+МА Ссылка на комментарий
Rolan 22 Опубликовано 5 Октября 2010 Автор Поделиться Опубликовано 5 Октября 2010 (изменено) Мне тут мысль реально бредовая в голову пришла...короче значение выставлено 5 , а если к примеру выставить в конфигах костюма 6 ? Думаю так же ничего не произойдёт,в ТЧ можно было так,ну любой костю вешай столько сколько укажешь и ведь всё это видно,а может мы просто не видим этого 6 слота?Может он тупо в xml файле не сделан?Не задумывались? Изменено 5 Октября 2010 пользователем Rolan Ссылка на комментарий
Серый Волк 841 Опубликовано 5 Октября 2010 Поделиться Опубликовано 5 Октября 2010 (изменено) Rolan, Я уже пробовал по разному, и так тоже: менял во всех кофигах кол-во слотов под арты -результат пока нулевой. С ячейками быстрыми дальше продвинулся: у меня их 8 отображается, но работают реально 4, причем новые задваивают предмет на обе ячейки (старую и новую), когда в новую ячейку его кладешь. даже клавиши новые назначил для новых ячеек - но в этом случае в основном меню игры "ОПЦИИ" не открываются. Наковырял интересную статейку : Динамически подключаемые библиотеки (dynamic link libraries, DLL) используются для уменьшения объема исполняемого файла, за счет выделения некоторых функций в отдельный файл. Более того, функции из DLL могут использовать разные загрузочные модули, что особенно важно для жизнедеятельности Windows (например в KERNEL32.DLL содержаться функции управления памятью процессами и потоками). Для создания DLL в среде C++ Builder необходимо выбрать File\New\Dll при этом автоматически генерируется проект, компиляция которого и дает искомый результат. Для написания экспортируемых функций используется следующий синтаксис: __declspec(dllexport) void nameFunc(); При компиляции, кроме прочих, создаются файлы с расширениями *.LIB и *.DLL, содержащие экспортируемые функции. Подключение DLL в C++ Builder возможно явным и неявным способом. При неявной компоновке в секцию директив необходимо добавить строку вида: #pragma link ”nameFile.lib” а, в секцию прототипов добавить описание прототипа функции: void nameFunc(); При неявной компоновке функция вызывается по имени, необходимы файлы с расширениями *.LIB и *.DLL. Библиотека подключается к процессу в момент загрузки процесса и выгружается вместе с процессом. Явная компоновка требует использования функций WINAPI LoadLibrary() и GetProcAddress(). В данном случае функция вызывается по номеру, который ей присвоен при создании DLL. C++ Builder упорядочивает экспортируемые функции DLL в алфавитном порядке их имен. Номер функции в DLL можно получить с помощью утилиты tdump с ключом -ee. Функция LoadLibrary() принимает в качестве параметра имя библиотеки, а возвращает переменную типа HINSTANCE. Функция GetProcAddress() имеет следующий прототип: void *GetProcAddress (HINSTANCE, const char *); она принимает переменную типа HINSTANCE и символическую константу, а возвращает указатель на функцию. В приведенных листингах демонстрируется создание, неявная и явная компоновки DLL. //Пример создания DLL #include <vcl.h> #pragma hdrstop int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) { return 1; } //Выше находится заголовок DLL, генерируется автоматически double dblValue(double); double halfValue(double); __declspec(dllexport) int AreturnValue(bool); __declspec(dllexport) int CreturnValue(bool); __declspec(dllexport) int BreturnValue(bool); int CreturnValue(bool i) { i= true; return(2); } int BreturnValue(bool i) { i= true; return(3); } int AreturnValue(bool i) { i= true; return(1); } double dblValue(double value) { return value * value; }; double halfValue(double value) { return value / 2.0; } //Пример неявной компоновки DLL #ifndef useDllU1H #define useDllU1H #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //-------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TLabel *Label1; TLabel *Label2; TLabel *Label3; TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //-------------------------------------------------------- extern PACKAGE TForm1 *Form1; //-------------------------------------------------------- int AreturnValue(bool); int CreturnValue(bool); int BreturnValue(bool); #endif //-------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "useDllU1.h" #pragma package(smart_init) #pragma resource "*.dfm" #pragma link "createDllP1.lib" TForm1 *Form1; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { bool buff; Label1->Caption=AnsiString(AreturnValue(buff)); Label2->Caption=AnsiString(BreturnValue(buff)); Label3->Caption=AnsiString(CreturnValue(buff)); } //--------------------------------------------------------- //Пример явной динамической компоновки DLL #include <vcl.h> #pragma hdrstop #include "dll_cb_u.h" //-------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HINSTANCE hinst; int (*returnVa1)(bool); int (*returnVa2)(bool); int (*returnVa3)(bool); //-------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner) {//Создание формы hinst=LoadLibrary("dll_cb_c.dll"); returnVa1=(int (*)(bool))GetProcAddress(hinst, MAKEINTRESOURCE(1)); returnVa2=(int (*)(bool))GetProcAddress(hinst, MAKEINTRESOURCE(2)); returnVa3=(int (*)(bool))GetProcAddress(hinst, MAKEINTRESOURCE(3)); } //На форме имеется одна кнопка и три метки void __fastcall TForm1::Button1Click(TObject *Sender) { bool buf_b; int j; buf_b=false; if(returnVa1==NULL) Label1->Caption=AnsiString("Error"); else { j=returnVa1(buf_; Label1->Caption=AnsiString(j); } Label2->Caption=AnsiString(returnVa2(buf_); Label3->Caption=AnsiString(returnVa3(buf_); } MAKEINTRESOURCE — макрос для создания символической константы. Переменная типа HINSTANCE создается глобально. Загрузка библиотеки и присвоение указателей на функции производится в момент создания формы. Количество и тип параметров в описании функций (сигнатура функции) в DLL и указателя на функцию, в вызывающем модуле должны совпадать, совпадение имен не обязательно. DLL выгружается из памяти при завершении работы вызывающего модуля. Принудительная выгрузка DLL осуществляется функцией FreeLibrary(HINSTANCE). Изменено 16 Октября 2010 пользователем Серый Волк Новое меню и интерфейс для ЗП, Наличные деньги для SGM 1.7, Новый инвентарь для ЗП, Новые меню для Солянки и Солянки+ООП+К+МА Ссылка на комментарий
Rolan 22 Опубликовано 5 Октября 2010 Автор Поделиться Опубликовано 5 Октября 2010 Серый Волк, Можно на это чудо посмотреть?Ну хотя бы скрином. Ссылка на комментарий
Серый Волк 841 Опубликовано 5 Октября 2010 Поделиться Опубликовано 5 Октября 2010 (изменено) Я не жадный: В принципе увеличением кол-ва быстрых ячеек я пытаюсь создать аналог разгрузки которая будет непосредственно в меню инвентаря. Уважаю труд по реализации разгрузки и подсумков команды NLC, но на мой взгляд, так будет правильней. Помимо быстрых ячеек, хочу визуализировать скрытый инвентарь (фонарик, нож и т.д.) в свои отдельные слоты. Как будет выглядеть сие чудо, если интересно кому - выложу скрин (пока ещё не закончена работа). Изменено 5 Октября 2010 пользователем Серый Волк Новое меню и интерфейс для ЗП, Наличные деньги для SGM 1.7, Новый инвентарь для ЗП, Новые меню для Солянки и Солянки+ООП+К+МА Ссылка на комментарий
goust 1 Опубликовано 5 Октября 2010 Поделиться Опубликовано 5 Октября 2010 Rolan А,чё он у меня XR_3DA сохранять не хочет,пишет что файл типа не может быть сохранён VODKA connected people... Ссылка на комментарий
Rolan 22 Опубликовано 5 Октября 2010 Автор Поделиться Опубликовано 5 Октября 2010 goust, Возможно он у тебя открыт ещё где-то помимо hex-редактора. Серый Волк, тут дело странное...Да, у тебя они на кнопки забиндены? Ссылка на комментарий
iDreD 5 Опубликовано 5 Октября 2010 Поделиться Опубликовано 5 Октября 2010 (изменено) Rolan, их нереально забиндить на кнопки скриптом. Нужно смотреть родные ячейки и делать на их основе. Изменено 5 Октября 2010 пользователем iDreD Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
Rolan 22 Опубликовано 5 Октября 2010 Автор Поделиться Опубликовано 5 Октября 2010 iDreD, Хм...Нереально говоришь?Хех, ну тогда....Через движок чтоль? Ну не знаю,если кому нужно, могу приложить коды клавишь клавиатуры. Ссылка на комментарий
Серый Волк 841 Опубликовано 5 Октября 2010 Поделиться Опубликовано 5 Октября 2010 (изменено) iDreD, я забиндил новые ячейки на кнопки через ui_keybinding.xml и после этого меню "ОПЦИИ" перестало открвываться, думаю потому, что они не прописаны в xrGame. Старые 4 ячейки прописаны, и даже описание забинденных кнопок там прописано. goust, посмотри по редакторам здесь, у меня без проблем установился и до сих пор работает чем несколько раз в личку, лучше один раз здесь выложу, если народ не против. Изменено 5 Октября 2010 пользователем Серый Волк Новое меню и интерфейс для ЗП, Наличные деньги для SGM 1.7, Новый инвентарь для ЗП, Новые меню для Солянки и Солянки+ООП+К+МА Ссылка на комментарий
Серый Волк 841 Опубликовано 6 Октября 2010 Поделиться Опубликовано 6 Октября 2010 (изменено) PavelSnork, этот модик посмотри и скрины его. там увеличена дальность прорисовки вообще всего, может наковыряешь чего интересного. 48celt48, что именно выложить? Изменено 6 Октября 2010 пользователем Серый Волк Новое меню и интерфейс для ЗП, Наличные деньги для SGM 1.7, Новый инвентарь для ЗП, Новые меню для Солянки и Солянки+ООП+К+МА Ссылка на комментарий
48celt48 0 Опубликовано 6 Октября 2010 Поделиться Опубликовано 6 Октября 2010 (изменено) Ну разгрузку какую ты делаеш , кстати а что если сделать все проще увеличить кол-во слотов под арты и этот слот прописать всему крроме оружия тоесть получиться хорощий аналог разгрузки. Извиняюсь. || \/ Изменено 6 Октября 2010 пользователем 48celt48 Ссылка на комментарий
Серый Волк 841 Опубликовано 6 Октября 2010 Поделиться Опубликовано 6 Октября 2010 (изменено) кстати а что если сделать все проще увеличить кол-во слотов под арты А ты попробуй под арты ... я рассказал только о том, что на данный момент уже получилось, дальше ещё пока ковыряю, как доковыряю - выложу. Изменено 6 Октября 2010 пользователем Серый Волк Новое меню и интерфейс для ЗП, Наличные деньги для SGM 1.7, Новый инвентарь для ЗП, Новые меню для Солянки и Солянки+ООП+К+МА Ссылка на комментарий
iDreD 5 Опубликовано 6 Октября 2010 Поделиться Опубликовано 6 Октября 2010 Серый Волк, обсуждалось уже тыщу раз - забинтить хотя бы скриптово на Х-рэе можно только клавишу Таb. Для быстрых ячеек ещё хуже, ибо клавиши от F5, F6 и далее не прописаны в хrГейме (?). Поэтому смысла ковырять ячейки только в игре нет. Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
sabir 0 Опубликовано 6 Октября 2010 Поделиться Опубликовано 6 Октября 2010 (изменено) 1. Называть файлы лежащие в папке bin движком не правильно - это скомпилированные библиотеки функций движка. Сам движок нам не будет доступен никогда, ну если только кто-нибудь из нас миллионер и не купит у разработчиков. 2. Многие посчитали вид инвентаря ЗП лучшим и красивым. Однако он был изначально сделан не для красоты и удобства, а для затруднения редактирования. 3. Профи действительно есть. Только с какой радости они будут расписывать здесь способы редактирования папки bin. 4. Редактировать ехе и dll Notepadom++ - извините ребята но это дикость, а потом вы еще удивляетесь почему у вас ничего не работает и глючит. Изменено 6 Октября 2010 пользователем sabir 1 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти