0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 16
|
||||||
1 | ||||||
MASM Программа вызывающая другую программу (Требуется внедрить prompt, для запроса имени исполняемого файла "study.exe")25.10.2018, 21:56. Показов 2443. Ответов 14
Помогите разобраться, пожалуйста. Необходимо в коде добавить участок, который запросит дейтсвие: "Введите имя файла (study.exe):" И скажите, правильно ли я мыслю? Мы введем комманду для запроса действия от юзера, который должен ввести "study.exe" и данное значение оно сравнит с вшитым в программе, командой XOR я полагаю? Прилагаю код ниже:
0
|
25.10.2018, 21:56 | |
Ответы с готовыми решениями:
14
Как создать exe контейнер для исполняемого файла с ограничениями Программа для сжатия исполняемого файла Ищу программу для анализа исполняемого файла Возращение имени исполняемого в данный момент файла Как внедрить dll в exe, чтобы для работы программы нужен был только exe файл |
Модератор
|
|
25.10.2018, 22:38 | 2 |
А зачем сравнивать?
Да и сравнивать строки можно цепочечными командами rep cmps
0
|
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 16
|
|
26.10.2018, 09:50 [ТС] | 3 |
Это я озвучиваю свое видение логики программы, алгоритма в целом, каким образом оно должно работать как интерпретатор введенной команды.
Но вопрос актуален - как ввести запрос ввода комманды "study.exe" пользователю, для запуска "study.exe" лежащего в одном каталоге с этой программой?
0
|
Модератор
|
|
26.10.2018, 17:40 | 4 |
Вывод сообщения функцией ah=09h int 21h.
Ввод строки функцией ah=0Ah int 21h. Описание http://www.codenet.ru/progr/dos/int_0026.php Примеры - через одну тему в данном разделе - постоянно вводятся и выводятся строки.
0
|
Эксперт Hardware
|
||||||
26.10.2018, 22:01 | 5 | |||||
..тоже вариант, и вот его реализация на FASM'e
только тут не 'xor', а хэш-сумма:
2
|
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 16
|
|
28.10.2018, 02:05 [ТС] | 6 |
[Решено]
0
|
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 16
|
||||||
28.10.2018, 02:17 [ТС] | 7 | |||||
Вопрос в следующем: В дата сегменте, как видно, я ввёл переменные для вывода текста приглашения и ввода, а также сигнала о ошибке, который будет использоваться в дальнейшем. Программа должна запросить у пользователя ввод "study.exe", записать введеное ним значение в пустую переменную, затем сравнить его оператором "repe cmps" (или возможно другим, подходящим, если такие есть) со строкой в переменной "file". При успехе и равности - перейти на метку ниже, для продолжения программы и вызова файла. При разности вводных данных - перевести на метку "dev" для вывода ошибки.
Проблема заключается в том, что независимо от вводимых данных, программа переводит на метку "dev". Подскажите пожалуйста, как тут быть? Заранее, огромное спасибо с:
0
|
Модератор
|
|
28.10.2018, 19:21 | 8 |
К слову. А вы не подменяете задачу? Точно нужно дозволить "голосовать" пользователю за правильного "кандидата"?
Или задача была в написании двух программ, одна из которых должна просто запросить имя другой и запустить её. Причём это не обязательно должна быть именно "study.exe". Просто "study.exe" гарантированно есть в папке с этой программой (по требованию задания). Добавлено через 3 минуты Вы сравниваете 10 символов (строка 39), но длина строки "study.exe" всего 9 символов, а сколько ввёл пользователь на этапе компиляции неизвестно. Сравнивайте строку на равенство начиная со сравнения длин, и при их равенстве переходите к сравнению содержимого.
0
|
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 16
|
|
29.10.2018, 11:45 [ТС] | 9 |
Со сравнение длин еще понятно, а как сравнить контент? Ключевой вопрос сейчас. А кроме этого момента, есть ли какие-то огрешности в программе? В логике\алгоритме например?
0
|
Модератор
|
||||||
29.10.2018, 12:19 | 10 | |||||
Сравнение строк одинаковой длины
0
|
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 16
|
|||||||||||
29.10.2018, 12:56 [ТС] | 11 | ||||||||||
Спасибо большое! А ввод юзером с клавиатуры и запись в переменную реализована правильно в данном примере?
В переменную buffer записывается введенное значение через ф-цию "0aH". Я правильно функцию заполнил?
0
|
Модератор
|
|
29.10.2018, 13:23 | 12 |
В само поле input записывается max+1 символ (строка и дополнительный символ с кодом 13) - это особенность данной функции и она имеется в описании. Если при описании буфер сделать меньше, то сама функция отработает правильно и в предельном случае запишет 11 символов в input, но т.к. для input выделено всего 10 байт, то 11-й запишется в следующий за input байт и затрёт следующую за input переменную.
Если задаёте размеры магическими константами, то input db 11 dup (0)
0
|
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 16
|
||||||
29.10.2018, 16:04 [ТС] | 13 | |||||
В итоге получился такой код. Но опять программа перепрыгивает на метку dev, игнорируя ввод с клавиатуры и прочие команды. Правильно ли я ввожу данные с клавиатуры в переменную?
0
|
Модератор
|
||||||
29.10.2018, 21:04 | 14 | |||||
Сообщение было отмечено Legionov как решение
Решение
Вы неправильно вызываете чтение функцией 0Ah int 21h. Посмотрите примеры, как буфер организуется. В данном подразделе через одну тему - ввод строки с клавиатуры данной функцией.
Вдобавок, я уже давал именно вам ссылку на справочник по функциям int 21h. В общем виде - вы даёте функции ссылку на область памяти, а функция сама её заполняет. Ничего в регистрах из неё не передаётся. И в регистре ax нет магического сохранения строки - Воланд не расширяет квартиру пятым измерением, регистр ax содержит всего 2 байта, а вы ожидаете строку на 9 байтов.
1
|
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 16
|
|
30.10.2018, 02:07 [ТС] | 15 |
Большое спасибо, вопрос решен, пройдусь по коду еще раз и подучу матчасть с:
0
|
30.10.2018, 02:07 | |
30.10.2018, 02:07 | |
Помогаю со студенческими работами здесь
15
API контроль процессов не зависимо от имени исполняемого файла. Создание исполняемого файла exe в QB Запуск исполняемого файла (.exe) Напишите программу вывода на экран имени исполняемого модуля Внедрить программу в другую программу/игру Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |