32位逆向分析

启动函数

源码里必须实现一个WinMain函数,先执行由编译器生成的相关代码,再调用WinMain函数。分析过程中可以略过启动函数。

函数的参数

函数传参有3种方式:栈方式、寄存器方式、全局变量隐含参数传递的方式。

  • 栈方式:
    一依次把参数压入栈,然后调用函数。函数结束后,由调用者或函数本身修改栈,恢复栈,叫作平衡栈数据。非优化编译器用一个专门的寄存器(通常是ebp)对参数进行寻址。在ret指令后加一个操作数,表示在ret指令后给栈指针esp加上操作数。如ret 8相当于ret; add esp,8
  • 利用寄存器传递参数:
    这种方式没有标准,但大多数遵循Fastcall规范。
  • 名称修饰约定:
    为了允许操作符的重载,c++编译器往往会按某种规则改写每一个入口点的符号名,从而允许同一个名字有多个用法。称为名称改编或名称修饰。

函数的返回值

  • 用return操作符返回值:
    返回值在eax中。如果放不下,则高32位放在edx,低32位放在eax
  • 通过参数按引用方式返回值:
    调用函数传的是地址。

数据结构

局部变量

  • 放在栈中
  • 放在寄存器中

全局变量

全局变量通常位于数据区块(.data)的一个固定地址处,要访问时,一般用固定的硬编码地址直接对内存进行寻址。静态变量和全局变量类似,都可以按直接方式寻址。区别是静态变量作用范围有限,仅在定义这些变量的函数内有效。

数组

数组地址通过基址加变址寻址实现的。

数学运算符

  • 整数的加减法:
    一般情况是add和sub。编译优化后,可能会用lea代替,lea速度很快。lea c,[a+b+78]的意思就是c=a+b+78h
  • 整数的乘法:
    一般是mul、imul,编译优化后也可能是lea。shl左移代替乘2的幂。加法对于提高3、5、6、7、9等数的乘法效率很有用,如eax*5可以写成lea eax,[eax*4+eax]
  • 整数的除法:
    一般是div、idiv。除法的运算代价很大。如果除数是2的幂,可以用shr代替。shr是和无符号运算,sar用来进行有符号运算。编译器优化后,会用乘法代替除法。最常用的优化公式就是倒数相乘。

文本字符串

  • c字符串
    也称ASCIIZ字符串,Z表示 \0,为结束标志,\0代表ASCII为0的字符,是不可以显示的字符,是空操作符。
  • DOS字符串
    $作为终止字符,少见
  • PASCAL字符
    没有终止字符,但在字符串头部定义了1字节,用于指示当前字符串的长度,不能超过255个字符
  • Delphi字符串
    有双字节Delphi和四字节,就是开头表示长度的字节分别有2和4个。少见。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容