|
Оффсет для SkillCall в переменной - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
28.09.2012, 12:13
|
#1
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
Оффсет для 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
|
|
|
|
Рыцарь-капитан
|
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 324 раз(а) в 104 сообщениях
|
Re: Оффсет для SkillCall в переменной
|
Цитата: |
|
|
|
|
|
|
|
|
|
Без переменных, без краша:
|
|
|
|
|
|
Это стандартная проблема. Значения сначала нужно помещать в регистр, а потом их использовать.
Например:
сначала помещаем в регистр:
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пасибо:
|
|
28.09.2012, 16:24
|
#3
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
Re: Оффсет для SkillCall в переменной
krukovis, Честно говоря, не очень понятно, можно ли более подробно разжевать? И что где заменить?
|
|
|
28.09.2012, 16:53
|
#4
|
|
|
|
Пехотинец
|
Регистрация: 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пасибо:
|
|
28.09.2012, 17:01
|
#5
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
Re: Оффсет для SkillCall в переменной
Goooooogle, Краш клиента.
|
|
|
28.09.2012, 18:39
|
#6
|
|
|
|
Разведчик
|
Регистрация: 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
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
Re: Оффсет для SkillCall в переменной
vladoscom93, Ну, вообщем-то я так и записывал, вызывает краш клиента.
|
|
|
28.09.2012, 18:42
|
#8
|
|
|
|
Разведчик
|
Регистрация: 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пасибо:
|
|
28.09.2012, 19:46
|
#9
|
|
|
|
Пехотинец
|
Регистрация: 12.06.2012
Сообщений: 73
Популярность: 529
Сказал(а) спасибо: 16
Поблагодарили 49 раз(а) в 33 сообщениях
|
Re: Оффсет для SkillCall в переменной
|
|
|
28.09.2012, 19:51
|
#10
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
Re: Оффсет для SkillCall в переменной
vladoscom93, Проверил каждый из способов, результат один - краш.
|
|
|
28.09.2012, 20:32
|
#11
|
|
|
|
Разведчик
|
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
|
Re: Оффсет для SkillCall в переменной
попробуй все переменные писать так dword(PWBA), которые внутри asm'a
|
|
|
28.09.2012, 21:06
|
#12
|
|
|
|
Рыцарь-капитан
|
Регистрация: 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пасибо:
|
|
29.09.2012, 04:16
|
#13
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
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
|
|
|
|
Разведчик
|
Регистрация: 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
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
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, они верны.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 14:32.
|
|