值得推荐:逆向知识的详细讲解
文章摘录:
返回值.
在反汇编中,我们常常的会看到各种的函数调用,或者通过逆向的手段,单独的使用这个函数,那么此时,我们就需要认识一下怎么识别函数了.
一丶识别__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;
}
Debug下的汇编代码
在Debug版本下的调用处,我们会看到这种代码,没有流水线优化,没有任何优化
看到了,两个push,紧接着一个Call,然后平栈在外面
识别参数
有经验的可能会说两个push 就是两个参数,其实不然,我们要进入函数内部,看内部的代码用了几个参数,要通过这个来识别.
有两处使用,所以是两个参数. 而且直接给eax反回了,此时我们就可以在main函数位置,调用此函数的位置往上数几个push了,这些push才是属于自己这个函数的.
识别参数类型:
参数类型还是很好识别了,使用参数的地方用的直接是4个字节的寄存器,那么我们可以暂定为int类型
识别调用约定
如果在函数外面平栈,那么就是C调用约定,从识别参数来看,函数内部的 retn并没有平栈.
识别返回值
从上面的识别参数我们看到,eax重新写入了,那么返回值就是int类型
……
详细文章分类:逆向知识
说明:很难得有这么深入分析逆向知识的文章,通过学习,可以提高分析汇编代码的效率,值得推荐。
转载请保留原文链接:http://blog.hzzx3d.com/3070.html
© 版权声明
免责声明:本站的页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与我们联系(邮箱:3446525391@qq.com)删除或处理。稿件内容仅为传递更多信息之目的,不代表本网观点,也不代表本网站赞同其观点或证实其内容的真实性,更不对您的投资构成建议。
THE END