Форум: "Потрепаться";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
ВнизНеправильные параметры при вызове WinApi функций Найти похожие ветки
← →
Piter © (2005-01-21 23:57) [0]Мне вот что интересно. Не знаю как в 9x, но в NT некоторые области ВАП процесса заблокированы для чтения/записи самим процессом. Например, явно защищена таблица описателей.
Так вот, что будет, если в качестве параметра в WinApi функцию передать адрес этой области как буфер для записи? Что сделает функция?
Есть ли такие функции, которые записывают в каком-нибудь другом режиме привелегий? Ведь тогда они смогут перезаписать эту системную область? Я думаю этого не должно произойти...
А что тогда вернет WinApi функция или GetLastError, что неправильный указатель?
Я просто не могу проверить, ибо не знаю как определить адрес той же самой таблицы описателей...
← →
Nous Mellon © (2005-01-22 00:04) [1]
> ибо не знаю как определить адрес той же самой таблицы описателей...
Руссиновича так и не нашел, а то там было по-моему? С уверенностью говорить не могу ибо мозги затуманены прошедшей сессией.
← →
AlterEgo of WondeRu © (2005-01-22 00:18) [2]Piter © (21.01.05 23:57)
Так вот, что будет, если в качестве параметра в WinApi функцию передать адрес этой области как буфер для записи? Что сделает функция?
тупо!
← →
Piter © (2005-01-22 01:15) [3]Nous Mellon © (22.01.05 0:04) [1]
Руссиновича так и не нашел, а то там было по-моему?
нет, не нашел. То есть, даже в общем и не искал, тоже времени не особо. И денег нету к тому же :(
← →
Piter © (2005-01-22 01:16) [4]AlterEgo of WondeRu © (22.01.05 0:18) [2]
тупо
что тупо?
← →
AlterEgo of WondeRu © (2005-01-22 01:23) [5]Piter © (22.01.05 1:16) [4]
что тупо?
"все тупо" (с) Керк
AV будет по любому!!!
← →
Piter © (2005-01-22 01:34) [6]AlterEgo of WondeRu © (22.01.05 1:23) [5]
AV будет по любому!!!
AV? :))))
Да неужто? Прямо таки и вылезет исключение Access Violation, да?
← →
AlterEgo of WondeRu © (2005-01-22 01:38) [7]Piter © (22.01.05 1:34) [6]
AV? :))))
Да неужто? Прямо таки и вылезет исключение Access Violation, да?
Систему по С2 лохи сертифицировали, да?
← →
Просто Джо © (2005-01-22 02:28) [8]AlterEgo of WondeRu © (22.01.05 01:38) [7]
Вот это тупо.
← →
Piter © (2005-01-22 02:50) [9]AlterEgo of WondeRu © (22.01.05 1:38) [7]
Систему по С2 лохи сертифицировали, да?
сколько умных слов...
Вообщем, могу тебя заверить, что AV не выскочит, если ты вообще понимаешь что такое AV.
← →
jack128 © (2005-01-22 02:55) [10]Piter © (21.01.05 23:57)
А что тогда вернет WinApi функция или GetLastError, что неправильный указатель?
С чего AV должно возникныть я не понял, но по идее ERROR_ACCESS_DENIED ...
← →
GuAV © (2005-01-22 03:14) [11]GetWindowRect(Handle, TRect(Pointer(0)^)); - ничего
GetSystemTime(TSystemTime(Pointer($88888888)^)); - ошибка 87 - параметр задан неверо
GetMessage(TMsg(Pointer(1312321)^),0,0,0) - Программа PROJECT2 вызвала сбой при обращении к странице памяти ...
GetWindowRect(Handle, TRect(Pointer($88888888)^)); - тупо вылетает
GetVersionEx(TOSVersionInfo(Pointer($88888888)^));
А тут уже AV, как и ожидалось
Короче, самая разная реакция.
PS: w98
← →
jack128 © (2005-01-22 03:37) [12]GuAV © (22.01.05 3:14) [11]
лудше создай read only mmf и на нем тестируй.. У меня, например (win2k), если на GetMessage подать nil - AV, а если read only mmf, то ERROR_NOACCESS
← →
jack128 © (2005-01-22 03:39) [13]Что в общем то логично -) Правда на GetWindowRect всегда AV вылетает..
← →
Alex Konshin © (2005-01-22 04:22) [14]Так ведь доступ поверяется железно, т.е. самим процессором.
На самом деле аппаратно отслеживается доступ при любой операции с памятью. Например, даже если вам разрешено куда-то писать, но на странице не стоит dirty бит, то произодет прерывание и система создаст копию страницы, поставит на ней dirty бит и подсунет вам, что вы туда писали. Именно так работает разделение системных DLL и работа с MMF.
У меня правда сейчас путаница в голове, я с Windows CE на Hitachi SH-4 ковыряюсь, могу и напутать, где как. Но даже в Windows CE на страницы можно установить права доступа и они будут соблюдаться. Те же функции Win32 API сначала работают в адресном пространстве самого процесса и в пользовательском режиме. Сначала это просто функции в некой DLL. Даже системные вызовы ядра могут исполнятся в адресном пространстве вызывающего процесса, а могут и переключится на системный процесс.
Кстати, занятно, что по крайней мере в WinCE нити пользовательских процессов могут передаваться к системным процессам. Т.е. указатель на текущую нить остается прежним, а указатель на процесс меняется на системный. То есть находясь в одной нити можно побывать в разных адресных пространствах. Для меня это было откровением. Вообще занятные вещи там можно увидеть.
← →
AlterEgo of WondeRu © (2005-01-22 13:05) [15]Piter © (22.01.05 2:50) [9]
Вообщем, могу тебя заверить, что AV не выскочит, если ты вообще понимаешь что такое AV.
см.выше)))
AV - Access Violation, частая обшибка в твоем клиенте))) но я не жалуюсь)))
← →
Digitman © (2005-01-22 13:44) [16]
> Piter
именно AV-исключение и будет в дан.случае.
некая страница некоего региона в ВАП целевого процесса имеет некие права для доступа к ней, и ты их нарушаешь, что и приводит к исключению access violation, которое как раз и переводится ккак "попытка нарушения прав доступа"
← →
GuAV © (2005-01-22 13:54) [17]
> лудше создай read only mmf и на нем тестируй..
Не делает разницы.procedure TForm1.Button1Click(Sender: TObject);
var h: THandle; P: Pointer;
begin
h := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READONLY,
0, 4096, nil);
try
P := MapViewOfFile(h, FILE_MAP_READ, 0, 0, 0);
try
Memo1.Lines.Add("GetVersionEx");
Memo1.Lines.Add(BoolToStr(
GetVersionEx(TOSVersionInfo(P^)), True)); // false
Memo1.Lines.Add(SysErrorMessage(GetLastError)); // 0 - успешно
with TOSVersionInfo(P^) do
Memo1.Lines.Add(Format("%d %d %d",
[dwMajorVersion, dwMinorVersion, dwBuildNumber])); // 0 0 0
{
Memo1.Lines.Add("GetWindowRect");
Memo1.Lines.Add(BoolToStr(
GetWindowRect(Handle, TRect(P^)), True));
Memo1.Lines.Add(SysErrorMessage(GetLastError));
}
// на GetWindowRect тупо вылетает.
{
Application.ProcessMessages;
PostMessage(Handle, WM_NULL, 0, 0);
Memo1.Lines.Add(BoolToStr(GetMessage(TMsg(P^),0,0,0), True));
}
// Программа PROJECT1 вызвала сбой при обращении к странице памяти
GetSystemTime(TSystemTime(P^));
Memo1.Lines.Add(SysErrorMessage(GetLastError));
// 87 - параметр задан неверно
finally
UnmapViewOfFile(P);
end;
finally
CloseHandle(h);
end;
end;
← →
GuAV © (2005-01-22 13:55) [18]Digitman © (22.01.05 13:44) [16]
Я тоже так думал, что будет AV. Но оказвается не всегда, см [17]. Счас проверю в ХР...
← →
Digitman © (2005-01-22 14:02) [19]
> GuAV © (22.01.05 13:55) [18]
а ты различешь случаи тестирования данной программы автономно и подо встр.отладчиком ?
← →
GuAV © (2005-01-22 14:11) [20]XP ведёт себя лучше. Либо ERROR_ACCESS_DENIED = 5 либо AV.
> а ты различешь случаи тестирования данной программы
> автономно и подо встр.отладчиком ?
Этот момент сейчас проверил. Разница есть только там где под отладчиком вылетало, без него
>Программа PROJECT1 вызвала сбой при обращении к странице памяти
← →
Digitman © (2005-01-22 14:34) [21]
> Piter
> не знаю как определить адрес той же самой таблицы описателей
на sysinternals.com ты найдешь программные примеры обращения к системным таблицам, в т.ч. и к таблицам описателей
не просветишь ли, зачем тебе потребовалось модифицировать таблицу описателей ? если, конечно, это не чистое любопытство ..
← →
AlterEgo of WondeRu © (2005-01-22 14:38) [22]Digitman © (22.01.05 14:34) [21]
зачем тебе потребовалось модифицировать таблицу описателей ? если, конечно, это не чистое любопытство ..
все думает, как бы качество клиента повысить)
← →
Piter © (2005-01-22 18:08) [23]jack128 © (22.01.05 2:55) [10]
С чего AV должно возникныть я не понял
так и я не понял! Я как раз и говорю о том, что AV не будет
GuAV © (22.01.05 3:14) [11]
ты как-то некорректно все делаешь. В твоих примерах, я так подозреваю, дело даже до вызова WinApi функций не доходит. Ошибка происходит еще на стадии разыименовывания указателя
Короче, самая разная реакция
это зависит, видимо, от того, защищена ли эта область от чтения/записи или под эту виртуальную область вообще не выделена память
jack128 © (22.01.05 3:37) [12]
У меня, например (win2k), если на GetMessage подать nil - AV
эх, чувствую, что ты совершаешь ту же ошибку, что и GuAV - каким образом ты можешь вызвать GetMessage с nil?!?!?!
а если read only mmf, то ERROR_NOACCESS
понятно. Видимо, все таки продумано :)
В общем, вопрос снят, кроме одного - а есть ли такие функции, что работают в таком системном режиме, что просто могут не заметить установки доступа к памяти и перезаписать ее?
AlterEgo of WondeRu © (22.01.05 13:05) [15]
AV - Access Violation, частая обшибка в твоем клиенте))) но я не жалуюсь)))
то, что ты меня пытаешься подколоть, вовсе не означает, что ты разбираешься что такое AV
Digitman © (22.01.05 13:44) [16]
именно AV-исключение и будет в дан.случае
ну от тебя не ожидал. Как может произойти AV при работе WinApi функций?! AV - чисто дельфовое исключение и произойти оно может только с откомпилированным Дельфовым кодом, если он обратится куда-нибудь не туда...
GuAV © (22.01.05 13:55) [18]
Я тоже так думал, что будет AV.
и ты туда же! Ну ПОДУМАЙ, как может произойти AV, если ошибку доступа вызывают WinApi функции?!
Digitman © (22.01.05 14:34) [21]
если, конечно, это не чистое любопытство
чистое любопытство
sysinternals.com ты найдешь программные примеры обращения к системным таблицам, в т.ч. и к таблицам описателей
а по конкретнее ссылочек нету?
← →
Kerk © (2005-01-22 18:14) [24]Piter © (22.01.05 18:08) [23]
ну от тебя не ожидал. Как может произойти AV при работе WinApi функций?! AV - чисто дельфовое исключение и произойти оно может только с откомпилированным Дельфовым кодом, если он обратится куда-нибудь не туда...
Да. Табличка "Access violation" не появится. Но это дела не меняет. AV может происходить независимо от ЯП.
LMD
← →
AlterEgo of WondeRu © (2005-01-22 18:14) [25]Piter © (22.01.05 18:08) [23]
то, что ты меня пытаешься подколоть, вовсе не означает, что ты разбираешься что такое AV
мало ли что может быть... гадать я не люблю, я предсказываю :)) А обижаться не стоит)))
Piter © (22.01.05 18:08) [23]
Как может произойти AV при работе WinApi функций?! AV - чисто дельфовое исключение и произойти оно может только с откомпилированным Дельфовым кодом, если он обратится куда-нибудь не туда...
все больше и больше узнаю об архитектуре винды... пора Рихтера в помойку выкидывать!
← →
Kerk © (2005-01-22 18:26) [26]Piter © (22.01.05 18:08) [23]
Ошибка происходит еще на стадии разыименовывания указателя
А что есть разыменование указателя? Помедитируй над этим:mov eax,[123]
можно ли считать этот код разыменованием указателя? будет ли здесь AV?
← →
Piter © (2005-01-22 18:37) [27]AlterEgo of WondeRu © (22.01.05 18:14) [25]
мало ли что может быть... гадать я не люблю, я предсказываю
ну если ты в программировании привык гадать - мои поздравления...
AlterEgo of WondeRu © (22.01.05 18:14) [25]
А обижаться не стоит
а кто обижался?
пора Рихтера в помойку выкидывать
а причем здесь Рихтер? Рихтер скорее всего и не подозревает о таком типе исключения - AV
Kerk © (22.01.05 18:26) [26]
А что есть разыменование указателя?
чтение памяти, куда указывает этот указатель
Kerk © (22.01.05 18:26) [26]
Помедитируй над этим
если хочешь - сам медитируй.
А если ты не понял, что я хотел сказать - что я могу поделать?
← →
Kerk © (2005-01-22 18:42) [28]Так же советую тебе иногда заглядывать в MSDN.
Посмотри что МСДНу (Platform SDK: Debugging and Error Handling) известно о EXCEPTION_RECORD structureEXCEPTION_ACCESS_VIOLATION
The thread tried to read from or write to a virtual address for which it does not have the appropriate access.
← →
Piter © (2005-01-22 18:45) [29]Kerk © (22.01.05 18:42) [28]
И что? Как связаны виндовые исключения и дельфовые?
← →
Kerk © (2005-01-22 18:46) [30]Piter © (22.01.05 18:45) [29]
Причем тут дельфовые исключения? Мы же про WinAPI говорим. Или ты не знаешь что такое MSDN и Platform SDK ?
← →
begin...end © (2005-01-22 18:48) [31]> [29] Piter © (22.01.05 18:45)
А кто говорил про дельфовые исключения?
← →
Kerk © (2005-01-22 18:48) [32]AV есть? есть. факт. и Рихтера зря обидел.
← →
AlterEgo of WondeRu © (2005-01-22 18:48) [33]Piter © (22.01.05 18:37) [27]
пора Рихтера в помойку выкидывать
а причем здесь Рихтер? Рихтер скорее всего и не подозревает о таком типе исключения - AV
да он вообще странный чел (Рихтер), учит тому чего сам не знает ;)
← →
Piter © (2005-01-22 19:30) [34]Ну я над вами фигею...
Kerk © (22.01.05 18:14) [24]
Да. Табличка "Access violation" не появится
Конечно, не появится.
Да только на мое замечание:
Piter © (22.01.05 1:34) [6]
Да неужто? Прямо таки и вылезет исключение Access Violation, да?
Мне дали понять, что типа да, так и будет.
Kerk © (22.01.05 18:14) [24]
LMD
ой как хочется использовать эту аббревиатуру, да? Ну прямо дайте кому-нибудь, да влепить...
Да только ошибся ты, поторопился, и ламером то оказался сам
Piter © (22.01.05 18:45) [29]
Причем тут дельфовые исключения?
что значит причем? Access Violation - ДЕЛЬФОВОЕ ИСКЛЮЧЕНИЕ. Модуль SysUtils:EAccessViolation = class(EExternal);
Я не знаю почему сюда приплясали AV. Я то как раз говорил про ошибку доступа к памяти, которую могут вызвать WinApi функции, если будут обращаться к защищенным областям памяти процесса. На что МНЕ СТАЛИ ГОВОРИТЬ ОБ ИСКЛЮЧЕНИИ ACCESS VIOLATION, вероятно забыв, что AV - чисто дельфовое исключение и не может быть вызвано WinApi функциями.
Тот же GuAV приводил примеры:
GetVersionEx(TOSVersionInfo(Pointer($88888888)^));
и говорил, что здесь AV. Правильно, здесь AV, но как это связано с темой ошибкой доступа WinApi функций? Здесь AV будет и без всякой попытки вызвать WinApi Функцию GetVersionEx:procedure TForm1.Button1Click(Sender: TObject);
var
VI: TOSVersionInfo;
begin
VI := TOSVersionInfo(Pointer($88888888)^); // ЗДЕСЬ БЛИН БУДЕТ AV!
//Хотя здесь нет никакого вызова функции
end;
begin...end © (22.01.05 18:48) [31]
А кто говорил про дельфовые исключения?
А ты прочитай тему заново и посмотри, кто первым завел разговор про AV. Насколько я понял, AlterEgo of WondeRu завел разговор про AV и стал говорить, что они будут возникать при вызове WinApi функций. На что я стал ему доказывать, что AV НЕ МОЖЕТ возникнуть при вызове WinApi функций, потом вы подключились, пытаясь втереть мне абсолютно известные мне факты. Цитирую:
AlterEgo of WondeRu © (22.01.05 1:23) [5]
AV будет по любому!!!
Piter © (22.01.05 1:34) [6]
AV? :))))
Да неужто? Прямо таки и вылезет исключение Access Violation, да?
Piter © (22.01.05 2:50) [9]
Вообщем, могу тебя заверить, что AV не выскочит, если ты вообще понимаешь что такое AV
AlterEgo of WondeRu © (22.01.05 13:05) [15]
AV - Access Violation, частая обшибка в твоем клиенте))) но я не жалуюсь)))
Из этих цитат очевидно, что AlterEgo of WondeRu не знает что такое Access Violation и почему он возникает, раз считает что при вызове WinApi функций это исключение может появиться.
Как же задалбливает говорить одно и тоже.
Kerk © (22.01.05 18:48) [32]
AV есть? есть. факт
а вот еще один человек, который демонстрирует незнание того, что такое AV. Он даже не посмотрел на примеры или их не понял. Потому что там AV возникает, ДА! Но возникает НЕ ПРИ ВЫЗОВЕ WINAPI ФУНКЦИЙ.
AlterEgo of WondeRu © (22.01.05 18:48) [33]
да он вообще странный чел (Рихтер), учит тому чего сам не знает
мне твои потрясающие фразы уже надоели, честное слово. Если не знаешь - изучи, чего ты ссылаешься на Рихтера? Рихтер о EAccessViolation, я думаю, никогда не писал и не напишет. Твои постоянные ссылки на литературу озадачивают. Смотрю в книгу - вижу фигу?
← →
AlterEgo of WondeRu © (2005-01-22 19:54) [35]Piter © (22.01.05 19:30) [34]
Рихтер о EAccessViolation, я думаю, никогда не писал и не напишет
сейчас буду материться!!!
глава из Рихтера:Явный вызов функции UnhandledExceptionFilter
Функция UnhandledExceptionFilter полностью задокументирована, и Вы можете сами вызывать ее в своих программах. Вот пример ее использования:
void Funcadelic()
{
__try
{
...
}
__except (ExpFltr(GetExceptionTnformation()))
{
...
}
}
LONG ExpFltr(PEXCEPTION_POINTERS pEP)
{
DWORD dwExceptionCode - pEP->ExceptionRecord.ExceptionCode;
if (dwExceptionCode == EXCEPTION_ACCESS_VIOLATION)
{
// что-то делаем здесь...
return(EXCEPTION_CONTINUE_EXFCUTION);
}
return(UnhandledExceptionFilter(pEP));
}
Исключение в блоке try функции Funcadelic приводит к вызову ExpFltr. Ей переда ется значение, возвращаемое GetExceptionlnformation. Внутри фильтра определяется код исключения и сравнивается с EXCEPTION_ACCESS_VIOLATION. Если было нару шение доступа, фильтр исправляет ситуацию и возвращает EXCEPTION_CONTI NUE_EXECUTION. Это значение заставляет систему возобновить выполнение програм мы с инструкции, вызвавшей исключение.
Если произошло какое-то другое исключение, ExpFltr вызывает UnhandledExcep tionFilter, передавая ей адрес структуры EXCEPTION_POINTERS. Функция Unhandled ExceptionFilter открывает окно, позволяющее завершить процесс или начать отладку. Ее возвращаемое значение становится и результатом функции ExpFltr.
← →
AlterEgo of WondeRu © (2005-01-22 20:00) [36]и еще:
Исключения, связанные с памятью
EXCEPTION_ACCESS_VIOLATION Поток пьтался считать или записать по виртуальному адресу, не имея на то необходимых прав. Это самое распрост раненное исключение.
давай прекратим А? каждый останется при своем!
← →
Kerk © (2005-01-22 20:34) [37]Piter © (22.01.05 19:30) [34]
Я не знаю почему сюда приплясали AV. Я то как раз говорил про ошибку доступа к памяти, которую могут вызвать WinApi функции, если будут обращаться к защищенным областям памяти процесса. На что МНЕ СТАЛИ ГОВОРИТЬ ОБ ИСКЛЮЧЕНИИ ACCESS VIOLATION, вероятно забыв, что AV - чисто дельфовое исключение и не может быть вызвано WinApi функциями.
Ты тупой, да? В Platform SDK оно тоже в связи с дельфями упоминается?
Умей признать свою ошибку. Смешно уже, ей богу. :)
LMD
← →
Kerk © (2005-01-22 20:43) [38]Piter © (22.01.05 19:30) [34]
ой как хочется использовать эту аббревиатуру, да? Ну прямо дайте кому-нибудь, да влепить...
вот влепляю почему-то только тебе да некоторым детям из "основной".
← →
AlterEgo of WondeRu © (2005-01-22 20:46) [39]Kerk © (22.01.05 20:43) [38]
Керк, я те клаву подарю, она сразу "LMD" одной клавишей вставляет)))
← →
Kerk © (2005-01-22 20:46) [40]AlterEgo of WondeRu © (22.01.05 20:46) [39]
заметано!
← →
Piter © (2005-01-22 21:34) [41]AlterEgo of WondeRu © (22.01.05 19:54) [35]
сейчас буду материться!!!
получишь R/O
if (dwExceptionCode == EXCEPTION_ACCESS_VIOLATION)
Ага. То есть, ты сейчас прилюдно хочешь сказать, что EAccessViolation и EXCEPTION_ACCESS_VIOLATION одно и тоже?
← →
Kerk © (2005-01-22 21:38) [42]Piter © (22.01.05 21:34) [41]
EAccessViolation
А при чем тут оно вообще?
← →
AlterEgo of WondeRu © (2005-01-22 21:46) [43]Piter © (22.01.05 21:34) [41]
Ага. То есть, ты сейчас прилюдно хочешь сказать, что EAccessViolation и EXCEPTION_ACCESS_VIOLATION одно и тоже?
скажу что ДААА!!! А если меня прилюдно опустят, то признаю свою ошибку, если мне приведут аргументы обратного!
← →
Piter © (2005-01-22 21:46) [44]Kerk © (22.01.05 20:34) [37]
Ты тупой, да? В Platform SDK оно тоже в связи с дельфями упоминается?
Где в SDK упоминается EAccessViolation? Цитату в студию, плиз
Умей признать свою ошибку
почему ты себе это не говоришь?
Kerk © (22.01.05 20:34) [37]
LMD
ты маленький еще, чтобы кидаться такими словами.
Я ведь уверен, что ты это не себе говоришь, хотя возможно стоило бы.
← →
Piter © (2005-01-22 21:48) [45]Kerk © (22.01.05 21:38) [42]
А при чем тут оно вообще?
проблема в том, что ты вступаешься постоянно за AlterEgo of WondeRu. А ты вообще читаешь, что он пишет? Если ты этого не читаешь - может тебе разуть глаза и прочитать всю ветку заново?
Да вот прям сейчас он написал:
AlterEgo of WondeRu © (22.01.05 21:46) [43]
Ага. То есть, ты сейчас прилюдно хочешь сказать, что EAccessViolation и EXCEPTION_ACCESS_VIOLATION одно и тоже?
скажу что ДААА!!!
← →
Kerk © (2005-01-22 21:53) [46]Piter © (22.01.05 21:46) [44]
Где в SDK упоминается EAccessViolation? Цитату в студию, плиз
Млять! Покажи где я про EAccessViolation говорил. Цитату в студию плиз.
Де-факто WondeRu прав. EAccessViolation - это обертка для EXCEPTION_ACCESS_VIOLATION.
Piter © (22.01.05 21:46) [44]
ты маленький еще, чтобы кидаться такими словами.
LOL. В свою анкету загляни.
← →
Kerk © (2005-01-22 21:56) [47]Piter © (22.01.05 21:48) [45]
Это ты тут брызгая слюной втираешь, что AV - чисто дельфовское изобретение. Признай уже ошибку.. пора.
← →
Piter © (2005-01-22 22:35) [48]Kerk © (22.01.05 21:53) [46]
LOL. В свою анкету загляни
я не про возвраст говорю, причем здесь он? Я говорю про внутреннюю зрелость что ли. Не будет взрослый человек кидаться налево и направо такими аббревиатурами, как LMD. Это вообще зачастую прием тех же самых ламеров, когда человек не способен к аргументированному спору - он просто говорит LMD, и типа разговор исчерпан. О чем говорить с ламерами?
Kerk © (22.01.05 21:56) [47]
Это ты тут брызгая слюной втираешь, что AV - чисто дельфовское изобретение
Во-первых, я слюной не брызгаю.
Во-вторых - да, EAccessViolation чисто дельфовое изобретение.
Хорошо, насколько я понимах у нас просто различается терминология. Я под AV понимаю EAccessViolation, ты под AV понимаешь вообще ошибку доступа к памяти.
Если это принять - то твои слова верны, мои - тоже.
Но что тогда тебе не нравится? Я ведь вообще разговаривал с AlterEgo of WondeRu, который под AV понимает именно EAccessViolation, как и я. И говорит, что AV (то есть EAccessViolation) возникнет при работе WinApi функций. Я ему указал, что такого быть не может. После чего была развернута какая-то непонятная дискуссия с приведением почему-то Рихтера (какое он имеет отношения к EAccessViolation?).
Да еще вмешался ты, хотя под AV понимаешь совсем другое. Ну и как ты можешь защищать AlterEgo of WondeRu? Он, спору нет, был бы прав, если бы считал как ты. Но он то считает по другому.
Почему ты наезжаешь на меня? Если ты процитируешь предложение, где я сказал НЕПРАВДУ - цитируй.
← →
Kerk © (2005-01-22 22:42) [49]Piter © (22.01.05 22:35) [48]
будет взрослый человек кидаться налево и направо
Приведи список из более, чем двух человек кому я это сказал. :-)
> Да еще вмешался ты, хотя под AV понимаешь совсем
> другое.
А еще как понимать? Разговор про WinAPI идет или где?
← →
Piter © (2005-01-22 22:47) [50]Kerk © (22.01.05 22:42) [49]
Приведи список из более, чем двух человек кому я это сказал
ну хорошо, не налево и направо, а без оснований.
А маленькое количество - это просто у тебя, видимо, недавно началось, что ты ставишь себя выше других.
А еще как понимать? Разговор про WinAPI идет или где?
ха, так и я тут с тобой согласен. Я не понимаю, почему завели разговор об EAccessViolation, но его завели! Я то здесь причем?
Я устал повторять, но например AlterEgo of WondeRu утверждал, что при работе WinApi функций возникнет EAccessViolation. На что я ему ответил, ЧТО ТАКОГО БЫТЬ НЕ МОЖЕТ.
После чего почему-то понеслась дикая дискуссия, в том числе и с тобой. И кто здесь не прав? Я?
← →
Kerk © (2005-01-22 22:49) [51]Piter © (22.01.05 22:47) [50]
почему завели разговор об EAccessViolation, но его завели!
так его ты завел!
> AlterEgo of WondeRu утверждал, что при работе WinApi
> функций возникнет EAccessViolation.
он этого не говорил
> А маленькое количество - это просто у тебя, видимо,
> недавно началось, что ты ставишь себя выше других.
нет. у меня это давно. :Р
те, кто меня хорошо знает, подтвердят :)
← →
AlterEgo of WondeRu © (2005-01-22 22:50) [52]Piter © (22.01.05 22:35) [48]
под AV понимает именно EAccessViolation
откуда взял???
Про EAccessViolation я упомянал лишь единожды [43]!!!
если честно, то мне Ваша привязка к конкретному языку программирования оочень удивляет!!! Вы полагаете, что если в делфе Вы отловили EAccessViolation, то ОС подумала: "это делфовое приложение Piter"a, поэтому в нем тока делфовые исключения, а EXCEPTION_ACCESS_VIOLATION, ненужная хрень, и тока для приложения WondeRu, написанного на VC++" !!! ))))
А Рихтера я буду цитировать и впредь, т.к. он принимал участие в разработке компонентов винды и допущен к "телу" ОС)))
← →
AlterEgo of WondeRu © (2005-01-22 22:53) [53]а какого хуя я оправдываюсь??? перед кем???
← →
GuAV © (2005-01-22 23:22) [54]
>GuAV © (22.01.05 3:14) [11]
>
> ты как-то некорректно все делаешь. В твоих примерах, я
> так подозреваю, дело даже до вызова WinApi функций не
> доходит. Ошибка происходит еще на стадии
> разыименовывания указателя
Разыменования указателя как такового нет. var параметр откомпилируется в тот же код что и параметр - указатель. Потом, в случае с MMF получаем вполне корректный указатель.
Передача переменной по ссылке или указателя на переменную по значению произведёт один и тот же код.
> и произойти оно может только с откомпилированным
> Дельфовым кодом
Когда вообще бывает EAccessViolation ? При недопустимой операции с памятью. Типа так MOV EAX, [0]. Так вот этот код соверешнно одинаково выполнится в приложении и библиотеке и приведет к AV. Исключение EAccessViolation или runtime error 216 - это уже результат обработки критических ошибок дельфовской rtl с sysutils и без соответсвенно.
> это зависит, видимо, от того, защищена ли эта область
> от чтения/записи или под эту виртуальную область
> вообще не выделена память
Нет, дорогой, это зависит от реализации конкретной функции, которую я вызываю. параметр-то тот же.
> Ну ПОДУМАЙ
А самому слабо ?
← →
Piter © (2005-01-23 00:16) [55]Kerk © (22.01.05 22:49) [51]
почему завели разговор об EAccessViolation, но его завели!
так его ты завел!
цитируй
Kerk © (22.01.05 22:49) [51]
он этого не говорил
как это не говорил? Он сказал, что AV будет по любому, а потом дал понять, что он понимает под AV в посте [15]
AlterEgo of WondeRu © (22.01.05 22:53) [53]
предлагаю умерить эмоции
GuAV © (22.01.05 23:22) [54]
Разыменования указателя как такового нет. var параметр откомпилируется в тот же код что и параметр - указатель. Потом, в случае с MMF получаем вполне корректный указатель.
Передача переменной по ссылке или указателя на переменную по значению произведёт один и тот же код.
а к чему ты это сказал? Я тебе привел пример в пику твоему:procedure TForm1.Button1Click(Sender: TObject);
var
VI: TOSVersionInfo;
begin
VI := TOSVersionInfo(Pointer($88888888)^); // ЗДЕСЬ БЛИН БУДЕТ AV!
//Хотя здесь нет никакого вызова функции
end;
Твой пример был таким:GetVersionEx(TOSVersionInfo(Pointer($88888888)^));
Я говорил про передачу неправильных параметров WinApi функциям, а тут никакой передачи параметров то и нету. Причем здесь вообще WinApi функции? Ты ведь понимаешь, что исключение вызвано не вызовомGetVersionEx
, до вызова этой функции даже дело не доходит.
Поэтому и непонятно к чему ты привел этот пример, коли мы говорим про WinApi?
GuAV © (22.01.05 23:22) [54]
Нет, дорогой, это зависит от реализации конкретной функции, которую я вызываю. параметр-то тот же
Эх, во-первых, я тебе вовсе не дорогой. А во-вторых, даже не милый.
Ты говоришь, что это завист от реализации конкретной функции? Ты имеешь в виду от реализации конкретной WinApi функции, да?
А ты вообще в курсе, что в твоих примерах никакая WinApi функция ВООБЩЕ НЕ ВЫЗЫВАЕТСЯ?
GuAV © (22.01.05 23:22) [54]
А самому слабо ?
не слабо. Только ты скажи - над чем мне надо подумать?
P.S. Как же удивляет поведение людей. Вроде нормальные люди, а мигом переходят на "Вы", "Молодой человек", "Дорогой" и т.д.
Какая фамильярность... ужас
← →
GuAV © (2005-01-23 00:37) [56]Piter © (23.01.05 0:16) [55]
На фамилиярность, ты уж извини сам провоцируешь. Как и на LMD нарываешся.
Вызов функции есть. Может тебе сейчас неочевидно, попробуй примеры в [20] - некоторые, те что не генерят AV таки даже результат возвращают.
Причины для AV в коде в [20] уже тем более нет, указатель корректный.
Ты можешь написать свою функцию с var параметром и вызвать её как я вызываю - и увидишь, что пока нет обращения к var параметру, AV нет. (Для чистоты эксперимента сделай его с упорядоченными типами).
Ещё можешь заменить PAGE_READONLY и FILE_MAP_READ на значения разрешающие запись и увидеть что всё работает, т.е. с указателями было всё корректно, только они указывали на защищенную от записи область.
Над чем думать - когда и как вообще поднимается исключение EAccessViolation. и какая разница между ехе, dll на дельфи и системной dll в даном случае.
← →
GuAV © (2005-01-23 00:38) [57]Пардон, не [20], а [17]
← →
GuAV © (2005-01-23 00:42) [58]Да, вот что, посмотри в окно CPU. Дави F7 до CALL <Имя_Функции>. К AV приводит именно этот CALL я, т.е. параметры уже успешо помещены в стек. Теперь веришь, что они ВЫЗЫВАЮТСЯ ?
← →
Piter © (2005-01-23 00:57) [59]GuAV © (23.01.05 0:37) [56]
Вызов функции есть
ладно, здесь я соглашусь. У меня на W2k нет никаких вызовов, все разыменовывания твоих указателей приводят к AV. Видимо, на 9x память не так защищена или что-то там еще...
GuAV © (23.01.05 0:37) [56]
Ты можешь написать свою функцию с var параметром и вызвать её как я вызываю - и увидишь, что пока нет обращения к var параметру, AV нет
Я писал:
Piter © (23.01.05 0:16) [55]procedure TForm1.Button1Click(Sender: TObject);
var
VI: TOSVersionInfo;
begin
VI := TOSVersionInfo(Pointer($88888888)^); // ЗДЕСЬ БЛИН БУДЕТ AV!
//Хотя здесь нет никакого вызова функции
end;
как ты объяснишь возникновение AV в данном куске кода?
Ведь по твоему выходит, что когда передаетсяTOSVersionInfo(Pointer($88888888)^)
никакого AV не происходит, а только где-то там внутри WinApi функци. Но вот пример, в нем возникает AV. И во всех твоих примерах в [11] тоже самое (в W2k)
GuAV © (23.01.05 0:37) [56]
Как и на LMD нарываешся.
ну коли Kerk проигнорировал - обращусь к тебе. Процитируй плиз предложения, где я сказал что-то неверное. Если таких предложений нету - то в чем мой нарыв?
← →
Piter © (2005-01-23 00:59) [60]GuAV © (23.01.05 0:42) [58]
Да, вот что, посмотри в окно CPU. Дави F7 до CALL <Имя_Функции>.
ты про какой свой пример?
GuAV © (23.01.05 0:38) [57]
.е. параметры уже успешо помещены в стек. Теперь веришь, что они ВЫЗЫВАЮТСЯ ?
причем здесь вера/не вера? Не считай, что я буду что-то говорить без веских на то причин.
← →
GuAV © (2005-01-23 01:13) [61]Piter © (23.01.05 0:57) [59]
как ты объяснишь возникновение AV в данном куске кода?
В отличии от куска где вызов функции тут есть чтение из памяти по этому адресу. в случае вызова функций чтения нет.
> У меня на W2k нет никаких вызовов, все
> разыменовывания твоих указателей приводят к AV.
> Видимо, на 9x память не так защищена или что-то там
> еще...
Никакой разницы. твой код и у меня даст AV , а функции и у тебя вызываются.
> Ведь по твоему выходит, что когда передается
> TOSVersionInfo(Pointer($88888888)^) никакого AV не
> происходит, а только где-то там внутри WinApi функци
Именно так. Более того, именно эта ф-ция GetVersionInfo не приводит к AV вообще к AV смотри ещё раз мои посты.
> Но вот пример, в нем возникает AV. И во всех твоих
> примерах в [11] тоже самое (в W2k)
Не во всех же.
> ну коли Kerk проигнорировал - обращусь к тебе.
> Процитируй плиз предложения, где я сказал что-то
> неверное.
Уже сказал
Piter © (22.01.05 18:08) [23]
> дело даже до вызова WinApi функций не доходит.
Доходит.
> и произойти оно может только с откомпилированным
> Дельфовым кодом
С любым кодом, делающем недопустимое обращение к памяти.
> в чем мой нарыв?
В следующем:
> если ты вообще понимаешь что такое AV.
> ну от тебя не ожидал. Как может произойти AV при
> работе WinApi функций?!
> и ты туда же! Ну ПОДУМАЙ, как может произойти AV,
← →
GuAV © (2005-01-23 01:14) [62]Piter © (23.01.05 0:59) [60]
ты про какой свой пример?
Про любой пример вызова ф-ции, хоть [11], хоть [17].
← →
Piter © (2005-01-23 01:37) [63]GuAV © (23.01.05 1:13) [61]
В отличии от куска где вызов функции тут есть чтение из памяти по этому адресу. в случае вызова функций чтения нет
Нда... Я видел как люди тупят, но чтобы так ступить...
Блин, ведь происходит копирование структуры в моем примере. Эх, посыпаю голову пеплом...
GuAV, извини, я осознал всю глубину своей неправоты :(...
← →
Piter © (2005-01-23 01:38) [64]Остается в общем два вопроса:
1) основной - есть ли функции, которые будут работать в таком режиме, что могут перезаписать недоступные области?
2) почему WinApi функции ведут себя по разному? Кто-то из них проверяет возможность записи, а кто-то просто пытается тупо писать?
← →
GuAV © (2005-01-23 02:01) [65]Почему GetVersionEx не приводит к AV понятно - не заполнен size поэтому ничего писать туда не будет.
Почему GetSystemTime не приводит к AV ?
Не уверен, но моя догадка (псевдокод):function GetSystemTime(var SystemTime);
begin
try
SystemTime := ST;
Result := OK;
except
Result := INVALID_PARAMETER;
end;
end;
По основному вопросу - не знаю.
← →
jack128 © (2005-01-23 02:13) [66]Э-э-э может опаздал к обсуждению, но все таки
EAccessViolation = class(EExternal);
EExternal is the ancestor of all exception classes that can represent Win32 exception codes. EExternal has a public data structure, ExceptionRecord
← →
Piter © (2005-01-23 02:18) [67]GuAV © (23.01.05 2:01) [65]
Почему GetVersionEx не приводит к AV понятно
у меня приводит
GuAV © (23.01.05 2:01) [65]
Почему GetSystemTime не приводит к AV ?
у меня приводит
← →
Cobalt © (2005-01-23 02:20) [68]2 Piter © (23.01.05 01:38) [64]
по 1)
Очень сомневаюсь. Цитата:
Систему по С2 лохи сертифицировали, да?
Понимаешь ли, структура ОС Виндовс - многоуровневая.
"У неё есть слои" © Шрек :)
Программист обычного приложения работает с первым слоем - внешним. Этот слой уже (в случае необходимости) обращается к внутреннему слою - применить права доступа, провести имперсонацию, загрузить библиотеку, файл открыть и т.п.
И этому первому слою нет нужды (и прав соответственно) менять права. Это не его компетенция.
Краткое резюме всего написанного - вряд ли такие функции есть. Ибо они - суть недосмотр, ошибка.
← →
Piter © (2005-01-23 02:23) [69]Cobalt © (23.01.05 2:20) [68]
Понимаешь ли, структура ОС Виндовс - многоуровневая
ну ладно, ладно. Я лоханулся, но не совсем же дебил я
вряд ли такие функции есть
я тоже так думаю... но все же...
← →
GuAV © (2005-01-23 02:33) [70]Piter © (23.01.05 2:18) [67]
Проверил под ХР.
Да, там AV, которое я хотел.
Теперь для ответа на 2) ищи другие неправильные функции.
Кстати, интересно, а касается ли [68] 9х ?
← →
Piter © (2005-01-23 02:40) [71]GuAV © (23.01.05 2:33) [70]
Кстати, интересно, а касается ли [68] 9х ?
что именно?
← →
GuAV © (2005-01-23 02:43) [72]То, что никакая функция доступная разработчику приложения не в состоянии перезаписать эти самые "некоторые области", а если такая функция есть, то это баг.
← →
Piter © (2005-01-23 02:56) [73]ну думаю так оно и должно быть, в идеале
← →
Piter © (2005-01-23 02:56) [74]я думаю
← →
default © (2005-01-23 04:14) [75]в посте [14] же написано что защита АППАРАТНАЯ
поэтому даже если что-то и напишется в коде системной функции не туда куда надо это будет ошибка того кто писал этот код, НО опять же написать можно при соответствующих условиях, то есть когда страница памяти не будет защищена
защищённая страница по определению не доступна для того отчего она защищена
← →
AlterEgo of WondeRu © (2005-01-23 10:02) [76]Piter признает свои ошибки - прогресс!!! Можно сказать: "Растем" :)
← →
Kerk © (2005-01-23 12:14) [77]Piter © (23.01.05 0:16) [55]
Kerk © (22.01.05 22:49) [51]
он этого не говорил
как это не говорил? Он сказал, что AV будет по любому, а потом дал понять, что он понимает под AV в посте [15]
Он все правильно сказал. Или в твоем клиенте не бывает EXCEPTION_ACCESS_VIOLATION ?
AlterEgo of WondeRu © (23.01.05 10:02) [76]
Перестанет быть таким упертым, может и LMD ему перестанут писать.. :)
← →
AlterEgo of WondeRu © (2005-01-23 15:26) [78]Kerk © (23.01.05 12:14) [77]
Перестанет быть таким упертым, может и LMD ему перестанут писать.. :)
отстань от мальчика, мне уже жалко его стало)
← →
Piter © (2005-01-23 15:27) [79]default © (23.01.05 4:14) [75]
в посте [14] же написано что защита АППАРАТНАЯ
да причем здесь это? Ведь есть уровень Windows, который МОЖЕТ писать в эти области, 100% есть. Иначе зачем эта память вообще нужна, если туда вообще писать/читать нельзя?
AlterEgo of WondeRu © (23.01.05 10:02) [76]
Piter признает свои ошибки - прогресс!!!
если мне нормально доказывали, что я не прав - я всегда признавал свои ошибки.
Можно сказать: "Растем"
да, можно сказать. Но не тебе.
Kerk © (23.01.05 12:14) [77]
Перестанет быть таким упертым, может и LMD ему перестанут писать
LMD мне писал только ты. И с таким же успехом могу я тебе написать. И это между прочим ничего не изменит.
Соответственно, на твое LMD мне абсолютно насрать.
Я и еще могу кое-что написать про технику употребления этих аббревиатур, но не буду.
← →
default © (2005-01-23 15:40) [80]Piter © (23.01.05 15:27) [79]
это ответ на первый вопрос из поста [64]
могут если ошибка кодировщика системной функции, что не понятно?
← →
Kerk © (2005-01-23 15:55) [81]Piter © (23.01.05 15:27) [79]
LMD мне писал только ты.
см.
GuAV © (23.01.05 0:37) [56]
На фамилиярность, ты уж извини сам провоцируешь. Как и на LMD нарываешся.
Piter © (23.01.05 15:27) [79]
Ведь есть уровень Windows, который МОЖЕТ писать в эти области, 100% есть.
Про кольца почитай. А потом см. [7]
← →
GuAV © (2005-01-23 15:57) [82]Piter © (23.01.05 15:27) [79]
Перестанет быть таким упертым, может и LMD ему перестанут писать
IMHO, Kerk прав. Написал бы Piter заместо процитированного в конце [61] "Я не понимаю, как может произойти AV при работе WinApi функций", дальнейшее обсуждение имело бы другую форму.
← →
Piter © (2005-01-23 16:05) [83]default © (23.01.05 15:40) [80]
могут если ошибка кодировщика системной функции, что не понятно?
да это и так понятно.
Я вот и спрашиваю - есть ли такие функции?
← →
Kerk © (2005-01-23 16:25) [84]Piter © (23.01.05 16:05) [83]
Я вот и спрашиваю - есть ли такие функции?
запись в запрешенные места продемонстрирована в моей демке про переход в ring0 в 2000. там идет прямая работа с физической памятью, работает только под админом.
но это нельзя считать честным способом. :)
Страницы: 1 2 3 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
Память: 0.74 MB
Время: 0.041 c