mirror of
https://github.com/HIllya51/LunaHook.git
synced 2024-12-25 12:44:13 +08:00
remove hookfun
This commit is contained in:
parent
98e5f7c82b
commit
b217875c8c
@ -169,16 +169,7 @@
|
|||||||
* 011318EC 8B7B 0C MOV EDI,DWORD PTR DS:[EBX+0xC]
|
* 011318EC 8B7B 0C MOV EDI,DWORD PTR DS:[EBX+0xC]
|
||||||
*/
|
*/
|
||||||
namespace { // unnamed
|
namespace { // unnamed
|
||||||
bool BootupGDIHook(hook_stack* stack, HookParam *hp)
|
|
||||||
{
|
|
||||||
DWORD arg2 = stack->stack[2];
|
|
||||||
if ((arg2 & 0xffff0000)) { // if arg2 high bits are there, this is new Bootup game
|
|
||||||
hp->type |= DATA_INDIRECT;
|
|
||||||
hp->offset = get_stack(3);
|
|
||||||
hp->split = get_reg(regs::ebx);
|
|
||||||
}
|
|
||||||
return false; // run once and stop hooking
|
|
||||||
}
|
|
||||||
bool InsertBootupGDIHook()
|
bool InsertBootupGDIHook()
|
||||||
{
|
{
|
||||||
bool widechar = true;
|
bool widechar = true;
|
||||||
@ -203,7 +194,17 @@ bool InsertBootupGDIHook()
|
|||||||
hp.split = get_reg(regs::edx);
|
hp.split = get_reg(regs::edx);
|
||||||
else
|
else
|
||||||
hp.split = get_stack(1);
|
hp.split = get_stack(1);
|
||||||
hp.hook_fun = BootupGDIHook; // adjust hook parameter at runtime
|
hp.text_fun =
|
||||||
|
[](hook_stack* stack, HookParam* hp, uintptr_t* data, uintptr_t* split, size_t* len)
|
||||||
|
{
|
||||||
|
DWORD arg2 = stack->stack[2];
|
||||||
|
if ((arg2 & 0xffff0000)) { // if arg2 high bits are there, this is new Bootup game
|
||||||
|
hp->type |= DATA_INDIRECT;
|
||||||
|
hp->offset = get_stack(3);
|
||||||
|
hp->split = get_reg(regs::ebx);
|
||||||
|
}
|
||||||
|
hp->text_fun=nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
ConsoleOutput("INSERT BootupGDI");
|
ConsoleOutput("INSERT BootupGDI");
|
||||||
|
|
||||||
|
@ -909,19 +909,6 @@ bool NewKiriKiriZHook(DWORD addr)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KiriKiriZHook1(hook_stack* stack, HookParam *)
|
|
||||||
{
|
|
||||||
DWORD addr = stack->stack[0]; // retaddr
|
|
||||||
addr = MemDbg::findEnclosingAlignedFunction(addr, 0x400); // range is around 0x377c50 - 0x377a40 = 0x210
|
|
||||||
if (!addr) {
|
|
||||||
ConsoleOutput("KiriKiriZ: failed to find enclosing function");
|
|
||||||
return false; // stop looking
|
|
||||||
}
|
|
||||||
NewKiriKiriZHook(addr);
|
|
||||||
ConsoleOutput("KiriKiriZ1 inserted");
|
|
||||||
return false; // stop looking
|
|
||||||
}
|
|
||||||
|
|
||||||
bool InsertKiriKiriZHook1()
|
bool InsertKiriKiriZHook1()
|
||||||
{
|
{
|
||||||
ULONG addr = MemDbg::findCallerAddressAfterInt3((DWORD)::GetGlyphOutlineW, processStartAddress, processStopAddress);
|
ULONG addr = MemDbg::findCallerAddressAfterInt3((DWORD)::GetGlyphOutlineW, processStartAddress, processStopAddress);
|
||||||
@ -932,8 +919,20 @@ bool InsertKiriKiriZHook1()
|
|||||||
|
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.type = HOOK_EMPTY;
|
hp.text_fun =
|
||||||
hp.hook_fun = KiriKiriZHook1;
|
[](hook_stack* stack, HookParam* hp, uintptr_t* data, uintptr_t* split, size_t* len)
|
||||||
|
{
|
||||||
|
hp->text_fun=nullptr;
|
||||||
|
hp->type=HOOK_EMPTY;
|
||||||
|
DWORD addr = stack->stack[0]; // retaddr
|
||||||
|
addr = MemDbg::findEnclosingAlignedFunction(addr, 0x400); // range is around 0x377c50 - 0x377a40 = 0x210
|
||||||
|
if (!addr) {
|
||||||
|
ConsoleOutput("KiriKiriZ: failed to find enclosing function");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NewKiriKiriZHook(addr);
|
||||||
|
ConsoleOutput("KiriKiriZ1 inserted");
|
||||||
|
};
|
||||||
ConsoleOutput("INSERT KiriKiriZ1 empty hook");
|
ConsoleOutput("INSERT KiriKiriZ1 empty hook");
|
||||||
|
|
||||||
return NewHook(hp, "KiriKiriZ Hook");
|
return NewHook(hp, "KiriKiriZ Hook");
|
||||||
|
@ -120,18 +120,15 @@ void TextHook::Send(uintptr_t lpDataBase)
|
|||||||
if (!current_trigger_fun(location, stack->ebp, stack->esp)) trigger_fun = current_trigger_fun;
|
if (!current_trigger_fun(location, stack->ebp, stack->esp)) trigger_fun = current_trigger_fun;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (hp.type & HOOK_EMPTY) __leave; // jichi 10/24/2014: dummy hook only for dynamic hook
|
||||||
|
|
||||||
size_t lpCount = 0;
|
size_t lpCount = 0;
|
||||||
uintptr_t lpSplit = 0,
|
uintptr_t lpSplit = 0,
|
||||||
lpRetn = stack->retaddr,
|
lpRetn = stack->retaddr,
|
||||||
plpdatain=(lpDataBase + hp.offset),
|
plpdatain=(lpDataBase + hp.offset),
|
||||||
lpDataIn=*(uintptr_t*)plpdatain;
|
lpDataIn=*(uintptr_t*)plpdatain;
|
||||||
|
|
||||||
// jichi 10/24/2014: generic hook function
|
|
||||||
if (hp.hook_fun && !hp.hook_fun(stack, &hp)) hp.hook_fun = nullptr;
|
|
||||||
|
|
||||||
if (hp.type & HOOK_EMPTY) __leave; // jichi 10/24/2014: dummy hook only for dynamic hook
|
|
||||||
|
|
||||||
bool isstring=false;
|
bool isstring=false;
|
||||||
|
|
||||||
auto use_custom_embed_fun=(hp.type&EMBED_ABLE)&&!(hp.type&EMBED_BEFORE_SIMPLE);
|
auto use_custom_embed_fun=(hp.type&EMBED_ABLE)&&!(hp.type&EMBED_BEFORE_SIMPLE);
|
||||||
if(use_custom_embed_fun)
|
if(use_custom_embed_fun)
|
||||||
{
|
{
|
||||||
|
@ -287,7 +287,7 @@ namespace
|
|||||||
if (hp.type & FULL_STRING) HCode += L'F';
|
if (hp.type & FULL_STRING) HCode += L'F';
|
||||||
|
|
||||||
if (hp.type & NO_CONTEXT) HCode += L'N';
|
if (hp.type & NO_CONTEXT) HCode += L'N';
|
||||||
if (hp.text_fun || hp.filter_fun || hp.hook_fun) HCode += L'X'; // no AGTH equivalent
|
if (hp.text_fun || hp.filter_fun) HCode += L'X'; // no AGTH equivalent
|
||||||
|
|
||||||
if (hp.codepage != 0 && !(hp.type & CODEC_UTF16||hp.type & CODEC_UTF32)) HCode += std::to_wstring(hp.codepage) + L'#';
|
if (hp.codepage != 0 && !(hp.type & CODEC_UTF16||hp.type & CODEC_UTF32)) HCode += std::to_wstring(hp.codepage) + L'#';
|
||||||
|
|
||||||
|
@ -87,7 +87,6 @@ struct HookParam
|
|||||||
DWORD user_value; // 7/20/2014: jichi additional parameters for PSP games
|
DWORD user_value; // 7/20/2014: jichi additional parameters for PSP games
|
||||||
ALIGNPTR(uint64_t __2,void(*text_fun)(hook_stack* stack, HookParam* hp, uintptr_t* data, uintptr_t* split, size_t* len))
|
ALIGNPTR(uint64_t __2,void(*text_fun)(hook_stack* stack, HookParam* hp, uintptr_t* data, uintptr_t* split, size_t* len))
|
||||||
ALIGNPTR(uint64_t __3,bool(*filter_fun)(void* data, size_t* len, HookParam* hp)); // jichi 10/24/2014: Add filter function. Return false to skip the text
|
ALIGNPTR(uint64_t __3,bool(*filter_fun)(void* data, size_t* len, HookParam* hp)); // jichi 10/24/2014: Add filter function. Return false to skip the text
|
||||||
ALIGNPTR(uint64_t __4,bool(*hook_fun)(hook_stack* stack, HookParam* hp)); // jichi 10/24/2014: Add generic hook function, return false if stop execution.
|
|
||||||
ALIGNPTR(uint64_t __6,bool (*hook_before)(hook_stack* stack,void* data, size_t* len,uintptr_t*role));
|
ALIGNPTR(uint64_t __6,bool (*hook_before)(hook_stack* stack,void* data, size_t* len,uintptr_t*role));
|
||||||
ALIGNPTR(uint64_t __7,void (*hook_after)(hook_stack* stack,void* data, size_t len));
|
ALIGNPTR(uint64_t __7,void (*hook_after)(hook_stack* stack,void* data, size_t len));
|
||||||
ALIGNPTR(uint64_t __8,uintptr_t hook_font);
|
ALIGNPTR(uint64_t __8,uintptr_t hook_font);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user