С Новым годом! Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для yevrowl
304 / 75 / 6
Регистрация: 27.04.2022
Сообщений: 238

Замена байта (HEX) в файле

11.10.2022, 19:27. Показов 3208. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех приветствую!
Задача примерно соответствует этой — Заменить несколько байт в середине файла
Есть файл, в котором требуется заменять по адресам несколько байт.
Например, как для правки run-time error 200:
Code
1
2
3
4
5
6
7
8
9
4D45:008A F7
4D45:008B D0
4D45:008C D2
4D45:008D D2
4D45:008E B9
4D45:008F 37
4D45:0090 00
4D45:0091 F7
4D45:0092 F1
Прошу подсказать, как это можно осуществить средствами Quick Basic или Turbo Basic.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.10.2022, 19:27
Ответы с готовыми решениями:

Замена в файле нужного байта. Ассемблер, tasm
Как поменять в файле 10 байт? Программа выводит 10 байт, но не заменяет его .model small org 100h .data fname db...

Замена hex данных в бинарном файле
Здравствуйте. Не особо этим интересовался. По факту хочу автоматизировать одну задачу. Но не знаю как в delphi работать с бинарными...

Hex редактирование - замена строк в файле
Есть файл (вернее 3d модель) в котором нужно сменить имя текстуры, при помощи Free Hex Editor Neo это можно спокойной делать: грузите...

31
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
12.10.2022, 07:29
Лучший ответ Сообщение было отмечено yevrowl как решение

Решение

Visual Basic
1
2
3
  open "file-name" for binary as #1
  seek #1,offset-of-byte
  put #1,,chr$(Code)
1
Модератор
1245 / 676 / 292
Регистрация: 10.11.2019
Сообщений: 1,406
12.10.2022, 14:41
Лучший ответ Сообщение было отмечено yevrowl как решение

Решение

Вот готовая программа (QB 4.5 и QBasic) для фиксинга pas файлов. Проверьте, правильно ли она работает,
коды для поиска у меня и вас вроде бы отличаются

QBasic/QuickBASIC
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
DECLARE SUB help ()
DEFINT A-Z
' This program patches old Pascal EXEs 
' performing replace DIV CX -> NOP NOP
DIM p AS LONG, a AS STRING * 8192
PRINT "Pascal bad code fix"
s$ = CHR$(&HF7) + CHR$(&HD0) + CHR$(&HF7) + CHR$(&HD2) + CHR$(&HB9) + CHR$(&H37) + CHR$(&H0) + CHR$(&HF7) + CHR$(&HF1)
fi$ = LTRIM$(RTRIM$(COMMAND$))
IF fi$ = "" THEN help: END
ON ERROR GOTO etrap
er = 0
OPEN "i", 1, fi$: CLOSE 1
ON ERROR GOTO 0
IF er THEN help: END
SHELL "attrib -r " + fi$ + ">nul"
OPEN "b", 1, fi$
p = 0
WHILE NOT EOF(1)
GET 1, , a
v = INSTR(a, s$)
IF v THEN GOTO patch
p = p + 8192
WEND
PRINT "Pascal bad code not found"
CLOSE
END
 
patch:
SHELL "copy/b " + fi$ + " *.ex$>nul"
p = p + v + 6
x = &H9090
PUT 1, 1 + p, x
CLOSE
PRINT "Patching Ok"
END
 
etrap:
er = ERR
RESUME NEXT
 
SUB help
PRINT "Fixing ERROR 200 (zero devision) in old Pascal EXEs"
PRINT "Usage:"
PRINT "PAT200 filename.exe"
END SUB
1
 Аватар для yevrowl
304 / 75 / 6
Регистрация: 27.04.2022
Сообщений: 238
12.10.2022, 16:47  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Visual Basic
1
2
3
  open "file-name" for binary as #1
  seek #1,offset-of-byte
  put #1,,chr$(Code)
Спасибо, то что надо.
Пара вопросов только:
offset-of-byte — смещение в каком виде записывать?
Code — HEX-код, правильно ли понимаю?

Цитата Сообщение от qbfan Посмотреть сообщение
Проверьте, правильно ли она работает, коды для поиска у меня и вас вроде бы отличаются
Проверил, патчит верно, спасибо.
Добавил сюда, если не возражаете — http://old-dos.ru/index.php?pa... &id=101787
Здесь, кстати, целый талмуд по вариантам правок — http://zavelos.ru/forum/23047-Pascal-error-200
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
12.10.2022, 16:50
Лучший ответ Сообщение было отмечено yevrowl как решение

