Перейти к контенту

Редактирование движка X-Ray


Rolan

Рекомендуемые сообщения

Ну, раз создали тему, и народ здесь есть, может объявятся мастера программирования, которые реально могут управляться с файлами движка ? А то некоторые вещи без ковыряния .dll ну никак не хотят получаться...

 

P.S.Ненадо тут просить: "мол сделайте то и это"

А вот здесь в корне не согласен !

Действительно программистов обладающих навыками работы на том уровне, чтоб игра работала в дальнейшем без сбоев - единицы. И как, скажите на милость, мне внести задуманные изменения/дополнения в игру, если без редакции движка ну никак не обойтись (пусть и по мелочи совсем, как кажется). И затрачено времени много очень, и сил, и работа почти закончена - бац - тупик - движок - необходимо изменить параметры. А изучать даже основы программирования - процесс небыстрый и с учетом занятости работой и семьёй - года на 2-3 хватит - за это время желание может отпасть, а могут обстоятельства измениться. А мод так и не будет закончен, хотя время и силы потрачены.

И в конце концов - попросить я думаю всегда можно, а вот получить желаемое... дай бог каждому.

  • Нравится 2
  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

_Призрак_, Судя по .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 которая жестоко ограничивает читерство?

Вопрос: а откуда все знают что кол-во слотов на поясе зашито в движок ? Может так решили потому-что в конфигах или скриптах найти не смогли ? :dash3: ну, а дальше, сарафанное радио...

Может ПЫСы хорошо спрятали, а может мы плохо ищем. Обычно то, чего найти не можешь долго и нудно - на поверхности, смотришь и не замечаешь.

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

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_B);

Label1->Caption=AnsiString(j);

}

Label2->Caption=AnsiString(returnVa2(buf_B));

Label3->Caption=AnsiString(returnVa3(buf_B));

}

MAKEINTRESOURCE — макрос для создания символической константы. Переменная типа HINSTANCE создается глобально. Загрузка библиотеки и присвоение указателей на функции производится в момент создания формы. Количество и тип параметров в описании функций (сигнатура функции) в DLL и указателя на функцию, в вызывающем модуле должны совпадать, совпадение имен не обязательно.

DLL выгружается из памяти при завершении работы вызывающего модуля. Принудительная выгрузка DLL осуществляется функцией FreeLibrary(HINSTANCE).

 

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Я не жадный:

U4ATd4tUcq.jpg

В принципе увеличением кол-ва быстрых ячеек я пытаюсь создать аналог разгрузки которая будет непосредственно в меню инвентаря. Уважаю труд по реализации разгрузки и подсумков команды NLC, но на мой взгляд, так будет правильней. Помимо быстрых ячеек, хочу визуализировать скрытый инвентарь (фонарик, нож и т.д.) в свои отдельные слоты. Как будет выглядеть сие чудо, если интересно кому - выложу скрин (пока ещё не закончена работа).

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

iDreD, я забиндил новые ячейки на кнопки через ui_keybinding.xml и после этого меню "ОПЦИИ" перестало открвываться, думаю потому, что они не прописаны в xrGame. Старые 4 ячейки прописаны, и даже описание забинденных кнопок там прописано.

pV5qTXGU43.jpg

 

goust, посмотри по редакторам здесь, у меня без проблем установился и до сих пор работает

 

чем несколько раз в личку, лучше один раз здесь выложу, если народ не против.

xSrjeAsR2t.jpg

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

PavelSnork, этот модик посмотри и скрины его. там увеличена дальность прорисовки вообще всего, может наковыряешь чего интересного.

 

48celt48, что именно выложить?

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
(изменено)
кстати а что если сделать все проще увеличить кол-во слотов под арты

А ты попробуй под арты ... :dash3::grin2:

я рассказал только о том, что на данный момент уже получилось, дальше ещё пока ковыряю, как доковыряю - выложу.

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
4. Редактировать ехе и dll Notepadom++ - извините ребята но это дикость, а потом вы еще удивляетесь почему у вас ничего не работает и глючит.

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

Серый Волк, обсуждалось уже тыщу раз - забинтить хотя бы скриптово на Х-рэе можно только клавишу Таb. Для быстрых ячеек ещё хуже, ибо клавиши от F5, F6 и далее не прописаны в хrГейме (?). Поэтому смысла ковырять ячейки только в игре нет.

А клавиши мышки (3-я и 4-я) прописаны в xrGame? я, например, ставлю на быстрые слоты эти две клавиши и F1, F2. К тому же в самой игре, в меню "ОПЦИИ" можно изменить "забиндивание" быстрых клавиш на любые другие по желанию.

Поделиться этим сообщением


Ссылка на сообщение

48celt48, по-моему, вылет словил потому, что оба предмета спавнятся у ГГ автоматически при запуске игры, а два предмета в одном слоте не помещаются - будет вылет с примерным логом "нет свободного места".

 

 

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

