Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
1 / 1 / 0
Регистрация: 24.04.2015
Сообщений: 47

Exe-файл, выводящий на экран строчку: «Хочу зачет!!!». Реализация функции запуска (EXEC) без использования библиотечных

25.06.2018, 17:15. Показов 6058. Ответов 27

Студворк — интернет-сервис помощи студентам
Задание:
Создайте exe-файл, выводящий на экран одну строчку: «Хочу зачет!!!». Реализуйте программу расшифровывающую заголовок данного exe-файла, и запускающую его на выполнение. Функцию запуска (EXEC) необходимо реализовать самостоятельно не
используя стандартные (встроенные в DOS или языки программирования).

После написания кода надо как-то запустить его в DOSbox...

Можете написать код так, как это сделал бы новичок, едва ли знакомый с ассемблером?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2018, 17:15
Ответы с готовыми решениями:

PHP выводящий свой собственный код без использования функции чтения файла
Написать PHP-скрипт, выводящий свой собственный код без использования функции чтения файла.

БЕЗ использования библиотечных функций
Помогите написать программу... Написать программу, которая (без использования библиотечных функций для обработки строк), копировала бы...

Функция Reverse(s) без использования библиотечных функций и индексации
Итак, есть задачка: Написать функцию Reverse(s), которая будет менять порядок элементов в строке s на противоположный, но не использую...

27
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
27.07.2018, 17:23
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Jin X Посмотреть сообщение
Здравая мысль! Можно даже просто выделить заранее несколько килобайт в секции .

Я уже это озвучивал:
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Учите заголовок ЕХЕ-файла. Читаете в сегмент данных, код ЕХЕ-файла.

Проблема в том, что ТС в такие дебри не полезет.

Ляпнуть себе на голову ЕХЕ-ник можно,но, нужно еще учитывать, куда попадет IP, и что будет следующим выполнятся.
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6817 / 2056 / 239
Регистрация: 14.12.2014
Сообщений: 4,320
Записей в блоге: 12
27.07.2018, 18:12
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Ляпнуть себе на голову ЕХЕ-ник можно,но, нужно еще учитывать, куда попадет IP, и что будет следующим выполнятся.
Если код в EXE-шнике написан корректно, то и код будет выполняться нормально. Грузит, кидаем в стек CS и IP, делает retf, дальше код этого EXE-шника сделает всё, что нужно.
Не понимаю сути проблемы
0
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
29.07.2018, 18:06
Цитата Сообщение от Jin X Посмотреть сообщение
Если код в EXE-шнике написан корректно,

Что есть корректно?

1)
.code .code .data .data .stack .stack
.data .stack .code .stack .code .data
.stack .data .stack .code .data .code
все сегменты одинаковы, просто копипастом меняются местами вопрос: расположение сегментов корректно и одинаковый ли будет создан код компилятором, кроме первых двух байт "MZ"?

2)
.code
код
start:
код

.code
start:
код
код
вопрос: куда передавать управление?

3)
start:
. . .
ReadFile name.exe,adress cs:start .ляпнутый код
OutText 'ляпнули' .какая тут инструкция в ляпнутом коде
Ляпнули сверху код, вопрос: что будет выполнятся следующим, думаете OutText.

Калашников в своей книге, сперва копирует себя в видео-буфер, передает управление туда, потом ReadFile потом куча телодвижений , и только потом jmp old_cs:100
1
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
29.07.2018, 20:52
Цитата Сообщение от Ethereal Посмотреть сообщение
скопировать немного кода в ту область PSP, где параметры командной строки, передать туда управление, этим кодом прочесть образ из файла,
Цитата Сообщение от Constantin Cat Посмотреть сообщение
сперва копирует себя в видео-буфер, передает управление туда,
Ну и в чем разница ?
Цитата Сообщение от Constantin Cat Посмотреть сообщение
потом куча телодвижений
Если программа Hello, world то можно опустить телодвижения. Сделать программу с пустой таблицей перемещения.
1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
29.07.2018, 22:13
ЕХЕ-ник, это по сути некоторый упакованный исполняемый файл, который SysLoader читая MZ-Header, берет от туда данные, о точке входа, о размерах сегментов, соответственное выделяет всему нужное количество памяти, в нужные места кода подставляет, текущие значения сегментов.
Assembler
1
2
3
4
5
6
7
8
9
10
.model  small
.stack
.data
    db  'hello word'
.code
step:
    mov ax,4C00h
    int 21h
begin:  jmp step
    end begin
Вот Вам код утрированный до безобразия, на миниатюре видно точки входа: одна 200, вторая 205(вариант кода выше).

Без анализа MZ-Header, все разговоры о "ляпнем на голову", накрываются медным тазом. Ну ляпнули, а дальше что?
Миниатюры
Exe-файл, выводящий на экран строчку: «Хочу зачет!!!». Реализация функции запуска (EXEC) без использования библиотечных  
1
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
30.07.2018, 08:00
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

Буквально на коленке :

Hello world без таблицы перемещения :
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        .Model  Small
 
        .Stack  200h
 
        .Code
 
Start:  push    cs
        pop     ds
        mov     dx, offset Text
        mov     ah, 9
        int     21h
        mov     ah, 4Ch
        int     21h
 
Text    db      'Hello, world', 0Dh, 0Ah, '$'
 
        End     Start
Получаем файл hello.exe

А теперь его исполняем хлопнув на голову :
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
        .186
        .Model  Tiny
 
        .Code
        Org     100h
 
Start:  mov     dx, offset File
        mov     ax, 3D00h
        int     21h
        jc      Error
        xchg    ax, bx
        mov     dx, offset Header
        mov     cx, 20h
        mov     ah, 3Fh
        int     21h
        jc      Error
        sub     ax, cx
        jne     Error
        cmp     Header, 'ZM'
        jne     Error
        cmp     ax, Header[6]   ;Relocations = 0 ?
        jne     Error
        mov     cx, Header[8]
        dec     cx
        dec     cx
        jz      @@
        shl     cx, 4
        mov     dx, offset Header +20h
        mov     ah, 3Fh
        int     21h
@@:     push    Header[14h]     ;IP
        cld
        mov     si, offset _start
        mov     di, offset Start-(_end-_start)
        push    di
        mov     cx, _end-_start
        rep     movsb
        mov     si, cs
        add     si, 10h
        mov     bp, si
        add     si, Header[16h] ;CS
        add     bp, Header[0Eh] ;SS
        mov     di, Header[10h] ;SP
        mov     dx, 100h
        mov     cx, -1
        mov     ah, 3Fh
Error:  ret
 
_start: int     21h
        pop     ax
        mov     ss, bp
        mov     sp, di
        push    si
        push    ax
        retf
_end:
 
Header  label   word
 
File    db      'hello.exe', 0
 
        End     Start
Добавлено через 1 минуту
Цитата Сообщение от Constantin Cat Посмотреть сообщение
все разговоры о "ляпнем на голову", накрываются медным тазом.
Ни хрена не накрываются.

Добавлено через 21 минуту
Странно только себя ведет под FAR-ом на XP-32. Если FAR запустить, то первые 4 запуска программы-запускальщика строчка Hello, world не появляется. А начиная с пятого начинает появляться железно. Какие-то эффекты при самомодификации кода ?
Под CMD.EXE работает и под отладчиками.
Или из-за политики слабой упорядоченности записей в память ? Или из-за черта в ступе ? В общем какой-то левый эффект современного процессора для ПК. У старых процессоров были эффекты конвейера. Но тогда retn и retf конвейер сбрасывали.

-----------
2
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
30.07.2018, 09:16
Целевая платформа - DOSBOX. Если там работает - задача решена.
Осталось ещё перемещение обработать, чтобы полностью исчерпать вопрос.
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6817 / 2056 / 239
Регистрация: 14.12.2014
Сообщений: 4,320
Записей в блоге: 12
30.07.2018, 16:36
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Что есть корректно?
Корректно для данных условий
Без @data и пр. радости, требующей relocation table, к примеру.

Цитата Сообщение от Constantin Cat Посмотреть сообщение
вопрос: куда передавать управление?
В start. В MZ есть относительный CS:IP, так что проблем не вижу.

Цитата Сообщение от Constantin Cat Посмотреть сообщение
Вот Вам код утрированный до безобразия, на миниатюре видно точки входа: одна 200, вторая 205(вариант кода выше).
200 - это не точка входа. Понятное дело, что заголовок надо анализировать. Кто сказал, что не надо?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2018, 16:36

Частотный словарь без использования библиотечных функций. Файлы
Добрый день, товарищи!:senor: Помогите, пожалуйста, разобраться с программой. Уже ничего не соображаю.. Недавно стал изучать...

Реализация вычисления факториала без использования функции
Как реализовать факториал без функций??? Например через циклы( если конечно возможно ). Помогите пожалуйста, весь мозг сломал:)

Существует ли способ создать файл ресурсов без использования brcc32.exe?
Существует ли способ создать файл ресурсов без использования brcc32.exe?

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

Реализация функции EXEC g++
Здравствуйте, требуется помощь. Суть такая необходима программа порождающая процессы exec с параметрами: -L -LP -V -VP то есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru