All pastes #353640 Raw Edit

Rick

public text v1 · immutable
·published 2007-02-13 14:10 UTC
rendered paste body
void
my_SendChat (const void **s1, const bool s2, const char **s3)
{
	// GameType::c2sSendChat(bool global, StringPtr message)
	
	// get the stack pointer
	asm("movl %ebp, o_esp");
	
	// Execute payload
	ChatHandler(s2, s3);
	
	// 1. correct frame pointer
	// 2. push s1 and s2 on stack
	// 3. push old_String + n bytes on stack
	// 4. ret
	
	// prolog of my_SendChat
	asm("sub $0x8,%esp");
	asm("mov 0xffffffe8(%ebp),%ebx");
	asm("leave");
	
	// execute head of original function
	asm("push %ebp");
	asm("mov %esp, %ebp");
	asm("push %ebx");
	asm("sub $0x64, %esp");
	asm("mov 0x0C(%ebp), %eax");
	
	// jmp back to original function
	asm("mov o_SendChat, %eax");
	asm("push %eax");
	asm("ret");
}