Хорошо, я пытаюсь написать базовую модификацию программы, НЕ написанной мной.
У меня нет источника к нему.
Мне также все равно, работает ли это только для одной версии программы, поэтому возможны жесткие коррекции кодирования. В любом случае, я нашел функцию и место ее вызова в скомпилированной программе.
.text:1901C88F loc_1901C88F: ; CODE XREF: ConnectionThread+1A2j
.text:1901C88F ; DATA XREF: .text:off_1901CC64o
.text:1901C88F 8B C8 mov ecx, eax ; jumptable 1901C862 case 11
.text:1901C891 8B C6 mov eax, esi
.text:1901C893 E8 48 C5 FF FF call ChatEvent
Согласно IDA полная подпись функции:
char *__usercall ChatEvent<eax>(char *Data<eax>, unsigned int Length<ecx>)
У меня уже есть все, что нужно для исправления программы во время выполнения и выполнения любых других необходимых мне манипуляций.
Что мне нужно, так это уметь написать такую функцию:
bool ProcessChat(char *Data, unsigned int Length);
char *__usercall HijackFunction(char *Data, unsigned int Length){
if (ProcessChat(Data, Length))
Call OriginalChatEvent(Data, Length);
}
Получите суть того, что я пытаюсь сделать?
С функцией stdcall легко просто заменить 4-байтовый адрес на адрес моей собственной функции. Но это почти относительный вызов, который ... больше раздражает.
Так, у кого-нибудь есть идеи?