Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2010, 11:11   #1
--=SaNitinDG=-
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 61
По умолчанию Файл падает после WriteFile

Пишу:
//Переменные
Цитата:
BYTE nBate=0xC3;
DWORD BWritten=1;
CHAR Buff[256];
//Собственно сам код
Цитата:
WriteFile(hFile,NULL,nBate , (LPDWORD)&BWritten,0);
CloseHandle(hFile);
Но после отработки этого кода программа которая была открыта моей программой показывает Dos окно.

Кажется касяк у мня в выборном типе задание переменных, С++ только на чел учить.

Подскажите как решить эту проблему?
Опыт не пропьешь если он есть=)))
--=SaNitinDG=- вне форума Ответить с цитированием
Старый 15.02.2010, 12:10   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2--=SaNitinDG=-
документацию будешь читать или где?

Цитата:
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
буфер - второй параметр.
размер буфера - третий параметр
размер реально записанных данных - четвертый
мало того, что бред с параметрами, так еще и буфер свой не пишешь

и кстати, гениальное название переменной nBate
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 15.02.2010, 14:04   #3
--=SaNitinDG=-
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 61
По умолчанию

Ну смотри теперь вроде всё правильно написал а прога все ровно падает после WriteFile.
Цитата:
HANDLE hFile;
DWORD newBate=0xC3;//реально записанных данных C3 ret должен быть
DWORD dwBytesWritten=1;//буфер
LPCVOID Buff[256];//размер буфера
Цитата:
SetFilePointer(hFile,0x0401384,NULL ,FILE_BEGIN); //УКАЗАЛИ Адрес для ret

WriteFile(hFile,Buff,dwBytesWritten ,&newBate,0);//Записали

CloseHandle(hFile);
Цитата:
и кстати, гениальное название переменной nBate
Я гений!!!
Опыт не пропьешь если он есть=)))
--=SaNitinDG=- вне форума Ответить с цитированием
Старый 15.02.2010, 14:19   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
SetFilePointer(hFile,0x0401384,NULL ,FILE_BEGIN);
омг.... откуда такое смещение взял? может просто за размер выходишь? хз, в винде могут быть дырки в файлах или нет.

Цитата:
DWORD dwBytesWritten=1;//буфер
эта переменная может ничем не инициироваться, в нее вернется результат реально записанных байт

Цитата:
WriteFile(hFile,Buff,dwBytesWritten ,&newBate,0);//Записали
опять ты с параметрами напортачил. размер буфера - третий параметр!

Цитата:
DWORD newBate=0xC3
что за бред? что ты этим хочешь сказать?

примерно так надо
Код:
char buff[] = "text to write";
DWORD dwBytesWritten;

WriteFile(hFile, buff, sizeof(buff), &dwBytesWritten, 0);
за приведения типов не отвечаю.

Цитата:
Я гений!!!
я заметил
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 15.02.2010, 18:14   #5
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

400000+ - это явно RVA.
RVA != смещение в PE файле.
Somebody вне форума Ответить с цитированием
Старый 15.02.2010, 19:37   #6
--=SaNitinDG=-
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 61
По умолчанию

pproger
По порядку...
Цитата:
омг.... откуда такое смещение взял? может просто за размер выходишь? хз, в винде могут быть дырки в файлах или нет.
Смешение в отладчике OllyDbg...какие дырки?

Цитата:
эта переменная может ничем не инициироваться, в нее вернется результат реально записанных байт
Реально Спасибо не знал долго голову ломал что надо sizeof(buff) писать с твоей помощью.

Цитата:
опять ты с параметрами напортачил. размер буфера - третий параметр!
Каюсь был не прав просто я не знал что туда надо писать в третьем параметре к примеру у меня проблем не было с WriteFile когда я тоже самое писал на Ассемблере а С++ ваще завал мне самому такое стыдно спрашивать.

invoke WriteFile, hFile, OFFSET _byteReplace ,01h, OFFSET bytes_written, 0

Где _byteReplace мой байты С3h а bytes_written
Цитата:
dd 1
.

Но если я не буду спрашивать то я не чему не научусь.

Код:
 invoke SetFilePointer, hFile, 000195F1h, 0, FILE_BEGIN
       ;пишем 1 байт(01h)
        invoke WriteFile, hFile, OFFSET _byteReplace ,01h, OFFSET bytes_written, 0
В Ассемблере указываем смещение 000195F1h на конце h а на С++ 0x00195F1 так правильно x.

Цитата:
что за бред? что ты этим хочешь сказать?

примерно так надо
Я этим хотел сказать что это нужный мне байт для замены того байта который мне не нужен к примеру С3 что на Ассемблере выглядит как ret.

Цитата:
за приведения типов не отвечаю.
Что такое типов в С++?
Цитата:
я заметил
Спасибо!!!

А если серьезно то пофиг как переменный называть хоть hewrwqdsfsdfeset так хоть так wBytesWritten на зови от этого толку не меняется только потом в исходнике хер разберёшься.
Somebody
Цитата:
400000+ - это явно RVA.
RVA != смещение в PE файле.
Да это RVA

Программа всёровно потом падает после отработке WriteFile

Теперь адрес задаю ка RVA-ИмейжьБаза 0x0001384 и как просто RVA побывал 0x0401384.

Но программа всёровно потом падает в глубокий Dos.

Где теперь косяк.

Цитата:
char buff[] = "0";
DWORD dwBytesWritten=0xC3; // Мне нужно чтобы байт C3 записался по адресу указному в SetFilePointer


SetFilePointer(hFile,0x0001384,NULL ,FILE_BEGIN); //Указали адрес

WriteFile(hFile, buff, sizeof(buff), &dwBytesWritten, 0);//Пишем новые биты четвертый параметр нужные мне байты для записи то есть C3.
CloseHandle(hFile); //Закрываем хендол фаила
Буфер изменил на 0 мне веть не нужно чтобы текст писался в файл или что-та опять не то.
Опыт не пропьешь если он есть=)))
--=SaNitinDG=- вне форума Ответить с цитированием
Старый 15.02.2010, 20:20   #7
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

а покажи то хоть как получаешь указатель на файл.
Любой гений должен знать, что такое приведение типов.
подпись
liljon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прога падает ровно(!) через 5 минут после старта Tapapax Общие вопросы .NET 8 11.11.2009 15:04
Сервер падает Х) Slusar PHP 2 05.10.2009 22:47
Почему после обработки макросом файл становится больше? garik64 Microsoft Office Word 7 21.09.2009 13:16
C# Reflection: разблокировать файл после LoadAssembly Hollander Общие вопросы .NET 4 23.01.2009 16:24
Альтернатива WriteFile Egor2005 Win Api 3 11.04.2007 20:11