Форум программистов, компьютерный форум, киберфорум
FASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/48: Рейтинг темы: голосов - 48, средняя оценка - 4.83
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071

Создать exe без сторонних программ

30.12.2019, 16:47. Показов 11071. Ответов 83

Студворк — интернет-сервис помощи студентам
Как создать exe без сторонних программ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.12.2019, 16:47
Ответы с готовыми решениями:

Сканирование QR без использования сторонних программ
Здравствуйте форумчане, такой вопрос. как можно реализовать сканирование qr без сторонних программ? есть какие нибудь библиотеки?

Не грузит страницы + Запуск сторонних программ без ведома пользователя
При попытке входа на сайт ВКонтакте авторизация не проходит по причине бесконечной загрузки, это с браузера Mozilla, при заходе через...

Проигрывание mp3 без использования сторонних программ и АктивХ MediaPlayer
Добрый день, гуру экселя. Помогите решить проблему. На листе - в ячейке B6 - находится ссылка на mp3 файл. Как проиграть файл mp3...

83
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.02.2020, 08:43
Студворк — интернет-сервис помощи студентам
Выше есть:
Assembler
1
2
3
4
5
    mov dx, hello
    mov ah, 9
    int 21h
 
hello db 'Hello, world!$'
Это дос:
DOS Fn 09H: Выдать строку на дисплей
Вход

AH = 09H
DS: DX = адрес строки, заканчивающейся символом '$' (ASCII 24H)

Выход

нет =

Описание:

строка, исключая завершающий ее символ '$', посылается на стандартный вывод. символы Backspace обрабатываются как в функции 02H Display Char. обычно, чтобы перейти на новую строку, включают в текст пару CR/LF (ASCII 13H и ASCII 0aH). строки, содержащие '$', можно выдать через 40H Write Handle (BX=0).
http://www.codenet.ru/progr/dos/dos_0017.php
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
09.02.2020, 08:50  [ТС]
Рыжий Лис, как-то так?
Python
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
import struct, io
 
class BuildExecutableError(Exception):
    pass
class Executable():
    def __init__(self, name : str):
        self.__executable__ = open(name, 'wb')
        self.__asm__ = 'use16\n'
    def __del__(self):
        self.__executable__.close()
    def addInstruction(self, instruction):
        self.__executable__.write(instruction.getInstruction());
        self.__asm__ += instruction.getAssembler()
    def getAssembler(self):
        return ''.join(self.__asm__);
class instructions():
    def output(value : str):
        offset = 0x100
        string = str(value)
        cmd = io.BytesIO()
        cmd.write(struct.pack('<BH', 0xBA, offset + 12))
        cmd.write(struct.pack('<BB', 0xB4, 9))
        cmd.write(struct.pack('<BB', 0xCD, 0x21))
        cmd.write(f'{string}$'.encode())
        return Instruction('output',[(string,'string')],cmd.getvalue(),f'mov dx, text\nmov ah, 9\nint 0x21\ntext db \'{string}$\'');
    def pause(milliseconds):
        cmd = io.BytesIO()
        cmd.write(struct.pack('<BH', 0xBA, 5000))
        cmd.write(struct.pack('<BB', 0xB4, int('86', 16)))
        cmd.write(struct.pack('<BB', 0xCD, int('15', 16)))
        return Instruction('pause',[],cmd.getvalue(),16);
class Instruction():
    def __init__(self, name : str, args : list, instruction : bytes, assembler : str):
        self.__ins_name__ = name
        self.__ins_args__ = args
        self.__ins_instruction__ = instruction
        self.__ins_asm__ = f'{assembler}\n'
    def getInstructionName(self):
        return self.__ins_name__;
    def getInstructionArguments(self):
        return self.__ins_args__;
    def getInstruction(self):
        return self.__ins_instruction__;
    def getAssembler(self):
        return self.__ins_asm__;
 
exe = Executable('test.com')
exe.addInstruction(instructions.output('hello'))
exe.addInstruction(instructions.output('world'))
print(exe.getAssembler())
Добавлено через 2 минуты
Выходной исполняемый файл выдаёт ошибку.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.02.2020, 08:58
Assembler
1
2
3
4
5
6
7
8
9
10
use16
mov dx, text
mov ah, 9
int 0x21
text db 'hello$' ; ошибка! Данные не нужно выполнять
mov dx, text
mov ah, 9
int 0x21
text db 'world$' ; ошибка! Одинаковые идентификаторы
; ошибка! Нет команды выхода exit(0)
Цитата Сообщение от Hyppoprogramm Посмотреть сообщение
offset + 12
Ещё неправильно посчитаны адреса на данные.

Компилятор должен работать в два прохода:
Code
1
2
3
4
{1: 'hello'}
{'hello': 12}
bytearray(b'\xba\x00\x00\xb4\t\xcd!\xb8\x00L\xcd!Hello, world!$')
bytearray(b'\xba\x0c\x01\xb4\t\xcd!\xb8\x00L\xcd!Hello, world!$')
Сначала генерятся машинные кода, но адреса, где располагаются данные, пока неизвестны (\x00\x00). И потом второй проход: расставляем адреса.
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
09.02.2020, 09:05  [ТС]
Рыжий Лис, код должен выглядеть так?:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use16
org 100h
mov dx, hello
mov ah, 9
int 21h
mov ax, 4C00h
int 21h
hello db 'Hello, world!$'
mov dx, text
mov ah, 9
int 21h
mov ax, 4C00h
int 21h
text db 'Hello, world! two$'
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.02.2020, 09:13
Скорее так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use16
org 100h
; секция кода. Точка входа в приложение
mov dx, hello
mov ah, 9
int 21h
 
mov dx, text
mov ah, 9
int 21h
 
mov ax, 4C00h
int 21h
; вернули управление ОС, дальше код не будет выполняться
 
; секция данных
hello db 'Hello, world!$'
text db 'Hello, world! two$'
Код выведет:
Code
1
Hello, world!Hello, world! two
Добавлено через 2 минуты
{1: 'hello', 8: 'text'}
{'hello': 19, 'text': 33}
bytearray(b'\xba\x00\x00\xb4\t\xcd!\xba\ x00\x00\xb4\t\xcd!\xb8\x00L\xcd!Hello, world!$Hello, world! two$')
bytearray(b'\xba\x13\x01\xb4\t\xcd!\xba! \x01\xb4\t\xcd!\xb8\x00L\xcd!Hello, world!$Hello, world! two$')
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
09.02.2020, 11:14  [ТС]
Рыжий Лис, как исправить мой код так, чтобы можно было "добавлять" интсрукцию output несколько раз?

Добавлено через 1 час 57 минут
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use16
org 100h
; секция кода. Точка входа в приложение
mov dx, hello
mov ah, 9
int 21h
mov dx, text
mov ah, 9
int 21h
mov ax, 4C00h
int 21h
; вернули управление ОС, дальше код не будет выполняться
; секция данных
hello db 'Hello, world!$'
text db 'Hello, world! two$'
А как записать это в com-файл?
Я примерно понимаю как записать все строки кроме двух последних.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.02.2020, 11:20
Вот так:
Code
1
2
3
4
{1: 'hello', 8: 'text'}
{'hello': 19, 'text': 33}
bytearray(b'\xba\x00\x00\xb4\t\xcd!\xba\x00\x00\xb4\t\xcd!\xb8\x00L\xcd!Hello, world!$Hello, world! two$')
bytearray(b'\xba\x13\x01\xb4\t\xcd!\xba!\x01\xb4\t\xcd!\xb8\x00L\xcd!Hello, world!$Hello, world! two$')
Первым проходом генерируем машинный код и сохраняем ссылки.
Вторым проходом расставляем адреса.
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
09.02.2020, 11:29  [ТС]
Рыжий Лис, спасибо! Но надо немного подредактировать код, чтобы output можно было использовать несколько раз. Вот наработки:
Python
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
import struct, io
 
class BuildExecutableError(Exception):
    pass
class Executable():
    def __init__(self, name : str):
        self.__executable__ = open(name, 'wb')
        self.__asm__ = 'use16\n'
    def __del__(self):
        self.__executable__.close()
    def addInstruction(self, instruction):
        self.__executable__.write(instruction.getInstruction());
        self.__asm__ += instruction.getAssembler()
    def getAssembler(self):
        return ''.join(self.__asm__);
