Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru

RusFAQ.ru: Программирование на C / C++

Выпуск № 641
от 06.12.2004, 23:20

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 2073
Отправлено ответов: 3942
Активность: 190.1 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

DSota
Статус: Опытный
Общий рейтинг: 123.94
[Подробней >>]
CrackLab
Статус: Профессиональный
Общий рейтинг: 115
[Подробней >>]
Gedeon
Статус: Начальный
Общий рейтинг: 111.94
[Подробней >>]
 
vitya
Статус: Профессиональный
Общий рейтинг: 110.01
[Подробней >>]
gvozdok
Статус: Доверительный
Общий рейтинг: 122.5
[Подробней >>]
Василевский Александр
Статус: Опытный
Общий рейтинг: 113.76
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 2063. Доброго времени суток. Вопросов щас 4 и они звучат так: 1. Есть файл в котором некоторые симво... (ответов: 2)
Вопрос № 2064. Здравствуйте! Как можно на CC++ написать программу для выключения и перезагрузки компа (если можно н... (ответов: 4)
Вопрос № 2065. здравствуйте! обьясните мне на пальцах зачем нужен указатель на void спасобо... (ответов: 5)

Вопросов: 3, ответов: 11


 Вопрос № 2063

Доброго времени суток.
Вопросов щас 4 и они звучат так:
1.
Есть файл в котором некоторые символы представлены в НЕХ (х41) -- (скажем эксплоит), я хочу преобразовать эти cимволы в нормальное представление, чтоб вместо х41 была буква А.
Нашел такой конвертер (исходник консольный), но там только ввод с клавы =(((
<-- cut -->
char c;
while ((c = getchar())!= EOF)
printf("\x%X", c);
<-- cut -->
Как сделать так, чтоб прога (пусть даже консольная) могла читать файл с "х__" и выводить на экран
символы (буквы, числа, пробелы, спец символы)?
2.
Можно ли складывать (+ или ^) 16 разрядные числа, т.е. оперировать с ними как с обычными
десятичными числами?
3.
Какого самого большого размера может быть символьный буфер?
Пробывал static char c[0xFFFFFFFЕ]; Но VС++.NET ругается, что не может быть такого.
К ак сделать 1024 битное число???
Сорри - может чего я и не понимаю ещё!!!
4.
Могли бы Вы объяснить, что такое
int x = 128;
for(i=0; i<8; i++){
buff[i] = (n & x) != 0?\'0\':\'1\';
x = x/2; }}
Интересует 3я строка!
PS
Извините может не грамотно объяснил, что хочу сделать, но надеюсь на ваши знания и понимание!!!
Моё мыло: gatoNegro-prog@yandex.ru
PSS
Заранее всем огромное программерское СПАСИБО!!!



Вопрос отправлен: 03.12.2004, 01:37
Отправитель: gatoNegro

[Следующий вопрос >>] [Список вопросов]

Отвечает DSota

Доброе время суток, gatoNegro!
1. Самый легкий способ использования (тт даже программировать ненадо): запустить твою найденную программу с параметрами - как в приложении... Угловая скобка (знак больше) - обязателен... А втрой способ - переписать ее, вместо getchar используй fgetc, getc - перед этим нужно будет открыть файл, это в примере программ к этим функциям написано...
2. Можно - это же одни и те же числа (в памяти)... А разрядность - это только представление на экране.
3. Размер массива получился 4терабайта - и где его держать? Даже на винчестере на одном не поместится...
4. If ((n &x)!=0)then b='0'
else b='1';
А вообще порядок выполения инструкции описан в помощи на теме "Precedence of Operators"

Приложение:

Ответ отправлен: 06.12.2004, 10:01
Отправитель: DSota


Отвечает CrackLab

Добрый день, gatoNegro!
1) Что значит << читать файл с "х__" >> в вашем вопросе?
2) Вы путаете термин разряд и система счисления. Но я так понял что вы имели в виду числа в 16-ричной системе счисления. Дело в том, что на самом деле число в памяти компьютера не хранится в какой либо системе счисления (разве только в двоичной). Число это набор нулей и едениц. И Если вам охото, можете считать что числа хранятся в двоичной системе счисления. Но нельзя сказать что они хранятся в десятичной или шестнадцатеричной системе счисления. Просто когда мы переводим число - набор нулей или едениц - в строковую форму (например 10, 0xFF и т.д.) то мы говорим что это число показывается в десятичной или шестнадцатеричной системе счисления. Поэтому ваш вопрос некорректен.
Но если вы хотите получить ответ, то да, можно.
3) Когда вы объявляете переменную так:
"static char c[0xFFFFFFFЕ];", то в в исполненяем файле резервируется место под х ранение этой переменной (как под константу), т.е. в данном случае будет произведена попытка зарезервировать 4.2 Гб памяти в исполняемом файле.
Максимальный размер исполняемого файла кажется 2 или около 2х Гб.
Но вообще ваш подход неправилен. Static не используется для объявления переменных слишком большого размера. Если вы хотите создать переменную большего размера, то объявляйте ее как указатель и выделяйте память через оператор new, например так:
char *c = new char[10000000];
В этом случае максимальный размер ограничен размером вашей свободной оперативной памяти + размером файла подкачки, если же размер файла подкачки у вас много гигабайт, то я не думаю что можно выделить объем больший чем позволяет адресное пространство процесса. Я могу ошибаться, но я думаю что максимальный объем памяти, которую можно выделить таким образом будет около 2 Гб. Если кто из экспертов знает правильный ответ - поправьте меня.
4)Это значит что если (n & x) не равно 0 то buff[i]=\ '0\', иначе buff[i]=\'1\'.

Ответ отправлен: 03.12.2004, 20:52
Отправитель: CrackLab


 Вопрос № 2064

Здравствуйте! Как можно на CC++ написать программу для выключения и перезагрузки компа
(если можно напишите исходник).
Заранее благодарен Argentum.



Вопрос отправлен: 03.12.2004, 15:37
Отправитель: ArGentum

[Следующий вопрос >>] [Список вопросов]

Отвечает CrackLab

Приветствую Вас, ArGentum!
Если пишете под Windows используйте функцию ExitWindows или ExitWindowsEx.

Ответ отправлен: 03.12.2004, 20:25
Отправитель: CrackLab


Отвечает Gedeon

Доброе время суток, ArGentum!
Что МСДНа нету?

Приложение:

Ответ отправлен: 03.12.2004, 20:15
Отправитель: Gedeon


Отвечает vitya

п—пґяЂп°пІяЃя‚пІяѓп№я‚пµ, ArGentum!
п° пєп°пєп°яЏ пћпЎ? п’ пћпєпЅп°я… пµяЃя‚яЊ я„яѓпЅпєя†пёяЏ - ExitWindowsEx

Ответ отправлен: 05.12.2004, 16:49
Отправитель: vitya


Отвечает gvozdok

Добрый день, ArGentum!
Для выключения компа используется API-функция
bool ExitWindowsEx (UINT uFlags, DWORD dwReason);
Declared in Winuser.h; include Windows.h.
Use User32.lib.
uFlags:
для перегрузки используем EWX_REBOOT
для выключения питания EWX_POWEROFF
если нужно экстренно выключит/перегрузить комп, используем вышеуказаные влаги в сочетании с EWX_FORCE
Второй параметр используется только в XP для указания причины перезагрузки.
В NT/2000/XP для использования ExitWindowsEx необходимо иметь
привелегию SE_SHUTDOWN_NAME, по умолчанию не установленную
даже для администратора. Установить её можно нижеприведённым кодом.
HANDLE hToken;
TOKEN_PRIVILEGES* NewState;
OpenProcessToken (GetCurrentProcess (), TOKEN_ADJUST_PRIVILEGES,
&hToken);
NewState = (TOKEN_PRIVILEGES*) malloc (sizeof
(TOKEN_PRIVILEGES) + sizeof (LUID_AND_ATTRIBUTES));
NewState->PrivilegeCount = 1;
Looku pPrivilegeValue (NULL, SE_SHUTDOWN_NAME,
&NewState->Privileges[0].Luid);
NewState->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges (hToken, FALSE, NewState, NULL, NULL, NULL);
free (NewState);
CloseHandle (hToken);


Ответ отправлен: 03.12.2004, 23:38
Отправитель: gvozdok


 Вопрос № 2065

здравствуйте!
обьясните мне на пальцах зачем нужен указатель на void
спасобо



Вопрос отправлен: 03.12.2004, 19:43
Отправитель: очень хочу научиться

[Следующий вопрос >>] [Список вопросов]

Отвечает Gedeon

Приветствую Вас, очень хочу научиться!
Это указатель на что угодно, нужен он для того, чтобы использовать его в ситуации, когда например неизвестно какой обьект вернет функция.

Ответ отправлен: 03.12.2004, 20:19
Отправитель: Gedeon


Отвечает gvozdok

Доброе время суток, очень хочу научиться!
Тип void служит для согласования синтаксиса, например функция всегда должна возвращать како-либо значение, а по логике программы вам ни чего не надо возвращать вот и пишешь например так void Procedure(int a, int b), это получается как аналог паскалевской процедуры.

Ответ отправлен: 03.12.2004, 23:38
Отправитель: gvozdok


Отвечает Василевский Александр

Приветствую Вас, очень хочу научиться!
void является специальным типом. Указатель на void означает, что есть указатель, а на что он указывает - неизвестно. Все указатели автоматически приводятся к указателю на void.
В частности, функция malloc:
void * malloc( int size );
Данная функция выделяет блок памяти. Ей безразлично, какие данные будут храниться в данном блоке. Её нужен только размер. Указатель на void здесь означает, что функция возвращает указатель на блок памяти. Тип данных в этом блоке неопределён и программист должен приводить указатель на данный тип:
char* pch = (char*) malloc( sizeof(char) );
int* pi = (int*) malloc( sizeof(char) );
Ещё один пример - функция free:
void free( void* block );
Данная функция освобождает блок памяти. Её безразлично, что содержится в памяти, поэтому указатель на блок объявлен как void*. В продолжении примера:
free( pch );
free( pi );

< /i>
Ответ отправлен: 06.12.2004, 11:10
Отправитель: Василевский Александр


Отвечает CrackLab

Доброе время суток, очень хочу научиться!
Цитирую Страуструпа:
"Тип указателя void* был придуман для ANSI С, а впервые реализован в С++."
"2.3.4 Тип void
Тип void синтаксически эквивалентен основным типам, но использовать его можно только в производном типе. Объектов типа void не существует. С его помощью задаются указатели на объекты неизвестного типа или функции, невозвращающие значение.
void f(); // f не возвращает значения
void* pv; // указатель на объект неизвестного типа
Указатель произвольного типа можно присваивать переменной типа void*. На первый взгляд этому трудно найти применение, поскольку для void* недопустимо косвенное обращение (разыменование). Однако, именно на этом ограничении основывается использование типа void*. Он приписывается параметрам функций, которые не должны знать истинного типа этих параметров. Тип void* имеют также бестиповые объекты, возвращаемые функциями. Для использования таких объектов нужно выполнить явную операцию преобразования типа. Такие функции обычно находятся на самых нижних уровнях системы, которые управляют аппаратными ресурсами. Приведем пример:
void* malloc(unsigned size);
void free(void*);
void f() // распределение памяти в стиле Си
{
int* pi = (int*)malloc(10*sizeof(int));
char* pc = (char*)malloc(10);
//...
free(pi);
free(pc);
}
Обозначение: (тип) выражение - используется для задания операции преобразования выражения к типу, поэтому перед присваиванием pi тип void*, возвращаемый в первом вызове malloc(), преобразуется в тип int."
Если своими словами, то указатель на тип void используется когда мы не знаем на данные какого типа будет указывать наш указатель или когда функция возвращает указатель на блок данных в памяти, который может быть и массивом символов и массивом типа int и т.д. В таких случаях используется приведения типа (void *) к нужному типу и никаких проблем не возни кает.

Ответ отправлен: 03.12.2004, 21:06
Отправитель: CrackLab


Отвечает vitya

п”пѕп±яЂпѕпµ пІяЂпµпјяЏ яЃяѓя‚пѕпє, пѕя‡пµпЅяЊ я…пѕя‡яѓ пЅп°яѓя‡пёя‚яЊяЃяЏ!
я‡я‚пѕп± яѓпєп°п·я‹пІп°я‚яЊ пЅп° пѕп±яЉпµпєя‚я‹ п»яЋп±пѕпЁпѕ я‚пёпїп°. пЅп°пїяЂпёпјпµяЂ malloc пІя‹пґпµп»яЏпµя‚ пїп°пјяЏя‚яЊ пІ п±п°п№я‚п°я… пё пЅпµ пёп·пІпµяЃя‚пЅпѕ, я‡я‚пѕ я‚яѓпґп° п±яѓпґпµя‚ пїпѕпјпµя‰пµпЅпѕ, пѕя‚яЃяЋпґп° void *

Ответ отправлен: 05.12.2004, 16:50
Отправитель: vitya



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (22)
C / C++ (21)
Perl (5)
Builder / Delphi (19)
Pascal (20)
Basic / VBA (12)
Java / JavaScript (5)
PHP (19)
Криптография (9)
WinAPI (20)
Радиоэлектроника (15)
Пользователю
Windows 95/98/Me (38)
Windows NT/2000/XP (59)
"Железо" (38)
Поиск информации (23)
Администратору
Windows NT/2000/XP (38)
Linux / Unix (18)
Юристу
Гражданское право (11)
Семейное право (6)
Трудовое право (10)
КоАП (6)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Web-студия "Kalashnikoff.ru"


hotlog_js="1.0";hotlog_d=document; hotlog_n=navigator;hotlog_rn=Math.random(); hotlog_n_n=(hotlog_n.appName.substring(0,3)=="Mic")?0:1; hotlog_r=""+hotlog_rn+"&s=25513&im=127&r="+escape(hotlog_d.referrer)+"&pg="+ escape(window.location.href); hotlog_d.cookie="hotlog=1"; hotlog_r+="&c="+(hotlog_d.cookie?"Y":"N"); hotlog_d.cookie="hotlog=1; expires=Thu, 01-Jan-70 00:00:01 GMT" hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2";hotlog_s=screen; hotlog_r+="&wh="+hotlog_s.width+'x'+hotlog_s.height+"&px="+((hotlog_n_n==0)? hotlog_s.colorDepth:hotlog_s.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; hotlog_d.write("HotLog") Яндекс цитирования
© 2001-2004 Россия, Москва. Идея, дизайн, программирование: Калашников О.А. ICQ: 68951340
При перепечатке материалов ссылка на данный сайт обязательна!

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.cplus
Отписаться

В избранное