sabir, я знаю, что немного показывает, но мне в нём поиском удобней пользоваться чем в hex workshop.

ИМХО по поводу вывода на худ - можно по аналогии с патронами, ножом и биноклем, но во-первых - захламлять обзор на экране не хочется, если каждый слот на худ вешать, во-вторых если в том же окне где патроны отображаются - смысла не вижу - не будет возможности смены одного предмета на другой.

Ну раз Вы сможете подсказать, то:

1. В hex workshop открыл xrGame: какое значение имеют блоки "00" (которые в правом окне редактора отображаются в виде точек), что они означают, и что-нибудь значит количество этих блоков между другими блоками, с различными обозначениями - "ненулевыми" (в правом окне - с различным текстом и параметрами) ?

2. Но это может быть даже по части конфигов, вчера мозг почти сломал, не могу найти каким образом лут типа [booster] привязан к быстрым ячейкам, ведь только этого типа лут может быть помещён в ячейки быстрого доступа. С поясом проще, там прописано - "belt = true", а здесь... ?

3. Да снизайдут ко мне всемогущие, но в ковырялке никто так и не ответил - может здесь повезёт больше: в каком файле задаются координаты расположения на текустуре наименований кнопок действия, которые в ui_st_keybinding.xml написаны ?

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

sabir, про размер иконок я уже знаю, но пока ещё не боролся с вылетом (это если лут большего размера пытаешься засуть в ячейку). по краейней мере в СГМ 1.7 - вылетает. Меня больше на остальные вопросы интересуют.

Строгое предупреждение от администратора n6260
Не дублируем вылеты по темам. Ты уж определись после каких твоих действий вылетает.

 

Поясню после каких действий, и почему ещё и в этой теме:

 

Изменения вносились в xrGame.dll путём редактирования программой Hex Workshop v.4.2 в правом (текстовом) окне. Размер файла (и количества символов) соблюдён, засчёт уменьшения блоков "00" в левом окне - соответственно им "точек" в правом. Ниже приведу скрины: оригинал / изменённый. В actor_menu.xml созданы конфиги (для каждого исправления есть свой блок) для внесённых изменений в xrGame.dll.

 

Попытка визуализировать слот "НОЖА", можно это и так назвать...

оригинальный файл:

gSrY2jIKYL.jpg

изменённый:

XUV9Xva4LS.jpg

 

При запуске игры после этих изменений, загрузка проходит примерно на 95% и ловлю такой вылет:

* phase time: 1480 ms

* phase cmem: 365699 K

* phase time: 224 ms

* phase cmem: 373087 K

compiling shader detail

compiling shader detail_wave

compiling shader detail_still

* [DETAILS] VertexConsts(256), Batch(61)

* [DETAILS] 10126 v(20), 5368 p

* [DETAILS] Batch(61), VB(197K), IB(31K)

* phase time: 88 ms

* phase cmem: 373087 K

* Loading HOM: d:\ИГРЫ - МУЛЬТИ - ФИЛЬМЫ\И Г Р Ы\С.Т.А.Л.К.Е.Р. Зов Припяти - sigerous mod cop 1.3\gamedata\levels\zaton\level.hom

* phase time: 87 ms

* phase cmem: 373438 K

* phase time: 11 ms

* phase cmem: 373438 K

* phase time: 10 ms

* phase cmem: 373438 K

* t-report - base: 709, 204499 K

* t-report - lmap: 26, 26627 K

* WARNING: player not logged in

 

FATAL ERROR

 

[error]Expression : xml_doc.NavigateToNode(path,index)

[error]Function : CUIXmlInit::InitTextWnd

[error]File : D:\prog_repository\sources\trunk\xrGame\ui\UIXmlInit.cpp

[error]Line : 207

[error]Description : XML node not found

[error]Argument 0 :

[error]Argument 1 : ui\actor_menu.xml

 

 

 

Есть ли варианты довести до ума то что я натворил ?

Изменено пользователем n6260

Поделиться этим сообщением


Ссылка на сообщение

_Призрак_, в файле ui\actor_menu.xml я прописал координаты слота куда Нож должен быть помещён, также прописал координаты подсветки слота и шкалы износа.

ЗЫ: если б знать как они обозначаются в dll, эти координаты...

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Kirag, поделись ссылкой на скачанный дизассемблер, пожалуйста.

 

Ковыряясь в xrGame, нашёл интересную строчку: UIDragDropListEx.cpp.CUIDragDropListEx::CreateDragItem...i!=itm..CUICellContainer::FindSimilar

По идее выделенная функция жирным шрифтом - отвечает за создание слотов, кто больше меня понимает - объясните смысл двоеточия перед функцией, а если можно и больше.

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение

sabir, обещал всё по полочкам разложить, возможно забыл...

Ну да ладно, новый вопрос, хотя и на старые ответов пока не получил:

