汇编语言入门__分析简单函数
1.个人感想
学了几个月的汇编了,拿着汇编一行一行的看倒也能懂,但是却不知道整体的意思,总感觉汇编语言和C语言之前联系不起来。
一直在“滴水逆向”,跟着海哥的视频学汇编,觉得他的方法挺有效的,也照着他的方法分析了一个简单C语言函数。
我觉得前期汇编和C联系不起来的原因是我没有关注堆栈,这几天我发现堆栈是汇编的基础,因为所有变量初始化和参数传入及返回都会在堆栈上进行。
通过分析自己写的C语言简易程序,能很好的帮助我们理解汇编对函数进程的把控。
在此分析之前,建议先画一下堆栈图,用OD调试简单函数,从函数入口到函数结尾,一直关注堆栈变化。
画出每一步汇编语言调试后,堆栈的变化情况。
或者直接去看滴水逆向,汇编部分 结尾。
2.C语言函数
编写软件:VC++6.0
#include <stdio.h>
int isprime(int n)
{
int i;
for (i = 2; i <= n / 2; i++)
{
if (n % i == 0)
{
return 0;
}
}
return 1;
}
int main(void)
{
int m, n = 0;
for (m = 100; m < 200; m++)
{
if (isprime(m) == 1)
{
printf("%5d", m);
n++;
if (n % 10 == 0)
{
printf("\n");
}
}
}
return 0;
}
3.VC++6.0打开寄存器、内存、反汇编窗口
写好程序,下好断点,按F10进行调试,这时会出现一排按钮:
一个是Rejisters(寄存器),另一个是Memory(内存),把这两个窗口打开。
自己可以移动他们改变放置位置。
接着即可打开VC++6.0内置反汇编:
就可以了
4.分析反汇编
个人建议一边分析反汇编,一边复制到Excel,并写好注释,特别是将汇编一段一段的用不同颜色填充。(因为汇编语言几个语句加起来才代表C语言一个语句)
这三张图应该连在一起的,太长了截不了=.=hhh