HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Работа функции
или как я компили дллку
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
ToMMuK
SmallHabit'at

Дата регистрации: Jun 2006
Проживает: Рига
Сообщений: 634
Возраст: 32

Рейтинг



Talking Работа функции

В общем у меня тут такая проблемка, есть функция

C++ Source Code:
1
//Event Delete Monster
2
void EventClearMonsters(int Event,int Count)
3
{
4
  gObjDelMob = (void (__cdecl *)(int))0x004D9A10;
5
  int n=0;
6
  int Map=0;
7
  for(int i=0;i<Count;i++)
8
  {
9
    switch(Event)
10
    {
11
    case 1:
12
      {
13
        n = RabbitEvent.MobsID[i];
14
        //				Map = RabbitEvent.MobsMap[i];
15
      }break;
16
    }
17
    if(n!=0)
18
    {
19
      _asm
20
      {
21
        MOV ECX, n;
22
        IMUL ECX, ECX, 0x1968;
23
        XOR EDX,EDX;
24
        MOV DL, BYTE PTR DS:[ECX + 0x00660F185];
25
        CMP EDX, Map;
26
        JNZ end;
27
        MOV EAX, n;
28
        PUSH EAX;
29
        call gObjDelMob;
30
      end:
31
      }
32
      switch(Event)
33
      {
34
      case 1:
35
        {
36
          //					RabbitEvent.MobsID[i] = 0;
37
          //					RabbitEvent.MobsMap[i] = 0;
38
        }break;
39
      }
40
    }
41
  }
42
}


Так вот, эта функция очень загадочная О_о
Всё дело в том, что ещё вчера она работала - О.К.
Сегодня скомпилил заново дллку, и он мне выдаёт - "Run-Time Check Failure #0 - The value of ESP was not properly
saved across a function call... ну и дальше по тексту", но функция в принципе выполняеться, только если кнопачку на сообщении нажать приложение виснет, вобщем, что в функции такого изменилось за НОЧЬ? =)))

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.

Сообщить модератору | | IP: Записан
Сообщение: 44456

Старое сообщение 08-05-2009 21:37
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34568
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
ToMMuK писал:
Так вот, эта функция очень загадочная

Подтверждаю. Функция очень загадочная.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 44463

Старое сообщение 09-05-2009 05:36
-
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


Цитата:
ToMMuK писал:
gObjDelMob = (void (__cdecl *)(int))0x004D9A10;


Что-то мне подсказывает, что это - корень всех зол...

Сообщить модератору | | IP: Записан
Сообщение: 44464

Старое сообщение 09-05-2009 06:10
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34568
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
ToMMuK писал:
call gObjDelMob;

Кстати да.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 44465

Старое сообщение 09-05-2009 06:11
-
ToMMuK
SmallHabit'at

Дата регистрации: Jun 2006
Проживает: Рига
Сообщений: 634
Возраст: 32

Рейтинг



Да я знаю что если убрать этот Call то всё окей, только без него вся функция неимеет смысла... =)

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.

Сообщить модератору | | IP: Записан
Сообщение: 44473

Старое сообщение 09-05-2009 09:03
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34568
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


А в чем смысл этого 0x004D9A10?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 44474

Старое сообщение 09-05-2009 09:23
-
ToMMuK
SmallHabit'at

Дата регистрации: Jun 2006
Проживает: Рига
Сообщений: 634
Возраст: 32

Рейтинг



Ну это оффсет который вызывает функцию( void gObjDel(int aIndex) ) из Гэймсервера куда эта дллка прикреплена))

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.

Сообщить модератору | | IP: Записан
Сообщение: 44475

Старое сообщение 09-05-2009 09:29
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34568
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Оффсет каждый раз разный. Его надо не в коде прописывать, а каждый раз заново узнавать.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 44476

Старое сообщение 09-05-2009 09:38
-
ToMMuK
SmallHabit'at

Дата регистрации: Jun 2006
Проживает: Рига
Сообщений: 634
Возраст: 32

Рейтинг



C++ Source Code:
1
//Other defines
2
#define gObjTeleport ((void(*)(int, int, int, int))0x00402CA7)
3
#define gObjSetMonster ((void(*)(int,int)) 0x00405CA9)
4
#define gObjAddMonster ((int(*)(int)) 0x00404589)
5
#define GetTopHitUser ((DWORD(*)(DWORD)) 0x00403BA7)
6
#define LogAddFunc ((void(*)(char* Text,int Type)) 0x004A3D70)
7
#define LogAddFuncColor ((void(*) (int, char*)) 0x004A3E60)
8
#define GCServerMsgStringSend ((void(*)(char* Text,DWORD PlayerID,int Type)) 0x00432db0)
9
#define NPCTalk ((void(*)(DWORD dwNpcID,char* Text,DWORD PlayerID)) 0x00402FB3)
10
#define GCMoneySend ((void(*)(DWORD,int)) 0x004040DE)
11
#define CGLevelUpPointAdd ((int(*)(BYTE *Arg1,DWORD PlayerID)) 0x00403D32)
12
#define ItemSerialCreateSend ((int(*)(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD)) 0x004036F7)
13
#define GameMonsterAllCloseAndReload ((void(*)()) 0x00522690)
14
#define gObjViewportListProtocolCreate ((void(*)(OBJECTSTRUCT*)) 0x004F7020)
15
#define pReadCommonServerInfo ((void(*)()) 0x004058CB)
16
#define pShopDataLoad ((void(*)()) 0x00402FEA)
17
#define ChaosBoxInit ((void(*) (int)) 0x004044E4)
18
#define GCUserChaosBoxSend ((void(*) (int, int)) 0x004050AB)
19
#define gObjInventoryDeleteItem ((void(*)(int,int)) 0x40209F)
20
#define GCInventoryItemDeleteSend ((void(*)(int,int,unsigned char)) 0x4036F2)
21
#define GCLevelUpMsgSend ((void(*)(int, unsigned char)) 0x004060C3)
22
#define GCSendQuestPrize ((int(*)(int, int, int)) 0x00402D7E) // F1X:
23
#define gObjGetItemCountInIventory ((int(*)(int,WORD))0x4024fa)
24
#define gObjDel ((void (*)(int)) 0x004D9A10)
25
#define gObjCalCharacter ((void(*)(int)) 0x00402B08)
26
#define ObjGameClose ((int(*)(int)) 0x004D93F0)
27
#define GCPkLevelSend ((void(*)(int,unsigned char)) 0x00434d70)

Но эти то работают окей, я про оффсеты которые в ГеймСервере(у меня нету его исходников, и оффсеты там всегда одни и теже)

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.

Сообщить модератору | | IP: Записан
Сообщение: 44478

Старое сообщение 09-05-2009 09:41
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34568
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Ты трейнер пишешь, что ли?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 44479

Старое сообщение 09-05-2009 09:45
-
ToMMuK
SmallHabit'at

Дата регистрации: Jun 2006
Проживает: Рига
Сообщений: 634
Возраст: 32

Рейтинг



Нееет) добавляю новые функции в ГС, комманды и т.д. и т.п.)

Добавлено 09-05-2009 в 13:53:

Вот только если задефайнить её вот так -

C++ Source Code:
#define gObjDelM (void(*)(int))0x4D9A10;


То компилятор жалуеться на -
Цитата:
error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в 'первый операнд'; обнаружено '('


Добавлено 09-05-2009 в 15:21:

Самое странной что если закоментить пару строчек) то всё вроде как работает

C++ Source Code:
1
_asm
2
{
3
  MOV ECX, n;
4
  IMUL ECX, ECX, 0x1968;
5
  XOR EDX,EDX;
6
  MOV DL, BYTE PTR DS:[ECX+0x0660F185];
7
  CMP EDX, Map;
8
  JNZ 0x4D9A10;
9
  //				MOV EAX, n;
10
  //				PUSH EAX;
11
  call gObjDelM;
12
end:
13
}

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.

Сообщить модератору | | IP: Записан
Сообщение: 44481

Старое сообщение 09-05-2009 12:21
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32285
Нанёс повреждений: 392 ед.

Рейтинг



ToMMuK поделись откуда ты этот оффсет взял вообще?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 44614

Старое сообщение 14-05-2009 14:30
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34568
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Кстати. "The value of ESP was not properly saved across a function call" - это типичная ошибка вызова функции с неправильной конвенцией. Т.е. неправильный код пролога/эпилога. В частности, наверняка функция gObjDelM делает в конце ret, и это-то и портит ESP.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 44630

Старое сообщение 14-05-2009 16:11
-
ToMMuK
SmallHabit'at

Дата регистрации: Jun 2006
Проживает: Рига
Сообщений: 634
Возраст: 32

Рейтинг



Ну так самое странное что если убрать вызов gObjDelM то ошибка всё равно вылазит)

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.

Сообщить модератору | | IP: Записан
Сообщение: 44637

Старое сообщение 14-05-2009 18:28
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34568
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


а если PUSH EAX; убрать?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 44648

Старое сообщение 14-05-2009 19:27
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 01:14. Новая тема    Ответить
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Работа функции
или как я компили дллку
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024