假设我们有函数A和函数B,如下所示:
#include <stdio.h>
#include <stdlib.h>
void a( )
{
printf("Hello from function a!\n");
return;
}
void b( )
{
printf("Hello from function b!\n");
return;
}
int main( )
{
printf( "a = %p, b = %p\n", a, b );
a( );
b( );
return 0;
}
在这种情况下,输出为:
a = 00401334, b = 00401349
Hello from function a!
Hello from function b!
有没有办法以编程方式(使用C和winapi)切换来自外部程序的那两个函数调用来调用a()打印出b的消息而b()用一些钩子打印出一条消息类型?如果是这样,我将如何编写这样的程序,假设我的程序运行时间足以切换函数,并且函数没有内联。
答案 0 :(得分:0)
听起来最好的事情就是在你的程序中根据当前的情况决定调用哪个函数。您需要在代码中构建一些内容,以便以某种受控方式响应外部程序。
暴露或操纵任何较低级别的内容(例如修改二进制文件中的调用指令)将非常难以安全/可靠地进行。
答案 1 :(得分:0)
如果你想了解钩子,自己试验所有,你必须意识到修补/挂钩是一个庞大而复杂的主题: - )
我推荐的是作为首发者:
尝试在自己的EXE中修补一个函数,当它自己运行时(不涉及外部过程)
警告:您必须了解有关操作码,堆栈,调用约定等的一些基础知识...特别是,覆盖函数的开头必须保留其余部分的操作码完整性(如果您打算跳回来,这可能很棘手。
一些链接: