Заплыв вольным стилем

Не DOS, но тоже нам интересно

Re: Заплыв вольным стилем

Сообщение Пловец » 26 ноя 2022, 14:38

Лишь один AMD386DX40 проявил любопытство, конечно, я согласен, что это неинтересно и в игры играть лучше, но это для вас, а для меня как раз напротив.
Конечно же некоторым не до этого, они смтотрят и крутят у виска (ведет как ... мальчишка в лучшем случае, что могут подумать), а - когда все, озадачены бытовыми задачами и т.п.. (мне все-равно, что вы крутите :roll: ), я занимаюсь тем, что мне нравится и делаю то, что хочу, в рамках приличия, а не вседозволенности, ну это я погнал (и тут Остапа понесло).

Много текста, короче Склифосовский!

Я хотел следующее сказать, эта тема не памятник, как может показаться, не какая-та там невиданная (ну-всё такое), я написал это с целью, чтобы (думал так) кто-то заинтересуется, возникнет разговор, появится общение.
Скорее всего так оно и есть, но многие не осмеливаются поинтересовать - спросить, боясь быть отшитым как на других ресурсах в сети, ведь все знают, везде шакалы, они специально затягивают, затем потешаются как над дураком - это умышленно делается, чтобы раздор посеять, ненависть, захватившем правление в сети - невыгодна сплоченность людей! Здесь - на этом форуме не так, говорю - искренне!

Вы поняли? Если вам стало интересно, без всяких опасений можно спросить - поинтересоваться, что-то по поводу создания того или иного инструмента. Я мастер типа дяди Ашота (из автомастерской), знаком со многим, готов поделится соображениями, дерзайте! :ugeek:
Последний раз редактировалось Пловец 26 ноя 2022, 14:42, всего редактировалось 1 раз.
Пловец
Мастер Даунгрейда
 
Сообщения: 110
Зарегистрирован: 05 ноя 2022, 22:11
Откуда: Россия

Re: Заплыв вольным стилем

Сообщение AMD386DX40 » 30 ноя 2022, 19:20

Пловец, мне кажется вам надо продолжать писать тему "Заплыв вольным стилем", развивать ее, у вас хорошо получается и видно, что уровень знаний очень хороший. Все равно будут люди читать, кто-то и спросит чего-нибудь. Не так то просто найти в сети подробный мануал к программированию. А еще хорошо, что это программирование на даунгрейд версии компилятора, что вписывается в тематику сайта и форума. Получается даунгрейд программирование.
А еще я бы не против если бы вы создали тему, посвященную Turbo Assembler for DOS, назвав ее, например, "Заплыв на глубину" :-) Мне давно хотелось изучить TASM for DOS но заплыть на глубину так и не получилось, плавал на поверхности :-)
Не все то процессоры, что с ножками :=)
Аватара пользователя
AMD386DX40
Мастер Даунгрейда
 
Сообщения: 117
Зарегистрирован: 18 окт 2022, 18:30
Откуда: Ульяновск
Железо: AMD Am386DX, AMD Athlon XP 2000+, AMD Athlon II, AMD FX8300

Re: Заплыв вольным стилем

Сообщение Пловец » 30 ноя 2022, 22:11

AMD386DX40, большое спасибо! Не буду отнекиваться, но я не считаю себя большим знатоком, чуть выше копи-пастера :lol: .

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

И есть идея, вчера придумал, запуская программу, получаем данные о сообщениях на нашем форуме! :lol: ). Хочется, чтобы было отсортировано ну-и т.п..

Программа "GetComInfo".
Аббревиатура от Get Communication Information - Получить
информационные сообщения.
Пловец
Мастер Даунгрейда
 
Сообщения: 110
Зарегистрирован: 05 ноя 2022, 22:11
Откуда: Россия

Создаём Рабочее место для новой программы

Сообщение Пловец » 01 дек 2022, 00:15

