ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

24.09.2008, 21:22
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Сообщение от 0x0c0de
Т.е. ReadFile прочла меньше, чем должна была? Значит произошла к-либо ошибка. А сама функция что вернула (true/false)? Проверь с GetLastError что за ошибка возникла.
nNumberOfBytesToRead совпадает с возвращаемым значением в lpNumberOfBytesRead.А вот sizeof от буфера куда оно прочиталось возвращяет погоду на Марсе  И
GetLastError 0 возвращяет.
|
|
|

24.09.2008, 21:31
|
|
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме: 4226446
Репутация:
1564
|
|
Сообщение от _nic
nNumberOfBytesToRead совпадает с возвращаемым значением в lpNumberOfBytesRead.А вот sizeof от буфера куда оно прочиталось возвращяет погоду на Марсе  И
GetLastError 0 возвращяет.
код в студию.
|
|
|

24.09.2008, 21:40
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Сообщение от 0x0c0de
код в студию.
Код:
char *fnam=new char[1024*10];
char *ip=new char[1024];
CRITICAL_SECTION cs;
void thr(void *Pvoid)
{
SOCKET s;SOCKADDR_IN adr;DWORD rb;unsigned long ss,sz;int p=1;
//WSADATA wsd;WSAStartup(MAKEWORD(1,1),&wsd);
adr.sin_family=AF_INET;
adr.sin_port=htons(3060);
InitializeCriticalSection(&cs);
EnterCriticalSection(&cs);
adr.sin_addr.s_addr=inet_addr(ip);
LeaveCriticalSection(&cs);
s=socket(AF_INET,SOCK_STREAM,0);
connect(s,(sockaddr*)&adr,sizeof(adr));SetLastError(0);
HANDLE f=CreateFile(fnam,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS,0);
char *buf=new char[(1024*1024)*10];
DWORD e=GetFileSize(f,&ss);
if(e>0){sz=e;}if(e<1){sz=ss;}
if(sz<(1024*1024)*10)
{ReadFile(f,buf,sz,&rb,0);send(s,buf,strlen(buf),0);}
if(sz>(1024*1024)*10)
{
for(;;)
{
ReadFile(f,buf,(1024*1024)*10,&rb,0);
MessageBox(0,CurrToStr((int)rb).c_str(),"!!!",MB_OK);
MessageBox(0,CurrToStr((int)sizeof(buf)).c_str(),"!!!",MB_OK);
MessageBox(0,CurrToStr((int)GetLastError()).c_str(),"!!!",MB_OK);
sz=sz-(1024*1024)*10;send(s,buf,rb,0);
memset(buf,NULL,(1024*1024)*10);
SetFilePointer(f,((1024*1024)*10)*p,NULL,FILE_BEGIN);p++;
if(sz<(1024*1024)*10){ReadFile(f,buf,sz,&rb,0);send(s,buf,strlen(buf),0);break;}
}
}
}
|
|
|

24.09.2008, 21:34
|
|
Постоянный
Регистрация: 19.10.2007
Сообщений: 794
Провел на форуме: 1013791
Репутация:
711
|
|
возвращяет погоду на Марсе
Это Дэнвер, погода летная, даю добро на старт.
Вообще приводить надо бы весь код, от выделения памяти до GetLastError. А то мы тут все будем до второго пришествия гадать что это - нехватка озу, сбой в ос, неверное выделение памяти, кривая передача указателя функции чтения.
|
|
|

24.09.2008, 22:15
|
|
Познающий
Регистрация: 08.08.2008
Сообщений: 55
Провел на форуме: 369629
Репутация:
54
|
|
дык buf - это указатель. он занимает 4(8) байтов. подробней - читай МСДН по поводу sizeof(). вот исчо исходник там есть в качестве примера
Example
Код:
// expre_sizeof_Operator.cpp
// compile with: /EHsc
#include <iostream>
size_t getPtrSize( char *ptr )
{
return sizeof( ptr );
}
using namespace std;
int main()
{
char szHello[] = "Hello, world!";
cout << "The size of a char is: "
<< sizeof( char )
<< "\nThe length of " << szHello << " is: "
<< sizeof szHello
<< "\nThe size of the pointer is "
<< getPtrSize( szHello ) << endl;
}
Output
The size of a char is: 1
The length of Hello, world! is: 14
The size of the pointer is 4
|
|
|

24.09.2008, 23:02
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Сообщение от FrMn
дык buf - это указатель. он занимает 4(8) байтов. подробней - читай МСДН по поводу sizeof(). вот исчо исходник там есть в качестве примера
ну если sizeof() неподходит ,то что вместо него использовать?
|
|
|

24.09.2008, 23:04
|
|
Флудер
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
horlyk
#include "stdafx.h" убери и в настройках отключи.
|
|
|

24.09.2008, 23:20
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Вот невезет ведь  пытаюсь использовать вместо sizeof _msize и получаю
Код:
[Linker Error] Error: Unresolved external '__msize' referenced from C:\COD\CD\APP\UNIT1.OBJ
|
|
|

24.09.2008, 23:20
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме: 233095
Репутация:
21
|
|
отключил еще при первой компиляции  меня сразу выругало за stdafx.
спс 
|
|
|

25.09.2008, 06:44
|
|
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме: 4226446
Репутация:
1564
|
|
Сообщение от _nic
ну если sizeof() неподходит ,то что вместо него использовать?
char *buf=new char[(1024*1024)*10];
....
ReadFile(f,buf,sz,&rb,0)
....
MessageBox(0,CurrToStr((int)sizeof(buf)).c_str()," !!!",MB_OK);
Зачем вообще тут sizeof? Я чего-то недопонимаю? Точное количество записанных в buf байт в переменной rb. Зачем извращать-то там, где не надо? Что мешает это значение использовать?
Код:
if(sz<(1024*1024)*10){ReadFile(f,buf,sz,&rb,0);send(s,buf,strlen(buf),0);break;}
}
strlen(buf) - тоже самое. Зачем, когда rb уже содержит нужное значение?
Код:
if(sz<(1024*1024)*10){ReadFile(f,buf,sz,&rb,0);send(s,buf,rb,0);break;}
}
Да и потом strlen может херню вернуть ибо вы пишите
Данные с помощью ReadFile из бинарного файла
http://www.cplusplus.com/reference/clibrary/cstring/strlen.html
The length of a C string is determined by the terminating null-character
....
У тебя ноль где-нибудь в середине буфера будет и будет не айс ведь. половину только отошлешь
Последний раз редактировалось 0x0c0de; 25.09.2008 в 07:08..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|