1. что означают в "Hex" знаки : %d (25 64) , %s (25 73) , [%s] (5B 25 73 5D) ?

 

 

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

_Призрак_, я уже общался с Kolmogorом, сейчас перевариваю всю информацию полученную от него. Мысли есть кое-какие, пробую потихоньку... Я ведь в програмировании полный "0". Кстати о "в коде адреса не поменял" - вот этот момент ещё надо у него уточнить.

 

Наковырял интересную статейку :

Динамически подключаемые библиотеки (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).

 

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение

sabir,

1. не хочу препираться с вами и пред получить, но внимательно почитайте мои вопросы и ваши ответы на них, полезной информации я почерпнул - "0" (кроме размеров иконок для слотов, хотя и этот вылет до сих пор никем не побеждён).

2.

смотря насколько зуд сильный

 

А теперь внимание вопрос ко всем: Ну допустим у меня получилось прописать в xrGame панель артефактов которая на худ выводиться. Вылета нет. Создаю в конфигах такую панель (хоть с текстурой, хоть без неё) всё равно она не отображается на худе. Вопрос: почему ?

 

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Будем править кривые ручки изучением. Накопал азы, так сказать (для всех и меня в том числе) :

Часть 1.

АССЕМБЛЕР И ПРОГРАММИРОВАНИЕ ДЛЯ 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. Режимы ассемблирования и компановки

 

Ответы на некоторые вопросы

 

 

Часть 2.

ЯЗЫК МАКРОАССЕМБЛЕРА IBM PC

(Справочное пособие)

 

Составитель: В.Н.Пильщиков (МГУ, ВМК)

ГЛАВА 1. ОСОБЕННОСТИ ПК. ВВЕДЕНИЕ В MASM.

1.1. ОПЕРАТИВНАЯ ПАМЯТЬ. РЕГИСТРЫ.

1.2. ПРЕДСТАВЛЕНИЕ ДАННЫХ. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ

1.3. ПРЕДСТАВЛЕНИЕ КОМАНД. МОДИФИКАЦИЯ АДРЕСОВ.

1.4. СЕГМЕНТИРОВНИЕ

1.5. ПЕРЕХОДЫ

1.6. СТРОКОВЫЕ ОПЕРАЦИИ

1.7. СТЕК. ПОДПРОГРАММЫ.

 

 

Скачать полные тексты можно здесь:

скачать с ifolder.ru

скачать с narod.ru

 

Если автор темы посчитает нужным - добавьте в шапку все три статьи.

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

sabir, мдя, поисковик великая вещь.

но описания на мой взгляд маловато будет.

 

IDA Pro является самым мощным и самым развитым интерактивным дизассемблером, доступным на сегодняшний день.

[spoiler=Описание:]

Основные пользователи нашего дизассемблера:

 

* антивирусные компании

* специалисты по информационной безопасности

* эксперты по программному обеспечению

* а также разработчики программных защит

 

Основная задача - превращение бинарного кода в читаемый текст программы - дополнена многими уникальными возможностями:

 

* распознавание стандартных библиотечных функций (технология FLIRT)

* интерактивность работы

* развитая система навигации

* система типов и параметров функций

* встроенный язык программирования IDC

* открытая и модульная архитектура

* возможность работы практически со всеми популярными процессорами (список)

* возможность работы практически со всеми популярными форматами файлов (список)

* работа со структурами данных высокого уровня: массивами, структурами, перечисляемыми типами

* встроенный отладчик для Win32

 

Типичные примеры задач, решаемые с помощью дизассемблера:

 

* анализ вирусов, троянов и других вредоносных программ

* поиск ошибок в программах

* изучение полученного кода

* валидация программ

* оптимизация программ

* разработка защит и поиск дыр в защите

 

В настоящей версии присутствует отладчик для Win32, Win64, WinCE(ARM) и Linux программ, что делает анализ таких программ еще проще и быстрей.

 

IDA Pro работает под MS Windows, Linux и Mac OS X.

 

 

русский сайт интерактивного дизассемблерра IDA Pro

 

Декомпилятор HexRays - Руководство пользователя

 

Русский форум IDA Pro

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение

в инвентаре, если убрать безлимит, при превышении количества вещей получаем вылет и с логом "no place in the room". 

есть в принципе возможность исправить момент вылета таким образом, чтобы при переполнении лишняя вещь просто возвращалась на место и выводилась надпись "места больше нет".

Поделиться этим сообщением


Ссылка на сообщение
(изменено)
то я не вижу смысла делать ограничение на кол-во ячеек - лучше доработать ограничение на переносимый объём

как по мне, то количество ячеек в инвентаре и есть его физический объём.

 

 

но работать оно будет только при открытии инвентаря.

а можно по другому!?

видимо я в обоих случаях чего-то не понимаю, поясните, пожалуйста.

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...