у меня есть этот код:перекинув в довольно большое применение
.text:0045A020 ; int __thiscall CMapConnection__OnItemOptionCombination(CMapConnection *this, _tagRequestMAP_COMPOSITION_OPTIONITEM *prcreq)
.text:0045A020 [email protected]@@[email protected]@@Z proc near
.text:0045A020
.text:0045A020 000 push ebp
.text:0045A021 004 mov ebp, esp
.text:0045A023 004 sub esp, 440h ; Integer Subtraction
.text:0045A029 444 mov eax, ___security_cookie
.text:0045A02E 444 xor eax, ebp ; Logical Exclusive OR
.text:0045A030 444 mov [ebp+var_2F0], eax
.text:0045A036 444 push esi
.text:0045A037 448 push edi
.text:0045A038 44C mov [ebp+this], ecx
.text:0045A03E 44C mov eax, [ebp+this]
.text:0045A044 44C mov ecx, [eax+534h]
.text:0045A04A 44C mov [ebp+pPlayer], ecx
.text:0045A050 44C cmp [ebp+pPlayer], 0 ; Compare Two Operands
.text:0045A057 44C jnz short loc_45A063 ; Jump if Not Zero (ZF=0)
.text:0045A057
.text:0045A059 44C mov eax, 1
.text:0045A05E 44C jmp loc_45A97B ; Jump
Длинных вещи короткие, мне нужно сделать на следующий: - крюк в начало функции - сделать некоторые проверки (, выделяет код требуется для этих проверок) - на основании результата проверки мне нужно либо позволить функции продолжать нормальный курс, либо переходить в раздел, где он вызывает некоторые ошибки или просто останавливает его.
Я должен сделать это с базовым пониманием asm.
Из того, что я читал, я могу сделать это с крючком, но вот моя проблема: Функции проверки необходимо прочитать _tagRequestMAP_COMPOSITION_OPTIONITEM * prcreq данных о , так что он может собрать некоторые цифры.
.text:0041A464 784C mov ecx, [ebp+pPacket] ; jumptable 00417B7A case 27
.text:0041A467 784C add ecx, 4 ; Add
.text:0041A46A 784C mov [ebp+var_1874], ecx
.text:0041A470 784C mov edx, [ebp+var_1874]
.text:0041A476 784C push edx ; prcreq
.text:0041A477 7850 mov ecx, [ebp+this] ; this
.text:0041A47D 7850 call [email protected]@@[email protected]@@Z ;
Вот как вызывается оригинальная функция.
Мои вопросы:
- Как я читать данные из кода * pcreq в C++? Является ли это возможным?
- Можно ли вызвать другую функцию из моего крючка, передавая ей те же параметры, что и функция hooked?
- Я вообще не возился с параметрами функции OnItemCombination, мне нужно переделать стек, когда я выхожу из своего крючка?
Это действительно хороший вопрос! –