函数操作码在C中

Man*_*uro 5 c hook

我正在阅读一篇关于x86挂钩的文章x86 API挂钩,我遇到了这段代码:

if(*function_A == 0xe9) {
    printf("Hook detected in function A.\n");
}
Run Code Online (Sandbox Code Playgroud)

似乎这段代码测试函数的操作码是否是跳转.我的问题是关于语法*function_A.这是什么语法?它是否返回C中函数的操作码?我做了很多研究但是没有找到关于这个功能的任何文档

编辑

我以为我添加了文章的链接,但我注意到我忘了添加它.链接添加,以防它有帮助.

unw*_*ind 5

不,您不能取消引用函数指针来获取底层代码.

这可能是通过引入一个不同的指针,并依靠特定平台"做正确的事情"来完成的,其中"正确"意味着"我想做什么".

就像是:

const unsigned char *function_A = (unsigned char *) printf; /* Any function. */
Run Code Online (Sandbox Code Playgroud)

这是不可移植的,并且会生成编译器警告,因为函数和数据指针不兼容.在例如x86上,它可能会"起作用".

  • 而且还是+1.从另一个角度来看:在POSIX下,`void*`与数据和函数指针兼容.这意味着`void*tmp =&printf; const unsigned char*funcPtr = tmp;`在没有警告的情况下工作. (2认同)