Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Оффсет для SkillCall в переменной

-

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

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

Ответ
 
Опции темы
Старый 28.09.2012, 12:13   #1
 Пехотинец
Аватар для Zo_Om4eG
 
Zo_Om4eG на правильном пути
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Отправить сообщение для Zo_Om4eG с помощью Skype™
 
По умолчанию Оффсет для SkillCall в переменной

Такая проблема: вынес оффсеты в ини файл, при чтении их из ини и использовании проблем не возникает, читает память с помощью них нормально, но вот использование функции SkillInject с переменной, где лежит оффсет SkillCall, приводит к крашу клиента, также как и PackCall. Никто не подскажет как исправить? Оффсеты правильные.

Без переменных, без краша:

Код:
procedure SkillCall(aPParams:PParams); stdcall;
var CallAddress:pointer;
    P1:DWord;
begin
CallAddress:=Pointer($00492A90);
P1:=aPParams^.Param1;
 asm
  pushad
  mov ecx, dword ptr [$00A571E0]
  mov ecx, dword ptr [ecx+$1C]
  mov ecx, dword ptr [ecx+$34]
  push $FFFFFFFF
  push $00
  push $00
  mov edx, P1
  push edx
  call CallAddress
  popad
 end;
end;
С переменными, с крашем:

Код:
procedure SkillCall(aPParams:PParams); stdcall;
var CallAddress:pointer;
    P1:DWord;
begin
CallAddress:=Pointer(PWSkillCall);
P1:=aPParams^.Param1;
 asm
  pushad
  mov ecx, dword ptr [PWBA]
  mov ecx, dword ptr [ecx+PWHPS1]
  mov ecx, dword ptr [ecx+PWHPS2]
  push $FFFFFFFF
  push $00
  push $00
  mov edx, P1
  push edx
  call CallAddress
  popad
 end;
end;
  Ответить с цитированием
Старый 28.09.2012, 15:11   #2
-= Мастер Света =-
 Рыцарь-капитан
Аватар для krukovis
 
krukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нации
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 324 раз(а) в 104 сообщениях
 
По умолчанию Re: Оффсет для SkillCall в переменной

Цитата:
Сообщение от Zo_Om4eGПосмотреть сообщение
Без переменных, без краша:

Это стандартная проблема. Значения сначала нужно помещать в регистр, а потом их использовать.
Например:
сначала помещаем в регистр:
mov ecx, PWBA
затем используем:
mov ecx, dword ptr [ecx]
________________
--------------------------------------------
PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
[for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
  Ответить с цитированием
Пользователь сказал cпасибо:
Zo_Om4eG (30.09.2012)
Старый 28.09.2012, 16:24   #3
 Пехотинец
Аватар для Zo_Om4eG
 
Zo_Om4eG на правильном пути
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Отправить сообщение для Zo_Om4eG с помощью Skype™
 
По умолчанию Re: Оффсет для SkillCall в переменной

krukovis, Честно говоря, не очень понятно, можно ли более подробно разжевать? И что где заменить?
  Ответить с цитированием
Старый 28.09.2012, 16:53   #4
Заблокирован
 Пехотинец
Аватар для Goooooogle
 
Goooooogle излучает ауруGoooooogle излучает ауруGoooooogle излучает ауруGoooooogle излучает ауруGoooooogle излучает ауруGoooooogle излучает ауру
Регистрация: 12.06.2012
Сообщений: 73
Популярность: 529
Сказал(а) спасибо: 16
Поблагодарили 49 раз(а) в 33 сообщениях
 
По умолчанию Re: Оффсет для SkillCall в переменной

Код:
procedure SkillCall(aPParams:PParams); stdcall;
var CallAddress:pointer;
    P1:DWord;
begin
CallAddress:=Pointer(PWSkillCall);
P1:=aPParams^.Param1;
mov ecx, PWBA
mov ecx, dword ptr [ecx]
 asm
  pushad
  mov ecx, dword ptr [PWBA]
  mov ecx, dword ptr [ecx+PWHPS1]
  mov ecx, dword ptr [ecx+PWHPS2]
  push $FFFFFFFF
  push $00
  push $00
  mov edx, P1
  push edx
  call CallAddress
  popad
 end;
end;

Последний раз редактировалось krukovis; 29.09.2012 в 10:54.
  Ответить с цитированием
Пользователь сказал cпасибо:
Zo_Om4eG (30.09.2012)
Старый 28.09.2012, 17:01   #5
 Пехотинец
Аватар для Zo_Om4eG
 
Zo_Om4eG на правильном пути
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Отправить сообщение для Zo_Om4eG с помощью Skype™
 
По умолчанию Re: Оффсет для SkillCall в переменной

Goooooogle, Краш клиента.
  Ответить с цитированием
Старый 28.09.2012, 18:39   #6
 Разведчик
Аватар для vladoscom93
 
vladoscom93 никому не известный тип
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Оффсет для SkillCall в переменной

Код:
procedure SkillCall(aPParams:PParams); stdcall;
var CallAddress:pointer;
    P1:DWord;
begin
CallAddress:=Pointer(PWSkillCall);
P1:=aPParams^.Param1;
 asm
  pushad
  mov ecx, PWBA
  mov ecx, dword ptr [ecx]
  mov ecx, dword ptr [ecx+PWHPS1]
  mov ecx, dword ptr [ecx+PWHPS2]
  push $FFFFFFFF
  push $00
  push $00
  mov edx, P1
  push edx
  call CallAddress
  popad
 end;
end;
  Ответить с цитированием
Старый 28.09.2012, 18:41   #7
 Пехотинец
Аватар для Zo_Om4eG
 
Zo_Om4eG на правильном пути
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Отправить сообщение для Zo_Om4eG с помощью Skype™
 
По умолчанию Re: Оффсет для SkillCall в переменной

vladoscom93, Ну, вообщем-то я так и записывал, вызывает краш клиента.
  Ответить с цитированием
Старый 28.09.2012, 18:42   #8
 Разведчик
Аватар для vladoscom93
 
vladoscom93 никому не известный тип
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Оффсет для SkillCall в переменной

если будет всеравно слетать попробуй повторить подобное, что я сделал с PWBA с этими строчками:
Код:
  mov ecx, dword ptr [ecx+PWHPS1]
  mov ecx, dword ptr [ecx+PWHPS2]
гугл ты меня просто убил) как можно помещать данные в регистр до команды asm

Добавлено через 5 минут
должно получится наверн так:
Код:
mov ecx, ecx+PWHPS1
mov ecx, dword ptr [ecx]
mov ecx, ecx+PWHPS2
mov ecx, dword ptr [ecx]
но в этом я не буду так уверен, т.к. плохо знаю асм... если логически предположить то можно так сделать

Последний раз редактировалось vladoscom93; 28.09.2012 в 18:47. Причина: Добавлено сообщение
  Ответить с цитированием
Пользователь сказал cпасибо:
Zo_Om4eG (30.09.2012)
Старый 28.09.2012, 19:46   #9
Заблокирован
 Пехотинец
Аватар для Goooooogle
 
Goooooogle излучает ауруGoooooogle излучает ауруGoooooogle излучает ауруGoooooogle излучает ауруGoooooogle излучает ауруGoooooogle излучает ауру
Регистрация: 12.06.2012
Сообщений: 73
Популярность: 529
Сказал(а) спасибо: 16
Поблагодарили 49 раз(а) в 33 сообщениях
 
По умолчанию Re: Оффсет для SkillCall в переменной

Цитата:
Сообщение от vladoscom93Посмотреть сообщение
гугл ты меня просто убил) как можно помещать данные в регистр до команды asm

Сам только потом заметил =)
  Ответить с цитированием
Старый 28.09.2012, 19:51   #10
 Пехотинец
Аватар для Zo_Om4eG
 
Zo_Om4eG на правильном пути
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Отправить сообщение для Zo_Om4eG с помощью Skype™
 
По умолчанию Re: Оффсет для SkillCall в переменной

vladoscom93, Проверил каждый из способов, результат один - краш.
  Ответить с цитированием
Старый 28.09.2012, 20:32   #11
 Разведчик
Аватар для vladoscom93
 
vladoscom93 никому не известный тип
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Оффсет для SkillCall в переменной

попробуй все переменные писать так dword(PWBA), которые внутри asm'a
  Ответить с цитированием
Старый 28.09.2012, 21:06   #12
-= Мастер Света =-
 Рыцарь-капитан
Аватар для krukovis
 
krukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нации
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 324 раз(а) в 104 сообщениях
 
По умолчанию Re: Оффсет для SkillCall в переменной

Робятки, вы хоть пытайтесь че нить сами то узнавать. Гугл он нафига ж создавался?? Это же Корпорация Добра - она всем помгает, если спрашивать. Да и на форуме выкладывал 100500 раз как подобные проблемы решать:
Код:
procedure SkillCall(aPParams:PParams); stdcall;
var CallAddress:pointer;
    P1:DWord;
begin
CallAddress:=Pointer(PWSkillCall);
P1:=aPParams^.Param1;
 asm
  pushad
  mov ecx, PWBA //помещаем в регистр ecx константу PWBA
  mov ecx, dword ptr [ecx] //прочитать значение указателя, на который указывает [ecx]
  mov eax, PWHPS1 //Помещаем в eax константу PWHPS1 
  mov ecx, dword ptr [ecx+eax] //прочитать значение указателя, на который указывает [ecx+eax]
  mov eax, PWHPS2 //Помещаем в eax константу PWHPS2
  mov ecx, dword ptr [ecx+eax]
  push $FFFFFFFF //asm на делфи не примиает параметр -1 ? Зачем писать push $ffffffff ?
  push $00
  push $00
  mov edx, P1
  push edx
  mov eax, CallAddress //помещаем в eax, константу CallAddress
  call eax
  popad
 end;
end;
Регистр eax в данном случае выступил просто временным хранилищем для всех констант.
Это нужно делать всегда, если вы константы подгружаете откуда то извне.
Запись mov ecx, dword ptr [CONSTANTA1] не сработает, т.к. ASM работает с адресами и указателями, а он не сможет получить ссылку на константу из какой либо другой процедуры.

Кстати, этих проблем лишен класс ASM - который я выложил совместно с PW FrameWork 2.0.
Там все просто и удобно переводится в байт код и этот байт-код инжектится. Что убирает проблему со считыванием данных из каких либо мест и т.д.
________________
--------------------------------------------
PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
[for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------

Последний раз редактировалось krukovis; 28.09.2012 в 21:08.
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
vladoscom93 (28.09.2012), Zo_Om4eG (30.09.2012)
Старый 29.09.2012, 04:16   #13
 Пехотинец
Аватар для Zo_Om4eG
 
Zo_Om4eG на правильном пути
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Отправить сообщение для Zo_Om4eG с помощью Skype™
 
По умолчанию Re: Оффсет для SkillCall в переменной

krukovis, Ну уже и не знаю что делать, проверил твою процедуру, все равно идет краш клиента.

Цитата:
procedure SkillCall(aPParams:PParams); stdcall;
var CallAddress: pointer;
P1: DWord;
begin
CallAddress:=Pointer(PWSkillCall);
P1:=aPParams^.Param1;
asm
pushad
mov ecx, PWBA
mov ecx, dword ptr [ecx]
mov eax, PWHPS1
mov ecx, dword ptr [ecx+eax]
mov eax, PWHPS2
mov ecx, dword ptr [ecx+eax]
push $FFFFFFFF
push $00
push $00
mov edx, P1
push edx
mov eax, CallAddress
call eax
popad
end;
end;

Цитата:
procedure Skill(SkillID: DWord);
var aParams:TParams;
begin
aParams.Param1:=SkillID;
InjectFunc(hProcessGlob,@SkillCall,@aParams,SizeOf (aParams));
end;

Skill(1097);
  Ответить с цитированием
Старый 29.09.2012, 05:26   #14
 Разведчик
Аватар для [phallic]
 
[phallic] никому не известный тип
Регистрация: 27.05.2012
Сообщений: 7
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Оффсет для SkillCall в переменной

А ты поставь бряк, посмотри чему равны PWBA, PWHPS1, PWHPS2, PWSkillCall
У меня:

Код:
  const  BA = $00A571E0;
...
  mov ecx, dword ptr [BA]
Все нормально работает
  Ответить с цитированием
Старый 29.09.2012, 07:00   #15
 Пехотинец
Аватар для Zo_Om4eG
 
Zo_Om4eG на правильном пути
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Отправить сообщение для Zo_Om4eG с помощью Skype™
 
По умолчанию Re: Оффсет для SkillCall в переменной

[phallic],
Код:
var PWBA, PWHPS1, PWHPS2:dword;
begin
PWSkillCall:=StrToInt('$'+Ini.ReadString('Offsets', 'SkillCall', '492A90'));
PWHPS1:=StrToInt('$'+Ini.ReadString('Offsets', 'HostPlayerStructure1', '1C'));
PWHPS2:=StrToInt('$'+Ini.ReadString('Offsets', 'HostPlayerStructure2', '34'));
end;
Таким образом задаются оффсеты, перепроверил несколько раз, выводил в ShowMessage, они верны.
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] SkillCall accordb4 Общение и обсуждение Perfect World 0 16.09.2012 06:35
[Помогите!] оффсет инвентаря altiger Общение разработчиков 6 21.01.2012 09:10
Путь к файлу в виду переменной Некто_Я C# 2 20.07.2011 00:02
Переход по переменной ссылке reraider С/С++ 1 04.04.2011 11:50
[Помогите!] Потоки с переменной zaparca Общение разработчиков 3 28.01.2011 14:17

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

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

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