|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.05.2014, 12:22 | #1 |
Пользователь
Регистрация: 25.05.2013
Сообщений: 33
|
Программа 'Паразит'
Пишу лабу. Задание, сделать программу паразит. Паразит находит exe-шник, записывает сначала себя, потом программу этого exe-шника.
Для начала решил хотя бы сделать, чтобы находила exe файл, и делала из него себя. Но вылетают ошибки. Подскажите в чем проблема? если поменять значение _virusLength на 100, то программа выполняется, exe-шники полностью не записываются (я так понял, при таком размере _virusLength, программа вся не считывается, а только её кусок), если поставить 1000, то после выполнения readln выдает stack overflow at 0x00408c42, если поставить 10000, 100000, 1000000 - то выдает I/O error 998. Код:
|
15.05.2014, 13:06 | #3 | |
Пользователь
Регистрация: 25.05.2013
Сообщений: 33
|
Цитата:
_virusLength объявил как переменную longint. _virusLength := GetFileSize(FileOpen(ParamStr(0),fm OpenRead), nil); посмотрел, размер не записывается, в переменную идет -1. Попробовал так. Код:
Если убрать единички, то вылетает ошибка I/O error 998 |
|
15.05.2014, 13:09 | #4 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
15.05.2014, 13:14 | #5 |
Заблокирован
Регистрация: 31.03.2011
Сообщений: 976
|
Karateka А если система 64 бита, программа будет лепить 32 битный код к 64 битному? Забавная фиговина получится, и к тому же полностью недееспособная. Если windows/антивирус вовремя не остановят, крах системы гарантирован.
|
15.05.2014, 13:23 | #6 |
Пользователь
Регистрация: 25.05.2013
Сообщений: 33
|
|
15.05.2014, 13:55 | #7 | |
Форумчанин
Регистрация: 08.05.2009
Сообщений: 247
|
BlockRead(_file,_virusBuff[0],_virusLength); что это?
sizeof(_virusBuff[0]) = 1 вы перезаписываете весь файл каким-то одним символом.
Мой сайт
Цитата:
|
|
15.05.2014, 14:10 | #8 | |
Пользователь
Регистрация: 25.05.2013
Сообщений: 33
|
Цитата:
Если пишу просто BlockRead(_file,_virusBuff,_virusLe ngth), то вылетает ошибка I/O error 998. Просто где-то прочитал что нужно указывать начальный элемент для динамического массива. |
|
15.05.2014, 14:17 | #9 |
Заблокирован
Регистрация: 31.03.2011
Сообщений: 976
|
Может Length - 1? А ошибка ввиду выхода за пределы буфера?
|
15.05.2014, 14:18 | #10 | |
Форумчанин
Регистрация: 08.05.2009
Сообщений: 247
|
не то процитировал, хотя BlockRead(_file,_virusBuff[0],_virusLength); пытается все впихнуть в один элемент массива??
_virusBuff : array of char; также это относится и к BlockWrite(_file2,_virusBuff[0],_virusLength); Код:
Мой сайт
Цитата:
Последний раз редактировалось DarkEvil; 15.05.2014 в 14:29. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
нужна программа QControl программа для внутрилабораторного контроля качества Версия 5.5. | миньен | Софт | 7 | 02.03.2014 00:28 |
Программа на Pascal в Lazarus и программа для одномерного массива целых чисел | Yegorka | Lazarus, Free Pascal, CodeTyphon | 13 | 20.12.2012 18:02 |
Программа с применением записей и программа с применение множеств | smert99 | Помощь студентам | 0 | 16.06.2011 23:14 |
Программа открыается если есть другая программа. | bookkc | Паскаль, Turbo Pascal, PascalABC.NET | 12 | 14.10.2009 20:09 |