Вопрос № 29187: Привет всем !
У меня вопрос такой, кто-нибуть знает состав exe файла ?
Я в одной книге видел такую таблицу там показан заголовок ехе его длинна и т.д ! вот если не трудно кто что знает об этом или знает сайтик про это можь скините на мыло пл...Вопрос № 29262: Написал программу которая копирует данне из одного файла в другой.
Подскажите как сделать, чтобы можно было копироват фаил больше 64к, например 50mb... Код программы ниже...Вопрос № 29265: Здравствуйте уважаемые эксперты, у меня такой вопрос:
- Почему при просмотре через debug, таблица вект.прерываний разная
в разных OS (у ХР - одна, вин98 - другая, MSDOS - третья)(в особенности меня
интересует прерывание BIOS int 09h...
Вопрос № 29.187
Привет всем !
У меня вопрос такой, кто-нибуть знает состав exe файла ?
Я в одной книге видел такую таблицу там показан заголовок ехе его длинна и т.д ! вот если не трудно кто что знает об этом или знает сайтик про это можь скините на мыло плиз !
Ps: Мне нужно именно структура а не создание ехе на различных языках ! Если можно поподробнее !
Можно кидать сюда ----> Prgeorgiy.ru@mail.ru
Отправлен: 08.11.2005, 19:27
Вопрос задал: STK (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Лысков Игорь Витальевич
Здравствуйте, STK!
Просвещайся
http://lex-lamer.narod.ru/more/filem010.html
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: 8-ой класс)
Отправлен: 08.11.2005, 22:06 Оценка за ответ: 4
Отвечает: Юра Устинов
Здравствуйте, STK!
В тех файлах которые я вам отправил рассказывается про написание вирусов под дос и win32, там есть и структура дос-exe и pe файлов.
--------- Спасём Россию!!!
Ответ отправил: Юра Устинов (статус: 5-ый класс)
Отправлен: 09.11.2005, 05:03 Оценка за ответ: 5
Отвечает: Sager
Здравствуйте, STK!
На сайте wasm.ru есть в путеводителе по написанию вирусов и вообще там много чего еще есть, еще там вроде бы должен быть PEFORMAT описанный Hard Wisdom(если тебе нужен заголовок exe для win32, если для доса, то тоже в путеводители вирусов дял дос), в общем поройся по сайту...
Ответ отправил: Sager (статус: Студент)
Отправлен: 09.11.2005, 18:09 Оценка за ответ: 3
Вопрос № 29.262
Написал программу которая копирует данне из одного файла в другой.
Подскажите как сделать, чтобы можно было копироват фаил больше 64к, например 50mb... Код программы ниже
Приложение:
Отправлен: 09.11.2005, 18:24
Вопрос задал: Gwest (статус: 1-ый класс)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Gwest!
Так и читай, пока читается, и записуй...(пока читается не нуль байт)
Буфер желательно побольше, скажем 32к, быстрее будет
По большому счету, надо бы еще анализировать флаг С после каждой файловой операции.
Приложение:
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: 8-ой класс)
Отправлен: 09.11.2005, 19:59 Оценка за ответ: 4 Комментарий оценки: спасибо
Отвечает: Евгений Иванов
Здравствуйте, Gwest!
выдели буфер и открывай последовательно кусок за куском.
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 09.11.2005, 20:07
Отвечает: Юра Устинов
Здравствуйте, Gwest!
Вообще-то вы можете копировать данные из одного в другой кусками.Допустим по 50 кбайт 1000 раз.
Удачи!
--------- Спасём Россию!!!
Ответ отправил: Юра Устинов (статус: 5-ый класс)
Отправлен: 10.11.2005, 07:15 Оценка за ответ: 4
Отвечает: Ayl
Здравствуйте, Gwest!
По частям. То есть делаешь все ровно также. Запрашиваешь из исходного файла количество байт, равное размеру буфера. Записываешь из буфера в новый файл столько байт, сколько прочитали. После этого, если число прочитанных байт соответствует запрошенному, повторяешь цикл Чтение-Запись. Если не соответствует - значит, достигли конца файла и надо прекращать копирование - закрывать файлы и т.д.
--------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 10.11.2005, 12:24 Оценка за ответ: 5
Вопрос № 29.265
Здравствуйте уважаемые эксперты, у меня такой вопрос:
- Почему при просмотре через debug, таблица вект.прерываний разная
в разных OS (у ХР - одна, вин98 - другая, MSDOS - третья)(в особенности меня
интересует прерывание BIOS int 09h по адресу 0:24h ???
- В резидентной программе (под ХР или вин98) возникает ошибка вот тут:
....
....
mov ax,2509h ;заменить в таюлице прерываний адрес процедуры int 09h
mov dx,offset _Obrabot ;на адрес _Obrab
int 21h
....
....
ну просто не хочет заменять и всё! Выдает ошидку что в чистом дОСе, что
под любыми виндами
( на прямую тоже не заменяется, типа:
mov es:[24h],offset _Obrab
mov es:[26h],cs
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Петров Максим Викторович!
1) Да потому что показывается таблица прерываний, заполненной каждой ОСью по-своему. При MSDOS BIOSовские прерывания показывают на BIOS (если не запущены резиденты, перехватывающие их). В Винде же похоже все вектора прерывания показывают на собственный код.
2)Раз показывает, что ошибка, значит так и есть :)
Больше без кода добавить нечего...Только одно предположение - может DS не туда показывает?
--------- Удачи!
Отвечает: Юра Устинов
Здравствуйте, Петров Максим Викторович!
Попробуйте всё ли из перечисленных шагов вы выполняли, потому что таким же образом перехватывали 1c интерупт, а он как и 9 от внешнего ус-ва.
; скопировать адрес предыдущего обработчика в переменную old_handler
mov ax,3587h ; АН = 35h, AL = номер прерывания
int 21h ; функция DOS: считать
; адрес обработчика прерывания
mov word ptr old_handler,bx ; возвратить
; смещение в ВХ
mov word ptr old_handler+2,es ; и сегментный
; адрес в ES,
; установить наш обработчик
mov ax,2587h ; АН = 25h, AL = номер прерывания
mov dx,seg int_handler ; сегментный адрес
mov ds,dx ; в DS
mov dx,offset int_handler ; смещение в DX
int 21h ; функция DOS: установить
; обработчик
; (не забывайте, что ES изменился после вызова функции 35h!)
[...]
; восстановить предыдущий обработчик
lds dx,old_handler ; сегментный адрес в DS и смещение в DX
mov ax,2587h ; АН = 25h, AL = номер прерывания
int 21h ; установить обработчик
--------- Спасём Россию!!!
Ответ отправил: Юра Устинов (статус: 5-ый класс)
Отправлен: 10.11.2005, 07:16
Отвечает: Ayl
Здравствуйте, Петров Максим Викторович!
Потому что разная.
Под MSDOS, которая работает в реальном режиме, все честно - это таблица векторов реального режима.
Под виндами все сложнее. Т.к. они работают в защищенном режиме, то для каждой DOS-задачи выделяется свое адресное пространство со своей таблицей векторов прерываний.
Насчет второй части вопроса - код в студию! Потому что в таком виде ответить на него невозможно. По крайней мере у меня никогда не возникало проблем при переопределении 9-го прерывания, что под чистым DOSом, что при эмуляции.
А при изменении вектора через функцию MSDOS ты регистр DS правильно устанавливаешь? А при прямой замене ты прерывания отключаешь на момент изменения таблицы? Что за ошибка возникает?
--------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 10.11.2005, 12:34