ios 逆向开发

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

2017-04-04  本文已影响154人  Cichar

按照书中代码编写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()函数的调用

上一篇下一篇

猜你喜欢

热点阅读