Решение

Смещение - целое число (с единицы! В Бэйсиках смещение отсчитывается от 1). Code - да, можно в hex (&HA3), но можно и в десятичном (163). Главное, не больше 255.
1
 Аватар для yevrowl
304 / 75 / 6
Регистрация: 27.04.2022
Сообщений: 238
30.10.2022, 00:34  [ТС]
Требует переменную. А если задать таковую вместо chr$, например :

QBasic/QuickBASIC
1
2
3
4
OPEN "test.dat" FOR BINARY AS #1
SEEK #1, 5
test = 5
PUT #1, , test
То правит сразу два байта...
Миниатюры
Замена байта (HEX) в файле   Замена байта (HEX) в файле  
0
Эксперт по электронике
6524 / 3153 / 332
Регистрация: 28.10.2011
Сообщений: 12,376
Записей в блоге: 7
30.10.2022, 00:40
А если переменная типа Byte?
1
 Аватар для yevrowl
304 / 75 / 6
Регистрация: 27.04.2022
Сообщений: 238
30.10.2022, 00:50  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
А если переменная типа Byte?
Сообщает о несоответствии типа.

Правильно ли выбрал?

INTEGER (%) : целые числа в интервале от -32 768 до +32 768
LONG (&) : целые числа в интервале от -2 147483648 до +2 147483648
SINGLE (!) : числа с плавающей запятой в интервале от ±8,43*10-37 до ± 3,З7*1038
DOUBLE (#) : числа с плавающей запятой в интервале от ±4,19*10-307 до ±1,67*10308
STRING ($) : любые тексты с максимальной длиной 32 767 знаков
Миниатюры
Замена байта (HEX) в файле  
0
Эксперт по электронике
6524 / 3153 / 332
Регистрация: 28.10.2011
Сообщений: 12,376
Записей в блоге: 7
30.10.2022, 00:53
Строка текста это не байт.
1
Модератор
1245 / 676 / 292
Регистрация: 10.11.2019
Сообщений: 1,406
30.10.2022, 10:40
Цитата Сообщение от yevrowl Посмотреть сообщение
Требует переменную.
QBasic/QuickBASIC
1
DIM varname AS STRING*1
1
 Аватар для yevrowl
304 / 75 / 6
Регистрация: 27.04.2022
Сообщений: 238
30.10.2022, 22:16  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Строка текста это не байт.
Каким образом можно назначить переменную как байт?

Цитата Сообщение от qbfan Посмотреть сообщение
DIM varname AS STRING*1
После запуска этого кода данные в файле не изменяются:

QBasic/QuickBASIC
1
2
3
4
DIM test AS STRING * 1
OPEN "test.dat" FOR BINARY AS #1
SEEK #1, 5
PUT #1, , test
0
31.10.2022, 01:21

Не по теме:

Цитата Сообщение от yevrowl Посмотреть сообщение
Каким образом можно назначить переменную как байт?
Посмотрел типы переменных в QB и не нашел байтовый тип. О чем думали разработчики QB?

0
Модератор
1245 / 676 / 292
Регистрация: 10.11.2019
Сообщений: 1,406
31.10.2022, 12:18
yevrowl,

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
'qbasic
DEFINT A-Z
DIM a AS STRING * 1
CLS
fil$ = "bintest.txt"
OPEN fil$ FOR OUTPUT AS #1
PRINT #1, "123456789"
CLOSE #1
GOSUB show
OPEN fil$ FOR BINARY AS #1
a = CHR$(42)
PUT #1, 5, a
CLOSE #1
GOSUB show
SLEEP
END
 
show:
OPEN fil$ FOR INPUT AS #1
LINE INPUT #1, b$
PRINT b$
CLOSE #1
RETURN
1
01.11.2022, 06:25

Не по теме:

Цитата Сообщение от locm Посмотреть сообщение
Посмотрел типы переменных в QB и не нашел байтовый тип. О чем думали разработчики QB?
В языке Си тоже нет типа данных «байт», ничего удивительного, в 1980‐годах так было принято.
Тем не менее, современные бесики опомнились и ввели тип данных «байт», а Си всё так и остался без байта.
Некстати: не увидел в PureBasic типа данных «беззнаковое 64‐битное целое», остальные беззнаковые типы данных есть, а 64‐битного целого нет. Печально.

0
01.11.2022, 12:27

Не по теме:

Цитата Сообщение от Замабувараев Посмотреть сообщение
В языке Си тоже нет типа данных «байт»
В Си есть char, byte, int8_t и другие типы равные 1 байт.

Цитата Сообщение от Замабувараев Посмотреть сообщение
а Си всё так и остался без байта.
Изучайте https://acm.bsu.by/wiki/C2017/Типы_данных_в_C
Обратите внимание на
Code
1
2
3
4
5
signed char     минимум 8 бит     от -127 (= -(28-1)) до 127  K&R C
unsigned char   минимум 8 бит     от 0 до 255 (=28-1)     K&R C
char    минимум 8 бит     от -127 до 127 или от 0 до 255 в зависимости от компилятора 
int8_t  8 бит    от -127 до 127  C99
uint8_t     8 бит    от 0 до 255 (=28-1)     C99

0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
01.11.2022, 16:36
1. Их нет в языке. Эти типы данных существуют только на уровне заголовочников. Без заголовочников ГЦЦ и Шланг не компилируют:

C
1
2
3
4
5
int main()
{
    int8_t retval = 3;
    return (int)retval;
}
Code
1
2
3
4
5
6
7
8
main.c: In function 'main':
main.c:3:2: error: unknown type name 'int8_t'
    3 |  int8_t retval = 3;
      |  ^~~~~~
 
main.c:3:2: error: use of undeclared identifier 'int8_t'
        int8_t retval = 3;
        ^
Или вы всерьёз считаете, что какой‐нибудь typedef добавляет в язык новый тип данных?

2. Не очень понятно, почему вы символьный тип данных занесли в категорию целочисленных. Во‐первых, равенство char и 8 бит не гарантируется, во‐вторых, тогда и тип String можно считать байтом, потому что строка состоит из байт, как и float и double.
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
01.11.2022, 23:32
Цитата Сообщение от Замабувараев Посмотреть сообщение
равенство char и 8 бит не гарантируется
На некоторых DSP процессорах sizeof(char) == 2;
0
02.11.2022, 00:07

Не по теме:

Цитата Сообщение от Замабувараев Посмотреть сообщение
Или вы всерьёз считаете, что какой‐нибудь typedef добавляет в язык новый тип данных?
Если в Си нет типа 1 байт, то откуда он по вашему берется?
sizeof(int8_t) равен 1 байту.

Цитата Сообщение от Замабувараев Посмотреть сообщение
во‐вторых, тогда и тип String можно считать байтом
В Си нет строк, а только массивы символов.

0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
02.11.2022, 15:14
Цитата Сообщение от locm Посмотреть сообщение
Если в Си нет типа 1 байт, то откуда он по вашему берется?
Поверю когда покажете мне код, в котором компилируется int8_t без заголовочников.
0
Эксперт по электронике
6524 / 3153 / 332
Регистрация: 28.10.2011
Сообщений: 12,376
Записей в блоге: 7
02.11.2022, 15:38
int8_t это typedef char но могут быть другие варианты и зависит от платформы и компилятора.

Так что вы не правы, в Си есть тип 1 байт.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2022, 15:38
Помогаю со студенческими работами здесь

Поиск и замена hex значения в dll файле
Как мне найти и заменить несколько hex значений в dll файле?

Поиск и замена hex значения в dll файле
Как мне найти и заменить несколько hex значений в dll файле?

Замена определённого HEX значения в bin файле
Здравствуйте! Есть допустим файл hello.exe Нужно, средствами PHP перевести его в HEX и записать в файл hex.txt Далее из этого...

Изменение нужного байта, hex редактор
Запустил *.exe, нашел через читЕнджи нужный адрес 4d215c, кликнул на него и показало *.exe+d215c - я так понял это смещение. Открыл Hex...

Вычисление байта по цифрам hex(bin) из поля ввода и отправка его по bluetooth в MIT App Inventor
Можно ли (вместо кодов цифр) преобразовать в байт данные, введенные по цифрам по цифрам hex(bin) из поля ввода и отправить его по...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru