美文网首页ios 逆向开发
《逆向工程核心原理》-- 调试stackframe.exe程序

《逆向工程核心原理》-- 调试stackframe.exe程序

作者: Cichar | 来源:发表于2017-04-04 15:43 被阅读154次

    按照书中代码编写stackframe.exe

    #include "stdafx.h"
    #include "stdio.h"
    
    long add(long a, long b) {
        long x = a, y = b;
        return (x + y);
    }
    
    
    int main(int argc, char* argv[])
    {
        long a = 1, b = 2;
        printf("%d\n", add(a, b));
        return 0;
    }
    

    用OllyDbg打开,调出memory(ALT + m):


    进入002C1000c处,找到如下代码段:


    在002D183D处发现了“%d\n”,初步判定之后的CALL 002D1325为调用printf(),
    而printf()中需要两个参数,002D183D处为“%d\n”,则002D183C处的CALL 002D12C6为add()函数的调用。
    同时初步判定002D1800 - 002D185F处为main()函数

    为了印证猜想,继续调试,进入002D12C6处,判定是否为add()函数。


    跳转至002D16F0:

    根据002D170E - 002D171D处汇编指令可知:

    002D170E与002D1711两条指令将参数a赋予局部变量x,
    002D1714与002D1717两条指令将参数b赋予局部变量y,
    002D171A与002D171D两条指令计算x+y,同时EAX保存计算结果。
    结合之前猜测的main()函数段中的此部分:


    可以得出之前的猜测正确,
    002D1800 - 002D185F处为main()函数,
    002D12C6处为add()函数的调用,
    002D1325处为printf()函数的调用

    相关文章

      网友评论

        本文标题:《逆向工程核心原理》-- 调试stackframe.exe程序

        本文链接:https://www.haomeiwen.com/subject/kezaottx.html