值得推荐:逆向知识的详细讲解

值得推荐:逆向知识的详细讲解

 

图片[1]-值得推荐:逆向知识的详细讲解-名将VR全景博客

文章摘录:

返回值.

在反汇编中,我们常常的会看到各种的函数调用,或者通过逆向的手段,单独的使用这个函数,那么此时,我们就需要认识一下怎么识别函数了.

一丶识别__cdecl 函数(俗称C Call),函数参数,函数返回值

首先写一个C Call的函数

1.返回值 int类型, 参数int 类型

高级代码:

int __cdecl MyAdd(int a,int b)
{
    return a + b;
}
int main(int argc, char* argv[])
{
    MyAdd(3,4);
    return 0;
}
main函数调用我们的自己写的

Debug下的汇编代码

图片[2]-值得推荐:逆向知识的详细讲解-名将VR全景博客

图片[3]-值得推荐:逆向知识的详细讲解-名将VR全景博客

在Debug版本下的调用处,我们会看到这种代码,没有流水线优化,没有任何优化

看到了,两个push,紧接着一个Call,然后平栈在外面

识别参数

  有经验的可能会说两个push 就是两个参数,其实不然,我们要进入函数内部,看内部的代码用了几个参数,要通过这个来识别.

  图片[4]-值得推荐:逆向知识的详细讲解-名将VR全景博客图片[5]-值得推荐:逆向知识的详细讲解-名将VR全景博客

  有两处使用,所以是两个参数. 而且直接给eax反回了,此时我们就可以在main函数位置,调用此函数的位置往上数几个push了,这些push才是属于自己这个函数的.

识别参数类型:

  参数类型还是很好识别了,使用参数的地方用的直接是4个字节的寄存器,那么我们可以暂定为int类型

识别调用约定

  如果在函数外面平栈,那么就是C调用约定,从识别参数来看,函数内部的 retn并没有平栈.

识别返回值

  从上面的识别参数我们看到,eax重新写入了,那么返回值就是int类型

……

详细文章分类:逆向知识

 

说明:很难得有这么深入分析逆向知识的文章,通过学习,可以提高分析汇编代码的效率,值得推荐。

 

 

转载请保留原文链接:http://blog.hzzx3d.com/3070.html

 

© 版权声明
THE END
喜欢就支持一下吧
点赞68 分享
相关推荐