作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我们有函数 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( ) 则通过一些钩子(Hook)打印出 a 的消息类型?如果是这样,假设我的程序运行了足够长的时间来切换函数,并且函数没有内联,我将如何编写这样的程序。
最佳答案
如果您想了解 hook,并亲自尝试,您必须意识到修补/hooking 是一个庞大而复杂的主题:-)
作为初学者,我会推荐什么:
尝试在您自己的 EXE 运行时从自身修补函数(不涉及外部进程)
警告:您必须了解有关操作码、堆栈、调用约定等的一些基础知识...特别是,函数开头的覆盖必须保留其余部分的操作码完整性(如果您打算跳回),这可能很棘手。
一些链接:
关于c++ - 如何使用函数 b( C 和 winapi )覆盖函数 a ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19801625/
我是一名优秀的程序员,十分优秀!