powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / как обработать исключение?
11 сообщений из 36, страница 2 из 2
как обработать исключение?
    #39094019
Dima TЭто ошибка доступа к несуществующей памяти. try...catch ее не ловит. Используй для проверки IsBadReadPtr() или SEH
спасибо,
IsBadReadPtr оказалась бесполезной,
а вот соответствующая опция компилятора - то, что нужно
и работает как на тестовом примере:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
int main(int argc, char* argv[])
{
	string* buf=(string*)0x00F0000;
	try
	{
		string tmp=*buf;
	}
	catch(...)
	{
		cout<<"opa"<<endl;
	}
	cout<<"ok"<<endl;
	getchar();
	return 0;
}


так и на самом проекте
...
Рейтинг: 0 / 0
как обработать исключение?
    #39094020
MasterZivrandom_account_11367934659,

А что это за хрень ?

Код: plaintext
1.
string* buf=(string*)0x00F0000;


моделирование access violation
...
Рейтинг: 0 / 0
как обработать исключение?
    #39094023
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
random_account_11367934659IsBadReadPtr оказалась бесполезной,

У меня работает
Код: plaintext
1.
2.
3.
4.
5.
	string* buf=(string*)0x00F0000;
	if(IsBadReadPtr(buf, sizeof(string))) {
		cout<<"bad ptr"<<endl;
	} else {
...


или
Код: plaintext
1.
2.
3.
4.
5.
6.
	StrStream &operator<<(const T &v)
	{
		if(IsBadReadPtr(&v, sizeof(T))) {
			cout<<"bad ptr 2"<<endl;
		} else {
...
...
Рейтинг: 0 / 0
как обработать исключение?
    #39094025
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не телепат, но что-то подсказывает что у тебя накосячено в приведении типов. Смотри там откуда << вызывается.
...
Рейтинг: 0 / 0
как обработать исключение?
    #39094026
ЗимарглНеплохая подборка анализа граблей для данного случая

http://stackoverflow.com/questions/22797418/how-do-i-safely-pass-objects-especially-stl-objects-to-and-from-a-dll
к данному случаю это не имеет отношения, у меня объекты передаются по ссылке в натуральном виде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
//---------------------------------------------
Exe
func(HANDLE h)//original
{

}

//---------------------------------------------
Dll

template<typename T>
void handle_1(const T &v)
{
...
   list<string> params;
   params.push_back(variableToStr(v));
...
}

func(HANDLE h)//hook
{
   handle_1(h);
}


так, что насчёт граблей и прочего - это ваши домыслы
...
Рейтинг: 0 / 0
как обработать исключение?
    #39094028
Dima Trandom_account_11367934659IsBadReadPtr оказалась бесполезной,

У меня работает
Код: plaintext
1.
2.
3.
4.
5.
	string* buf=(string*)0x00F0000;
	if(IsBadReadPtr(buf, sizeof(string))) {
		cout<<"bad ptr"<<endl;
	} else {
...


или
Код: plaintext
1.
2.
3.
4.
5.
6.
	StrStream &operator<<(const T &v)
	{
		if(IsBadReadPtr(&v, sizeof(T))) {
			cout<<"bad ptr 2"<<endl;
		} else {
...


на тестовом примере не проверял, на реальном - не работает, это точно
...
Рейтинг: 0 / 0
как обработать исключение?
    #39094032
Dima TНе телепат, но что-то подсказывает что у тебя накосячено в приведении типов. Смотри там откуда << вызывается.
ошибка залогировалась:

[3/11/2015-19:13:43::640] CloseHandle(00000768)->1
[3/11/2015-19:13:43::640] CloseHandle(00000714)->1
[3/11/2015-19:13:43::687] DeleteFileW(*failed-to-write(PCWSTR)*)->0
[3/11/2015-19:13:43::703] CloseHandle(00000894)->1
[3/11/2015-19:13:43::703] CloseHandle(0000089C)->1

собственно, судя по тому, что функция возвратила 0 (FALSE) можно предполоожить, что параметр - косячный.
а может быть я накосячил с переводом PCWSTR в string:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
std::string WStrToStr(const std::wstring& s)  
{  
    std::string temp(s.length(), ' ');  
    std::copy(s.begin(), s.end(), temp.begin());  
    return temp;  
}  

template<>
StrStream &StrStream::operator<<(const PCWSTR &s)
{
	try
	{
		_os<<"L\""<<WStrToStr(s)<<"\"";
	}
	catch(...)
	{
		_os<<"*failed-to-write(PCWSTR)*";
	}
	return *this;
}
...
Рейтинг: 0 / 0
как обработать исключение?
    #39094046
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
random_account_11367934659сделал dll в которой переопределяются стандартные winapi - шные вызовы (CreateFileA и т.п.)
....
random_account_11367934659а может быть я накосячил с переводом PCWSTR в string:
Зачем тебе Wide char в коде DLL?
...
Рейтинг: 0 / 0
как обработать исключение?
    #39094054
Dima Trandom_account_11367934659сделал dll в которой переопределяются стандартные winapi - шные вызовы (CreateFileA и т.п.)
....
random_account_11367934659а может быть я накосячил с переводом PCWSTR в string:
Зачем тебе Wide char в коде DLL?
потому, что они есть в EXE. Причём, их там больше, чем аналогичных char-овских.
...
Рейтинг: 0 / 0
как обработать исключение?
    #39094058
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
random_account_11367934659,

Ты какого-то трояна пишешь, все это прекрасно поняли, подсказок больше не будет, дальше сам.
...
Рейтинг: 0 / 0
как обработать исключение?
    #39094113
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавил это в фок, надо бы перевести потом...
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / как обработать исключение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]