Well, the reason is that it will be used in many different places, and this is more-or-less a thing of convenience for the developer using my lib...
My lib will already have a list of all functions they could be calling from...
It would be simple to decypher where they are and return the info they want based on that if I had this pointer... It is by no means necessary, but it would keep their code much cleaner this way...
example of my lib in use...
Code: Select all
Procedure HookedProcedure(X.l,Y.l,Z.l)
Debug "OriginalProcedure(" + Str(X) + "," + Str(Y) + "," + Str(Z) + ")"
Trampoline=GetTrampolineFunction(@OriginalProcedure())
ProcedureReturn CallFunctionFast(Trampoline,X,Y,Z)
EndProcedure
Procedure OriginalProcedure(X.l,Y.l,Z.l)
EndProcedure
OriginalProcedure(1,2,3) ;/This calls OriginalProcedure()
ReplaceFunction(@OriginalProcedure(),@HookedProcedure())
OriginalProcedure(1,2,3) ;/This calls HookedProcedure()!!!
RestoreFunction(@OriginalProcedure())
OriginalProcedure(1,2,3) ;/This calls OriginalProcedure()
Here's what it would look like if I could decypher where the caller is:
Code: Select all
Procedure HookedProcedure(X.l,Y.l,Z.l)
Debug "OriginalProcedure(" + Str(X) + "," + Str(Y) + "," + Str(Z) + ")"
ProcedureReturn CallFunctionFast(Trampoline(),X,Y,Z) ;/CHANGED
EndProcedure
Procedure OriginalProcedure(X.l,Y.l,Z.l)
EndProcedure
OriginalProcedure(1,2,3) ;/This calls OriginalProcedure()
ReplaceFunction(@OriginalProcedure(),@HookedProcedure())
OriginalProcedure(1,2,3) ;/This calls HookedProcedure()!!!
RestoreFunction(@OriginalProcedure())
OriginalProcedure(1,2,3) ;/This calls OriginalProcedure()
Not a big difference, but you can see how that's a nicer syntax...
It makes a much bigger deal when the replaced function is in a dll...... that can get annoying!