Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Как настроить компиллятор Visual Studio 2008

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 18.10.2011, 00:46   #1
 Разведчик
Аватар для Мегазадрот
 
Мегазадрот никому не известный тип
Регистрация: 17.10.2011
Сообщений: 5
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Как настроить компиллятор Visual Studio 2008

Здравствуйте!

Пишу приложения на С++ (на основе MFC).

В моем боте большинство инжектируемых функций имеют очень простой вид: заталкивают параметры в стек и вызывают функцию. Вот пример:

Код:
//Инжект прыжка

typedef int (__thiscall * fnJump)(LPVOID PlayerBase, DWORD Reserved);

VOID JumpInject(DWORD * ParamPointer)
{
	((fnJump)0x00457540)(*(LPVOID *)(*(LPBYTE *)GAME_ADDRESS + 0x20), *ParamPointer);
}

BOOL CPlayerBot::Jump(DWORD Reserved)
{
	return Inject(JumpInject, 2048, NULL, &Reserved, sizeof(Reserved));
}
С такими функциями не возникает никаких проблем.

Но когда пытаюсь сделать что-то посложнее, бот либо работает не правильно, либо вообще вылетает. По генерируемому коду я нашел несколько причин. Например, константы с плавающей точкой не используются как непосредственные операнды а хранятся отдельно в памяти. Обращение к ним происходит так:

00408086 DC 0D 98 EC 41 00 fmul qword ptr [__real@4040000000000000 (41EC98h)]

Естественно в памяти другого процесса по этому адресу прочитается мусор.

А вот пример причины вылета:


3258: int StartPointX = (ParamPointer->StartPoint.x - ParamPointer->GridOrigin.x) / ParamPointer->GridStep;
mov edx,dword ptr [ParamPointer]
fld dword ptr [edx]
mov eax,dword ptr [ParamPointer]
fsub dword ptr [eax+0Ch]
mov ecx,dword ptr [ParamPointer]
fdiv dword ptr [ecx+18h]
call _ftol2_sse (416A60h) <---------- ВЫЗОВ ПО АДРЕСУ, ГДЕ НАХОДИТСЯ МУСОР!!! ГАРАНТИРОВАННЫЙ ВЫЛЕТ!!!
mov dword ptr [StartPointX],eax

Запрет оптимизации и инкрементал линкинга не помогает. В принципе можно на ассемблере обойти проблемные области, но охота что бы все красиво было.

Как мне еще настроить параметры проекта в Visual Studio 2008 что бы избежать вышеперечисленных проблем с чтением и вызовом мусора?
  Ответить с цитированием
Старый 27.10.2011, 03:01   #2
 Разведчик
Аватар для SilentJetty
 
SilentJetty на правильном путиSilentJetty на правильном пути
Регистрация: 17.09.2011
Сообщений: 4
Популярность: 164
Сказал(а) спасибо: 0
Поблагодарили 5 раз(а) в 2 сообщениях
 
По умолчанию Re: Как настроить компиллятор Visual Studio 2008

Для начала рекомендую отключить оптимизации, как минимум SSE(на время дебага).
Во вторых, на сколько я вижу ты и используешь указатели, в не значения. Попробуй для начала, перед вызовом, скопировать значение в локальную переменную.
Ну и, если честно, я не сильно понимаю как тут еще можно настроить компилятор... У компилятора дело за малы, превратить в бинарь все то что ты накодил
  Ответить с цитированием
Старый 27.10.2011, 07:33   #3
 Разведчик
Аватар для Мегазадрот
 
Мегазадрот никому не известный тип
Регистрация: 17.10.2011
Сообщений: 5
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: Как настроить компиллятор Visual Studio 2008

Похоже как не настраивай все равно компиллятор будет вставлять левые функции и по своему хранить floatы.

Я вот так вышел из положения:

Код:
	const DWORD dwFloatConst_0_5 = 0x3f000000;
	const DWORD dwFloatConst_32 = 0x41000000;
	const DWORD dwFloatConst_1000 = 0x447a0000;
	FLOAT fFloat;
	
	fFloat = (ParamPointer->StartPoint.x - ParamPointer->GridOrigin.x) / ParamPointer->GridStep - (*(FLOAT *)&dwFloatConst_0_5);
	
	__asm
	{
		fld         dword ptr [fFloat];
		fistp       [xp];
	}
Короче, в памяти другого процесса надо быть вдвойне начеку. Мало того, что сам делаешь ошибки, так еще и компиллятор добавляет.
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Помогите скачать Visual Studio 2010 (или 2008) †KiLL'er!!!† Школа Читера 6 15.06.2011 19:41
у кого microsoft visual studio 2008 сюда Хам!!! Школа Читера 3 20.04.2011 21:27
Microsoft Visual Studio 2008 6apoMETP Общение и обсуждение (Тюряга ВК) 0 15.03.2011 03:09

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 22:22.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net