Я уже рассказывал и вы в курсе о том, с чего нужно начинать новый проект!
И всё-таки вспомним!
Ранее, мы создали проект-шаблон с именем "aTmp". Разместили в папке проектов "Pro".
Возьмите каталог "aTmp", перенесите в соответствующую рубрику.
Программа связана с коммуникацией, значит - перенесем в каталог "Net".
Переименуйте "aTmp", именем новой программы - "GetComInfo".

Я буду как и прежде работать с Borland, но вы, можете работать и в среде разработчика от Microsoft.
Создайте новый проект, в стиле "win32", c именем "GetComInfo", пустой и прикрепите файлы.
Измените свойства проекта, установите кодировку "Multibyte Character" (MBCS)
 Развернуть: Установка свойств проекта Visual Studio
Изображение
Последний раз редактировалось Пловец 01 дек 2022, 00:17, всего редактировалось 1 раз.
Пловец
Мастер Даунгрейда
 
Сообщения: 110
Зарегистрирован: 05 ноя 2022, 22:11
Откуда: Россия

Создание WorkSpace - Borland

Сообщение Пловец » 01 дек 2022, 01:26

Пользователям Microsoft VC 6.0, изменять кодировку проекта не требуется, она по умолчанию MBCS, лишь (не могу сказать точно) - наверное, версии с седьмой становится по умолчанию в Unicode.

Наша программа уже не простая, будет требоваться работа с отладчиком, поэтому, помимо Makefile, нужно устроить WorkSpace - это заготовка, файл с расширением ide, кликнув по которому, откроется среда разработчика - это редактор кода с подсветкой синтаксиса и отладчик.

Откройте программу BCW.exe (находится в каталоге BC5) или в меню Пуск, Программы - "Borland C++"
В меню Файл, выберите Project... Выберите расположение - папку проекта и укажите имя.
Проект в стиле Gui, статистическая библиотека.
Удалите отсутствующие файлы и добавьте файлы в проект.

 Развернуть: Создание WorkSpace в Borland
Изображение

#2 Проект Gui, статистическая библиотека.
Изображение

#3 Удалите отсутствующие файлы.
Изображение

#4 Добавьте файлы в проект.
Изображение

Готово!
Изображение
Пловец
Мастер Даунгрейда
 
Сообщения: 110
Зарегистрирован: 05 ноя 2022, 22:11
Откуда: Россия

Заполним файлы кодом

Сообщение Пловец » 01 дек 2022, 02:24

Я еще не решил, как буду разбирать информационный материал, проще говоря текстовую страницу.
Это приходилось делать не раз, но когда приходится делать снова, я думаю как сделать оптимально.
Как поступлю здесь, еще не решил, ещё думаю :roll: .

Сделаем тренировочный плацдарм.
Будем открывать файл с диска, расположенный в текущем каталоге т.е. в Pro\Net\GetComInfo
и закрывать, на этом программа завершается (на сегодня :cry: )

Открывать будем файл "index.htm", зайдите по адресу ниже и сохраните страницу полностью.
Неважно с каким именем, все-равно нужно будет переименовать в "index.htm".
index.php

После скачивания, откройте в Блокноте и сохраните как "index.htm".
Каталог который содержит скрипты и картинки, это название сайта со знаком подчеркивания, нужно зайти в неё, всё скопировать выйти из неё и создать новый файл-папку "css", вставить все скрипты и картинки в новую папку. Произвести редактирование в файле "index.htm", чтобы ресурсы страницы ссылались на папку "css". Конечно - это необязательно, но я сделал так. Зачем я сделал так, не могу точно сказать, это было вчера, я думал и от нечего делать занялся редактированием.
Да. Не огорчайтесь если не поняли, посмотрите вникнете, также - всё будет в пакете, который я прикреплю, но постарайтесь сделать сами.

После этого я переместил "css" и "index.htm" в Pro\Net\GetComInfo.
Пользователям Microsoft, нужно класть в папку Debug или указывать жесткий путь (об этом позже).

Итак, вам нужно было переименовать файл ресурсов (шаблон RC носит имя aTmp ) в имя программы GetComInfo, вы сделали это?

Идем дальше WinMain.cpp
Код: Выделить всё
////////////////////////////////////////////////////////////////////////////////
// WinMain.cpp
//
// Application "GetComInfo".

#include <windows.h>
#include "WinMain.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
   char buf[BUFFSIZE];
   char* fname="index.htm";

   FILE* file=fopen(fname,"r");
   if(!file)
   {
      wsprintf(buf,"Failed - Could not open file\n\"%s\"",fname);
      mb(buf);
   }

   fclose(file);

   mb("Done.");

   return 0;
}

////////////////////////////////////////////////////////////////////////////////
// <<eof>> WinMain.cpp
////////////////////////////////////////////////////////////////////////////////


 Развернуть: Редактирование index.htm
Изображение


 Развернуть: Пользователю Microsoft, нужно ввести жесткую ссылку
Пользователю Microsoft, нужно ввести жесткую ссылку
char* fname="C:\\Pro\\Net\\GetComInfo\\Debug\\index.htm";
хотя, лучше, кладите "index.htm" с папкой "css" в корень диска, какой захотите, например на с:
тогда строка пути будет следующая char* fname="C:\\index.htm";
Последний раз редактировалось Пловец 01 дек 2022, 16:56, всего редактировалось 1 раз.
Пловец
Мастер Даунгрейда
 
Сообщения: 110
Зарегистрирован: 05 ноя 2022, 22:11
Откуда: Россия

Re: Заплыв вольным стилем

Сообщение igor_pc » 01 дек 2022, 13:32

Пловец писал(а):конечно, я согласен, что это неинтересно и в игры играть лучше

В игры играть неплохо и весело, да, но дело не в этом. Для меня например программирование - это рабочий инструмент, пользуюсь, когда надо для дела конкретного. Если для вас это хобби\стиль жизни\искусство - ок, мы поняли. Для меня например тем же самым является электроника. В основном ремонт и немного проектирование. Этим я занимаюсь почти каждый день, сейчас вот телевизор в работе (пршиваю NAND, уже раз 20 прошивал разными скачанными прошивками эту падлу :), а телик всё-равно при вставке флешки ребутится, ну раньше он на заставке ребутился, сейччас хоть показывает, если не выйдет победить - буду так отдавать), ноутбук (ждёт сборки программатора POSTAL2 и попытки прошивки "мультика") и много всякого помельче, вчера видекарты ревизировал, которые уже по одному разу смотрел, 1-2 только есть мелкие шансы, что починятся, остальные 4-5 штук - наверно на з\ч пойдут, как всегда отвал видеочипа или глючная память. А по кодингу - ну может потом в какой-то момент кину исходники одной из моих прог на VB6 для обозрения.
Аватара пользователя
igor_pc
Мастер Даунгрейда
 
Сообщения: 677
Зарегистрирован: 29 сен 2020, 01:56
Откуда: планета Земля

Re: Заплыв вольным стилем

Сообщение Пловец » 01 дек 2022, 16:49

igor_pc, интересный рассказ!
По поводу прошивки телека, а может все-таки в скаченной прошивке умышленный дефект, ведь могут байтик изменить, а? Всяких артистов хватает. Один саморезы на улице сыпет, чтобы сосед колеса менял, а другой прошивки портит. Конечно, возможно преувеличил, но может быть. Нужна гарантия, что прошивка не поддельная.
Пловец
Мастер Даунгрейда
 
Сообщения: 110
Зарегистрирован: 05 ноя 2022, 22:11
Откуда: Россия

Стенд тренировочных испытаний

Сообщение Пловец » 01 дек 2022, 21:00

Загружайте пакет - стенд тренировочных испытаний, под именем GetComInfo.zip 138 KB

Стенд, в виде неготовой программы, возможно и никогда не будет готовой - мной, а вот вы сможете, если захотите. Стенд осветить работу с байтами в памяти компьютера. Будет видно, как загруженный текст из страницы "index.htm", курсирует в памяти. Вот - это мысли о идее, которую покажет стенд :roll:
Вложения
GetComInfo.zip
(137.92 Кб) Скачиваний: 44
Пловец
Мастер Даунгрейда
 
Сообщения: 110
Зарегистрирован: 05 ноя 2022, 22:11
Откуда: Россия

Преобразование текста

Сообщение Пловец » 02 дек 2022, 00:13

Страница "index.htm" находится в кодировке "utf8", чтобы работать с текстом, а не тайнописью, нужно преобразовать страницу. Сначала нужно конвертировать в широкополосную строку, Unicode, затем в Ansi-строку.

Код: Выделить всё
////////////////////////////////////////////////////////////////////////////////
// WinMain.cpp
//
// Application "GetComInfo".

#include <windows.h>
#include "WinMain.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
   char buf[BUFFSIZE];
   char* fname="index.htm";

   FILE* file=fopen(fname,"r");
   if(!file)
   {
      wsprintf(buf,"Failed - Could not open file\n\"%s\"",fname);
      mb(buf);
   }

   /* Get the file size */
   long curpos=ftell(file);
   fseek(file,0,SEEK_END);
   int size=ftell(file);
   fseek(file,0,SEEK_SET);/* Sets the file pointer file beginning */

   if(!size)
   {
      wsprintf(buf,"Failed - Empty file\n\"%s\"",fname);
      mb(buf);
   }

   /*-------------------------------------------------------
      Copy to memory
   -------------------------------------------------------*/
   char* InACh=(char*)malloc(size+1);
   if(!InACh)
   mb("Failed - Unable to allocate memory");

   InACh[size]=0;
   fread(InACh, size, 1, file);/* Reads data from a stream */
   fclose(file);

   /*-------------------------------------------------------
      Convert utf8 to unicode
   -------------------------------------------------------*/

   int n=MultiByteToWideChar(CP_UTF8,0,InACh,-1,NULL,0);
   if(!n) mb("Failed to obtain utf8 string length");

   wchar_t* UCh=(wchar_t*)calloc(sizeof(wchar_t),n);
   if(!UCh) mb("Failed to allocate unicode string");

   size=MultiByteToWideChar(CP_UTF8,0,InACh,-1,UCh,n);
   if(!size) mb("Failed to convert to unicode");

   /*-------------------------------------------------------
      Convert unicode to ANSI
   -------------------------------------------------------*/

   n=WideCharToMultiByte(1251,0,UCh,-1,NULL,0,NULL,NULL);
   if(!n) mb("Failed to obtain required cp1251 string length");

   char* ptr=(char*)calloc(sizeof(char),n);
   if(!ptr) mb("Failed to allocate cp1251 string");

   size=WideCharToMultiByte(1251,0,UCh,-1,ptr,n,NULL,NULL);
   if(!size) mb("Failed to convert from unicode");

   mb(ptr);

   /* Free memory */
   free(ptr);
   free(UCh);
   free(InACh);

   return 0;
}

////////////////////////////////////////////////////////////////////////////////
// <<eof>> WinMain.cpp
////////////////////////////////////////////////////////////////////////////////


 Развернуть: У вас должно получится такое
GetComInfo_Convert_To_Ansi.png
GetComInfo_Convert_To_Ansi.png (63.08 Кб) Просмотров: 1256
Последний раз редактировалось uav 03 дек 2022, 22:26, всего редактировалось 4 раз(а).
Пловец
Мастер Даунгрейда
 
Сообщения: 110
Зарегистрирован: 05 ноя 2022, 22:11
Откуда: Россия

Найди сто отличий

Сообщение Пловец » 02 дек 2022, 19:56