class instructions():
    def output(value : str):
        offset = 0x100
        string = str(value)
        cmd = io.BytesIO()
        cmd.write(struct.pack('<BH', 0xBA, offset + 12))
        cmd.write(struct.pack('<BB', 0xB4, 9))
        cmd.write(struct.pack('<BB', 0xCD, 0x21))
        cmd.write(struct.pack('<BH', 0xB8, 0x4c00))
        cmd.write(struct.pack('<BB', 0xCD, 0x21))
        cmd.write(f'{string}$'.encode())
        return Instruction('output',[(string,'string')],cmd.getvalue(),f'mov dx, text\nmov ah, 9\nint 0x21\ntext db \'{string}$\'');
class Instruction():
    def __init__(self, name : str, args : list, instruction : bytes, assembler : str):
        self.__ins_name__ = name
        self.__ins_args__ = args
        self.__ins_instruction__ = instruction
        self.__ins_asm__ = f'{assembler}\n'
    def getInstructionName(self):
        return self.__ins_name__;
    def getInstructionArguments(self):
        return self.__ins_args__;
    def getInstruction(self):
        return self.__ins_instruction__;
    def getAssembler(self):
        return self.__ins_asm__;
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.02.2020, 11:44
Тогда генерь такой код:
Assembler
1
2
3
4
5
6
    mov dx, text1
    mov ah, 9
    int 21h
    jmp label1
text1 db 'Hello, world!$'
label1:
Длина команды константа, вместо text1 ввв первой строчке пишешь адрес смещения + offset. Для jmp - аналогично, длину строки посчитать несложно.
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
09.02.2020, 13:16  [ТС]
Рыжий Лис, так?
Python
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
import struct, io
 
class BuildExecutableError(Exception):
    pass
class Executable():
    def __init__(self, name : str):
        self.__executable__ = open(name, 'wb')
        self.__asm__ = 'use16\n'
    def __del__(self):
        self.__executable__.close()
    def addInstruction(self, instruction):
        self.__executable__.write(instruction.getInstruction());
        self.__asm__ += instruction.getAssembler()
    def getAssembler(self):
        return ''.join(self.__asm__);
class instructions():
    def output(value : str):
        offset = 0x100
        string = str(value)
        cmd = io.BytesIO()
        cmd.write(struct.pack('<BH', 0xBA, offset + len(value) - 1))
        cmd.write(struct.pack('<BB', 0xB4, 9))
        cmd.write(struct.pack('<BB', 0xCD, 0x21))
        cmd.write(struct.pack('<BH', 0xB8, 0x4c00))
        cmd.write(struct.pack('<BB', 0xCD, 0x21))
        cmd.write(f'{string}$'.encode())
        return Instruction('output',[(string,'string')],cmd.getvalue(),f'mov dx, text\nmov ah, 9\nint 0x21\ntext db \'{string}$\'');
class Instruction():
    def __init__(self, name : str, args : list, instruction : bytes, assembler : str):
        self.__ins_name__ = name
        self.__ins_args__ = args
        self.__ins_instruction__ = instruction
        self.__ins_asm__ = f'{assembler}\n'
    def getInstructionName(self):
        return self.__ins_name__;
    def getInstructionArguments(self):
        return self.__ins_args__;
    def getInstruction(self):
        return self.__ins_instruction__;
    def getAssembler(self):
        return self.__ins_asm__;
Добавлено через 23 секунды
Выводит какую-то тарабарщину.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.02.2020, 13:23
jmp по метке потерял. Нужно данные перепрыгнуть, раз ты не хочешь помещать их в отдельную секцию.
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
09.02.2020, 13:27  [ТС]
Рыжий Лис, а как jmp по метке сделать?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.02.2020, 13:44
Ты уже мне надоел. Скомпилировать код - это только половина дела. Вторым шагом нужно расставить адреса. Пример:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
use16
org 100h
mov dx, hello
mov ah, 9
int 21h
mov dx, text
mov ah, 9
int 21h
mov ax, 4C00h
int 21h
hello db 'Hello, world!$'
text db 'Hello, world! two$'
Превращается в такую последовательность байт после первого прохода:
Code
1
2
3
4
5
6
7
8
9
10
0:  BA 00 00      mov dx, hello ; адрес, где лежат данные, мы пока не знаем
3:  B4 09         mov ah, 9
5:  CD 21         int 21h
7:  BA 00 00      mov dx, text ; адрес, где лежат данные, мы пока не знаем
10: B4 09         mov ah, 9
12: CD 21         int 21h
14: B8 00 4C      mov ax, 4C00h
17: CD 21         int 21h
19: 48 65 6C 6C 6F 2C 20 77 6F 72 6C 64 21 24             Hello, world!$
33: 48 65 6C 6C 6F 2C 20 77 6F 72 6C 64 21 20 74 77 6F 24 Hello, world! two$
А потом второй проход. Мы смотрим, куда легли ссылки (по адресам 19 и 33), добавляем offset и записываем вместо нулей в команды, которые ссылаются по меткам.

