Портал освітньо-інформаційних послуг «Студентська консультація»

  
Телефон +3 8(066) 185-39-18
Телефон +3 8(093) 202-63-01
 (093) 202-63-01
 studscon@gmail.com
 facebook.com/studcons

<script>

  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){

  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

 

  ga('create', 'UA-53007750-1', 'auto');

  ga('send', 'pageview');

 

</script>

Дизасемблювання TPU, TPP, TPW модулів, написаних на Паскалі

Тип роботи: 
Курсова робота
К-сть сторінок: 
82
Мова: 
Українська
Оцінка: 
Зміст
 
Вступ
2. Структура формату TPUQ
3. Структура програми
4. Текст програми
5 Інструкція користувача
6. Література
 
Вступ
 
Дизасемблер – комп’ютерна програма, яка перекладає з машинного коду на асемблерну мову програмування. Тобто ця програма діє обернено до асемблера. Але, зазвичай, дизасемблер пишеться для того, щоб людина могла розібратись в програмному коді певної програми, а не для використання цього програмного коду в асемблері. Дизасемблер не обмежений вузькими рамками синтаксису асемблера. 
Декілька разів при використанні модулів в Паскалі виникали різні проблеми. Функція в програмі вимагала якийсь тип даних, процедура не працювала, константа невірна і т. д. В такому випадку, при відсутності коду модуля, єдиним виходом було переписувати модуль самому.
Використання дизасемблера суттєво полегшує задачу. Дизасемблер дає можливість машинний код програми перетворити в асемблерний, таким чином робить його читабельним. Якщо є відповідні навички, то можна відкрити дизасемблером, дещо змінити і потім зібрати асемблером.
Можливості, що відкривались, а також цікавість підштовхнули мене до написання цієї програми.
 
Структура формату TPUQ
 
Файли *.TPU, *.TPP, *.TPW мають одну і ту саму структуру. В Borland Pascal 7.0 і Turbo Pascal 7.0 вони використовують формат TPUQ. 
В файлі є 6 секцій. Перша має десять підсекцій. Кожна секція на може займати більше за 64 Кб.
1. Символьна секція.
В цій секції знаходиться вся символьна інформація.
1.1 Підсекція заголовку (хедер)
Містить у собі розміри, вказівники, флаги, значок TPUQ. Займає близько 60 байтів. Закінчується обов’язково нулями.
1.2    Обєктна підсекція
В цій знаходяться не тільки об’єкти, а й вся символьна інформація і так звані “плутані таблиці”, в яких описані записи(records) і самі об’єкти.
1.3 Підсекція вхідних точок
Масив записів фіксованої довжини. Один запис для кожної функції, процедури або методу. Він визначає блок коду і точку входу в ньому. Перший – для області ініціалізації модуля.
1.4 Підсекція блоків коду
Масив записів фіксованої довжини. Один запис на блок входу.
1.5 Підсекція блоків констант
Масив записів фіксованої довжини. Один запис на блок ініціалізованих даних(опис типових констант).
1.6 Підсекція блоків змінних
Те саме, що 1.5, тільки для неініціалізованих даних (статичних змінних).
1.7 Підсекція експортованих імен
Ця секція є тільки у ТРР і TPW файлах. Подає таблицю імен для динамічних бібліотек, що пов’язані з модулем.
1.8 Підсекція списку модулів
Тут в записані всі модулі, на які зсилається даний модуль.
1.9 Підсекція імен вихідних файлів
В цій підсекції знаходяться імена вихідних файлів і .OBJ файлів, які включені в даний модуль.
1.10 Підсекція довжин рядків
Записи, в  яких вказана відповідність між рядками вихідного коду і байтами в блоках коду
2. Секція коду
В цій секції міститься скомпільований код модуля в порядку визначеному в 1.4.
3. Секція констант
Ініціалізовані дані (константи) в порядку визначеному в 1.5.
4. Секція записів перерозподілу коду
Великий масив записів фіксованої довжини. Містить дані перерозподілу (relocation fixups) блоків коду.
5. Секція записів перерозподілу констант
 Аналогічно 4-ій для констант і також констант-вказівників.
6. Секція символьної інформації броузера
Використовується тільки при ввімкненій директиві компілятора {$Y+}. Подається в таблицях з номерами рядків модуля, в яких декларуються символи або в яких є звертання до символів
 
Структура програми
 
Програма складається з головного файлу і 10 модулів, які до нього підключаються. 
- test1.pas – тестовий файл.
- test1.inc – тестовий файл (include).
- test1.obj – тестовий файл (об’єкти).
- nametype – типи для секції інтерфейсу.
- util – різні утилітні процедури.
- globals – глобальні змінні і типи.
- loader – процедури зчитування з .ТРU і .TPL файлів.
- head – процедури розбору заголовку (header) файлу.
- blocks3 – процедури для блоків коду, секції інтерфейсу, додаткових файлів, функції перерозподілу. 
- сode – дампер для основного коду і констант.
- dump – процедури для роботи з дампом чисел. 
- params1 – процедури впорядкування виводу в файл, виходу.
- switches.inc – директиви компілятора, якщо в ньому змінити один рядок і трохи підправити основну програму, то програма буде працювати і для модулів, написаних на ТР6.0.
Текст програми
Globals.pas
 
unit globals;
{$I SWITCHES.INC}
interface
 
uses Dos;
 
type
  word_array_ptr = ^word_array;
  word_array=array[0..32760] of word;
  byte_array_ptr = ^byte_array;
  byte_array=array[0..65520] of byte;
  option = (do_header,do_src_files,do_src_lines,
             do_name_list,do_implementation,do_entry_pts,
             do_code_blocks,do_const_blocks,do_dll_blocks,
             do_var_blocks,do_unit_blocks,do_browser,
             do_code,do_const,do_reloc,do_vmt,do_locals);
const
  tpl_name : string[12] = 'TURBO.TPL';
var
  buffer : byte_array_ptr;
  code_buf,const_buf,reloc_buf,const_reloc_buf : byte_array_ptr;
 
Фото Капча