Ну не сто а несколько - имеется. Я решил лишь функции ОС использовать (когда это возможно).
Потом, что еще? Наверное ничего. Я пока ничего не комментирую, во-первых из-за того, что в Borland (у меня нет поддержки приличного шрифта (кириллицы), а имеющийся отвратителен), во-вторых, комментировать пока нечего, всё ясно:
- открыли файл
- узнали его размер
- выделили пространство в оперативной памяти (буфер)
ссылка на буфер в переменной: char* InACh (char - тип, InACh - имя)
- функцией ReadFile прочитали в буфер
- переменная bRet вернет истинное значение (1), или ложное (0) - неудача при чтении файла
после нее сразу идет CloseHandle() - функция закрытия файла, т.к. закрыть нужно в любом случае
- преобразуем текст, на первый взгляд может показаться, что имеется повторный блок - нет, просто
сначала узнаем длинну (размер) данных, лишь затем узнав сколько нужно - преобразуем.

Код: Выделить всё
////////////////////////////////////////////////////////////////////////////////
// WinMain.cpp
//
// Application "GetComInfo".

#include <windows.h>
#include "WinMain.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
   char buf[BUFFSIZE];
   char* fname="index.htm";

   HANDLE hFile=CreateFile(fname,GENERIC_READ,0,0,OPEN_EXISTING,0,0);
   if(INVALID_HANDLE_VALUE==hFile)
   {
      wsprintf(buf,"Failed - Could not open file\n\"%s\"",fname);
      mb(buf);
   }

   DWORD dwSize, dwBytesRead;

   dwSize=GetFileSize(hFile,0);
   if(!dwSize)
   {
      CloseHandle(hFile);
      wsprintf(buf,"Failed - Empty file\n\"%s\"",fname);
      mb(buf);
   }

   /*-------------------------------------------------------
      Copy to memory
   -------------------------------------------------------*/

   char* InACh=(char*)malloc(dwSize+1);
   if(!InACh)
   mb("Failed - Unable to allocate memory");

   BOOL bRet=ReadFile(hFile,InACh,dwSize,&dwBytesRead,0);

   CloseHandle(hFile);

   if(!bRet)
   {
      wsprintf(buf,"Failed - ReadFile\n\"%s\"",fname);
      mb(buf);
   }

   /*-------------------------------------------------------
      Convert utf8 to unicode
   -------------------------------------------------------*/

   int n=MultiByteToWideChar(CP_UTF8,0,InACh,-1,NULL,0);
   if(!n) mb("Failed to obtain string length (utf8)");

   wchar_t* UCh=(wchar_t*)calloc(sizeof(wchar_t),n);
   if(!UCh) mb("Failed - Not enough space exists for the new block\n(calloc#1)");

   dwSize=MultiByteToWideChar(CP_UTF8,0,InACh,-1,UCh,n);
   if(!dwSize) mb("Failed - Convert utf8 to unicode");

   /*-------------------------------------------------------
      Convert unicode to ANSI
   -------------------------------------------------------*/

   n=WideCharToMultiByte(CP_ACP,0,UCh,-1,NULL,0,NULL,NULL);
   if(!n) mb("Failed to obtain required string length");

   char* svData=(char*)calloc(sizeof(char),n);
   if(!svData) mb("Failed - Not enough space exists for the new block\n(calloc#2)");

   dwSize=WideCharToMultiByte(CP_ACP,0,UCh,-1,svData,n,NULL,NULL);
   if(!dwSize) mb("Failed - Convert unicode to ANSI");

   // Show message
   mb(svData);

   /* Free memory */
   free(svData);
   free(UCh);
   free(InACh);

   return 0;
}

////////////////////////////////////////////////////////////////////////////////
// <<eof>> WinMain.cpp
////////////////////////////////////////////////////////////////////////////////
Пловец
Мастер Даунгрейда
 
Сообщения: 110
Зарегистрирован: 05 ноя 2022, 22:11
Откуда: Россия

Ассемблерная вставка

Сообщение Пловец » 02 дек 2022, 23:06

Посмотрим, как ведет себя такая конструкция.
(при просмотре картинок, масштаб регулируйте, удерживайте Ctrl и нажимайте Минус или Плюс или колесико мышки)

Код: Выделить всё
////////////////////////////////////////////////////////////////////////////////
// WinMain.cpp
//
// Application "GetComInfo".

#include <windows.h>
#include "WinMain.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
   char buf[BUFFSIZE];
   char* fname="index.htm";

   HANDLE hFile=CreateFile(fname,GENERIC_READ,0,0,OPEN_EXISTING,0,0);
   if(INVALID_HANDLE_VALUE==hFile)
   {
      wsprintf(buf,"Failed - Could not open file\n\"%s\"",fname);
      mb(buf);
   }

   DWORD dwSize, dwBytesRead;

   dwSize=GetFileSize(hFile,0);
   if(!dwSize)
   {
      CloseHandle(hFile);
      wsprintf(buf,"Failed - Empty file\n\"%s\"",fname);
      mb(buf);
   }

   /*-------------------------------------------------------
      Copy to memory
   -------------------------------------------------------*/

   char* InACh=(char*)malloc(dwSize+1);
   if(!InACh)
   mb("Failed - Unable to allocate memory");

   BOOL bRet=ReadFile(hFile,InACh,dwSize,&dwBytesRead,0);

   CloseHandle(hFile);

   if(!bRet)
   {
      wsprintf(buf,"Failed - ReadFile\n\"%s\"",fname);
      mb(buf);
   }

   /*-------------------------------------------------------
      Convert utf8 to unicode
   -------------------------------------------------------*/

   int n=MultiByteToWideChar(CP_UTF8,0,InACh,-1,NULL,0);
   if(!n) mb("Failed to obtain string length (utf8)");

   wchar_t* UCh=(wchar_t*)calloc(sizeof(wchar_t),n);
   if(!UCh) mb("Failed - Not enough space exists for the new block\n(calloc#1)");

   dwSize=MultiByteToWideChar(CP_UTF8,0,InACh,-1,UCh,n);
   if(!dwSize) mb("Failed - Convert utf8 to unicode");

   /*-------------------------------------------------------
      Convert unicode to ANSI
   -------------------------------------------------------*/

   n=WideCharToMultiByte(CP_ACP,0,UCh,-1,NULL,0,NULL,NULL);
   if(!n) mb("Failed to obtain required string length");

   char* svData=(char*)calloc(sizeof(char),n);
   if(!svData) mb("Failed - Not enough space exists for the new block\n(calloc#2)");

   dwSize=WideCharToMultiByte(CP_ACP,0,UCh,-1,svData,n,NULL,NULL);
   if(!dwSize) mb("Failed - Convert unicode to ANSI");
   //mb(svData);/* Show message */

   // Преобразованные данные находятся по адресу, переменной "svData".
   // Данные представлены в виде бесконечной вереницы символов.
   // Этот массив нужно ограничить, нулевым окончанием.
   // Будет служить как триггер, конца данных. Это не единственный способ,
   // можно отслеживать окончание вереницы, по-числу, общему количеству
   // символов.

   svData[dwSize]=0;// Ограничить нулевым окончанием.

   /*-------------------------------------------------------
      CTEH9 ACCEM6/\EP
   -------------------------------------------------------*/

   char* svMatch="Старый DOS";// Строка поиска
   DWORD dwCount=lstrlen(svMatch);// Длина строки поиска
   bRet=FALSE;

__asm   {

   mov   esi, [svData]      // Входящие байты (текущие) в настоящий момент
   mov   ebx, [svMatch]      // Адресация цепочки назначения
SEARCH:
   mov   edx, esi            // Сохранить указатель источник 'svData'
   mov   edi, ebx            // Это остается прежним искомая строка 'svMatch'
   mov   ecx, [dwCount]      // Присвоение ecx счетчика 'dwCount'
   rep   cmpsb               // Нахождение первого совпадения
   mov   esi, edx            // Восстановить указатель
   jcxz   short FOUND         // Значения равны? - Да!
   cmp   byte ptr [esi], 0   // Это последний символ?
   jz   short DONE            // - Да, выход - значение не найдено
   inc   esi               // Сдвиг строки поиска
   jmp   short SEARCH      // Продолжить поиск
FOUND:
   mov   [bRet], 1
   }
DONE:

   if(bRet)
   wsprintf(buf,"Match \"%s\"\n\nFound!",svMatch);
   else
   wsprintf(buf,"Match \"%s\"\n\n Not Found.",svMatch);

   mb(buf);

   /* Free memory */
   free(svData);
   free(UCh);
   free(InACh);

   return 0;
}

////////////////////////////////////////////////////////////////////////////////
// <<eof>> WinMain.cpp
////////////////////////////////////////////////////////////////////////////////


 Развернуть: TD32.exe - Turbo Debugger
Изображение
Изображение


 Развернуть: Пользователям Microsoft
Для пользователей Microsoft (MSVC), нужно убрать директиву "short".
(это такое jcxz short FOUND и еще в двух местах, насколько помню, если не убрать - сообщит о ошибке, он - компилятор от Майкрософт, сам любит - без напоминаний, выполнять эту работу :P )

Borland - же, если не указывать, будет вставлять длинный переход, а
это четыре байта "nop" (опкод 90), которые не делают ничего, лишь увеличивая размер программы.

Вот так выглядит, длинный переход, в теле программы
Изображение
Последний раз редактировалось Пловец 03 дек 2022, 19:34, всего редактировалось 4 раз(а).
Пловец
Мастер Даунгрейда
 
Сообщения: 110
Зарегистрирован: 05 ноя 2022, 22:11
Откуда: Россия

Ida - интерактивный дизассемблер

Сообщение Пловец » 03 дек 2022, 14:34

Я решил использовать для демонстрации, программу Ida, это интерактивный дизассемблер.
Я нашел версию седьмую, она небольшая, около двухсот мб. буду показывать в ней, можете, также, взять Ida и делать вместе со мной :ugeek: .

Первый рисунок демонстрирует, начало работы после преобразования текста и перед
вводом нуля в конец данных.
 Развернуть: Первый шаг
Изображение


 Развернуть: Step_01.gif
Изображение
Последний раз редактировалось Пловец 04 дек 2022, 13:33, всего редактировалось 3 раз(а).
Пловец
Мастер Даунгрейда
 
Сообщения: 110
Зарегистрирован: 05 ноя 2022, 22:11
Откуда: Россия

Шаг за шагом, с отладчиком Ida

Сообщение Пловец » 03 дек 2022, 19:30

Открыть Ida, выбрать exe-модуль. Cделать вид в текстовом виде. ПКМ, пункт меню - Text View.
Если сбился вид Рабочего стола - меню Windows, пункт Reset Desktop, вернет вид по умолчанию.

Масштабирование картинки, Ctrl (удерживая), нажать клавишу Минус/Плюс (колесико мыши прокрутить).

 Развернуть: Ida-Step-02.gif
Изображение
Последний раз редактировалось Пловец 03 дек 2022, 21:05, всего редактировалось 1 раз.
Пловец
Мастер Даунгрейда
 
Сообщения: 110
Зарегистрирован: 05 ноя 2022, 22:11
Откуда: Россия

Ida - клавиши F7, F8, F4

Сообщение Пловец » 03 дек 2022, 22:47

F7 - заходить в функцию
F8 - не заходить
F4 - выполнить до курсора

Если все же случайно зашёл в функцию (по F7), то смотри
 Развернуть: как выйти
Изображение


 Развернуть: Чтобы смотреть Гиф не мучаясь
Изображение
Изображение
Последний раз редактировалось Пловец 04 дек 2022, 14:59, всего редактировалось 2 раз(а).
Пловец
Мастер Даунгрейда
 
Сообщения: 110
Зарегистрирован: 05 ноя 2022, 22:11
Откуда: Россия

Пред.След.

Вернуться в Прочее

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

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