Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.128.78.41] |
|
Сообщ.
#1
,
|
|
|
Добрый день.
Пишу хук, в функции перехвата вставляю свою функцию обработчик(она не на Си и у нее соглашение __stdcall), и после ее работы у стека другой указатель, а в регистрах другие значения. Если ее убрать то все ок работает. Но она мне нужна. Без нее могу только prinf пакета сделать... Вроде же функции после своей работы должны сами за собой прибирать и возвращать все как было? Или с __stdcall не так? Помогите исправить, очень нужно... void bb_ClientPacket(void *Src, int Size); void __fastcall SendXClient_Hook(unsigned int *This, void *_EDX, void *Src, int Size){ bb_ClientPacket(Src, Size); // Этот обработчик все козявит, если его убрать то все ок, у него соглашение __stdcall SendXClient(This, _EDX, Src, Size); // Здесь вызываю оригинальную функцию соглашение __fastcall } |
Сообщ.
#2
,
|
|
|
Цитата Rzonex @ Если ее убрать то все ок работает. Но она мне нужна. void bb_ClientPacket(void *Src, int Size); void __fastcall SendXClient_Hook(unsigned int *This, void *_EDX, void *Src, int Size){ bb_ClientPacket(Src, Size); // Этот обработчик все козявит, если его убрать то все ок, у него соглашение __stdcall SendXClient(This, _EDX, Src, Size); // Здесь вызываю оригинальную функцию соглашение __fastcall } 1. А так ?: void __stdcall bb_ClientPacket(void *Src, int Size); void __fastcall SendXClient_Hook(unsigned int *This, void *_EDX, void *Src, int Size){ bb_ClientPacket(Src, Size); // Этот обработчик все козявит, если его убрать то все ок, у него соглашение __stdcall SendXClient(This, _EDX, Src, Size); // Здесь вызываю оригинальную функцию соглашение __fastcall } 2. Попробуй написать её на С. Пусть хотя бы просто пустую, "без никто" для начала. |
Сообщ.
#3
,
|
|
|
Цитата ЫукпШ @ Цитата Rzonex @ Если ее убрать то все ок работает. Но она мне нужна. void bb_ClientPacket(void *Src, int Size); void __fastcall SendXClient_Hook(unsigned int *This, void *_EDX, void *Src, int Size){ bb_ClientPacket(Src, Size); // Этот обработчик все козявит, если его убрать то все ок, у него соглашение __stdcall SendXClient(This, _EDX, Src, Size); // Здесь вызываю оригинальную функцию соглашение __fastcall } 1. А так ?: void __stdcall bb_ClientPacket(void *Src, int Size); void __fastcall SendXClient_Hook(unsigned int *This, void *_EDX, void *Src, int Size){ bb_ClientPacket(Src, Size); // Этот обработчик все козявит, если его убрать то все ок, у него соглашение __stdcall SendXClient(This, _EDX, Src, Size); // Здесь вызываю оригинальную функцию соглашение __fastcall } 2. Попробуй написать её на С. Пусть хотя бы просто пустую, "без никто" для начала. Цитата А так ?: А так компилятор ругается матом. У этих функций строго определенный порядок вызова. Это функции из языка BlitzMax. Основа проги на BlitzMax, а те функции которые там невозможно использовать (т.к. там нет __stdcall)- я юзаю экстерном из C инклюда. Цитата Попробуй написать её на С. Ненавижу С Проблема явно в разных соглашениях о вызове, нужен переходник... |
Сообщ.
#4
,
|
|
|
Цитата Rzonex @ Ненавижу С Проблема явно в разных соглашениях о вызове, нужен переходник... я не предлагаю писать на С. Нужно убедиться, что проблема именно в разных соглашениях о вызове, а не во внутреннем функционировании импортируемой из другого языка функции. |
Сообщ.
#5
,
|
|
|
Цитата ЫукпШ @ И пишешь на нём именно поэтому? Ненавижу С |