Добавлено через 57 секунд
за один проход код сгенерить невозможно.
1
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
09.02.2020, 13:56  [ТС]
Рыжий Лис, а если использовать outs?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.02.2020, 14:00
Что это?
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
09.02.2020, 14:08  [ТС]
https://ru.wikipedia.org/wiki/... 0%BD%D0%B4
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.02.2020, 14:12
OUTS/OUTSB/OUTSW/OUTSD — Output String to Port
И в какой порт ты собрался посылать строку?
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
09.02.2020, 14:13  [ТС]
Рыжий Лис, dx
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.02.2020, 14:14
dx - это 16-битный регистр. А порт - грубо говоря, это ножки процессора для ввода-вывода.
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
09.02.2020, 14:49  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Скомпилировать код - это только половина дела. Вторым шагом нужно расставить адреса.
А как это сделать в моём коде?
Python
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
import struct, io
 
class BuildExecutableError(Exception):
    pass
class Executable():
    def __init__(self, name : str):
        self.__executable__ = open(name, 'wb')
        self.__asm__ = 'use16\n'
    def __del__(self):
        self.__executable__.close()
    def addInstruction(self, instruction):
        self.__executable__.write(instruction.getInstruction());
        self.__asm__ += instruction.getAssembler()
    def getAssembler(self):
        return ''.join(self.__asm__);
class instructions():
    def output(value : str):
        offset = 0x100
        string = str(value)
        cmd = io.BytesIO()
        cmd.write(struct.pack('<BH', 0xBA, offset + len(value) - 1))
        cmd.write(struct.pack('<BB', 0xB4, 9))
        cmd.write(struct.pack('<BB', 0xCD, 0x21))
        cmd.write(struct.pack('<BH', 0xB8, 0x4c00))
        cmd.write(struct.pack('<BB', 0xCD, 0x21))
        cmd.write(f'{string}$'.encode())
        return Instruction('output',[(string,'string')],cmd.getvalue(),f'mov dx, text\nmov ah, 9\nint 0x21\ntext db \'{string}$\'');
class Instruction():
    def __init__(self, name : str, args : list, instruction : bytes, assembler : str):
        self.__ins_name__ = name
        self.__ins_args__ = args
        self.__ins_instruction__ = instruction
        self.__ins_asm__ = f'{assembler}\n'
    def getInstructionName(self):
        return self.__ins_name__;
    def getInstructionArguments(self):
        return self.__ins_args__;
    def getInstruction(self):
        return self.__ins_instruction__;
    def getAssembler(self):
        return self.__ins_asm__;
Добавлено через 29 минут
Рыжий Лис, как записать команду
Assembler
1
jmp $
(бесконечная пауза) с помощью struct.pack?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2020, 14:49

Отправить данные из Label и TextBox на E-mail без сторонних программ
Всем привет! Перечитал кучу схожих тем и не смог разобраться как реализовать. В программировании я новичок, очень много не знаю. ...

Подключение к MySql по SSH-тоннелю без использования сторонних программ
Приветствую! У nic.ru имеется удаленный доступ к sql только по ssh: Вот текст: Удаленный доступ к базе данных MySQL ...

Загрузка сторонних программ без ведома пользователя, некорректная работа браузера Chrom
Здравствуйте! Пожалуйста помогите очистить систему в ноутбуке от вирусов? Постоянно подгружаются левые программы, которые пока в принципе...

Как направить весь траффик только через VPN без сторонних программ?
Подскажите, если не сложно. Пробовал сделать через cmd: route delete 0.0.0.0 mask 0.0.0.0 route -p 55.55.55.55 mask...

Возможна ли отправка письма с использованием bat-файла без использования сторонних программ?
Добрый день, возможна отправка письма без сторонних программ? в bat через bat файл?


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru