首页
社区
课程
招聘
[原创]原生程序初次逆向之ARM与X86相关知识对比
发表于: 2013-7-29 15:52 37018

[原创]原生程序初次逆向之ARM与X86相关知识对比

2013-7-29 15:52
37018
#include <stdio.h>
int call(int a,int b,int c,int d,int e,int f){
  int sum =0;
  int v1 =1,v2 =2,v3 =3,v4 =4;
  sum = a+b+c+d+e+f+v1+v2+v3+v4;
  return sum;

}
int main(void){
    int sum =0;
    sum =call(1,2,3,4,5,6);
    printf("sum = %d\n",sum);
    return 0;
}
.text:004010BF                 push    6
.text:004010C1                 push    5
.text:004010C3                 push    4
.text:004010C5                 push    3
.text:004010C7                 push    2
.text:004010C9                 push    1
.text:004010CB                 call    j_?call@@YAHHHHHHH@Z ; 
var_14  = dword ptr -14h
var_10  = dword ptr -10h
var_C   = dword ptr -0Ch
var_8   = dword ptr -8
var_4   = dword ptr -4

.text:00401020                 push    ebp
.text:00401021                 mov     ebp, esp
.text:00401023                 sub     esp, 54h
.text:00401026                 push    ebx
.text:00401027                 push    esi
.text:00401028                 push    edi
.text:00401029                 lea     edi, [ebp+var_54]
.text:0040102C                 mov     ecx, 15h
.text:00401031                 mov     eax, 0CCCCCCCCh
.text:00401036                 rep      stosd
.text:00401038                 mov     [ebp+var_4], 0
.text:0040103F                 mov     [ebp+var_8], 1
.text:00401046                 mov     [ebp+var_C], 2
.text:0040104D                 mov     [ebp+var_10], 3
.text:00401054                 mov     [ebp+var_14], 4
.text:0040105B                 mov     eax, [ebp+arg_0]
.text:0040105E                 add     eax, [ebp+arg_4]
.text:00401061                 add     eax, [ebp+arg_8]
.text:00401064                 add     eax, [ebp+arg_C]
.text:00401067                 add     eax, [ebp+arg_10]
.text:0040106A                 add     eax, [ebp+arg_14]
.text:0040106D                 add     eax, [ebp+var_8]
.text:00401070                 add     eax, [ebp+var_C]
.text:00401073                 add     eax, [ebp+var_10]
.text:00401076                 add     eax, [ebp+var_14]
.text:00401079                 mov     [ebp+var_4], eax
.text:0040107C                 mov     eax, [ebp+var_4]
.text:0040107F                 pop     edi
.text:00401080                 pop     esi
.text:00401081                 pop     ebx
.text:00401082                 mov     esp, ebp
.text:00401084                 pop     ebp
.text:00401085                 retn
var_14          = -0x14
var_10          = -0x10
var_8           = -8

.text:0000851C                 STMFD   SP!, {R11,LR}
.text:00008520                 ADD     R11, SP, #4
.text:00008524                 SUB     SP, SP, #0x10
.text:00008528                 MOV     R3, #0
.text:0000852C                 STR     R3, [R11,#var_8]
.text:00008530                 MOV     R3, #5
.text:00008534                 STR     R3, [SP,#0x14+var_14]
.text:00008538                 MOV     R3, #6
.text:0000853C                 STR     R3, [SP,#0x14+var_10]
.text:00008540                 MOV     R0, #1
.text:00008544                 MOV     R1, #2
.text:00008548                 MOV     R2, #3
.text:0000854C                 MOV     R3, #4
.text:00008550                 BL       call
……
.text:0000850C                 MOV     R0, R3
.text:00008510                 MOV     SP, R11
.text:00008514                 LDMFD   SP!, {R11}
.text:00008518                 BX      LR

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 5
支持
分享
最新回复 (17)
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
2
沙发我占了,但是内容 不怎么详细。。
2013-7-29 16:54
0
雪    币: 182
活跃值: (178)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
嗯,还有很多需要学习!主要就理了理几两者一些关键地方的区别,尽快从X86过度到ARM。
2013-7-29 17:11
0
雪    币: 2063
活跃值: (1752)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
ARM汇编要学什么书啊
2013-7-29 19:08
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
类比法,我认为是很好的学习方法
2013-7-29 23:10
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
多谢楼主分享。
如果能再详细的区分一下CPU约定和程序约定的话,可能就更清晰了(只是个人猜测)。
2013-7-30 10:05
0
雪    币: 90
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
希望此贴能长期更新..................................
2013-7-31 09:08
0
雪    币: 224
活跃值: (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
不错的学习帖子
2013-8-2 13:32
0
雪    币: 74
活跃值: (748)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
thinks for share
2013-9-23 20:25
0
雪    币: 59
活跃值: (185)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
建议楼主画一下二者的函数调用栈结构的示意图,就更清楚了
2014-9-28 10:41
0
雪    币: 236
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
向LZ学习~~!
2014-11-7 17:25
0
雪    币: 54
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
mark
2015-2-1 03:18
0
雪    币: 59
活跃值: (185)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
楼主搞搞ARM64位吧,后续要成主流啊,这方面的总结现在还很少
2015-2-2 10:18
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
楼主,有个问题请教一下,ARM架构下有没有类似于x86的int 3(0xcc)之类的指令,
能够让调试器强制中断下来?
2015-3-10 15:58
0
雪    币: 64
活跃值: (134)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
挺好的,mark一下
2015-8-28 15:34
0
雪    币: 81
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
mark  以后看
2016-6-25 18:44
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
mark一下,慢慢看
2016-6-25 20:09
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
感谢楼主分享,尤其是"函数间通过寄存器R0~R3来传递参数,低于32位的函数返回值存于R0"这段对我帮助比较大,看过几本书都没提到参数传递。请问这个你是从哪里了解到的?谢谢
2016-9-13 23:52
0
游客
登录 | 注册 方可回帖
返回
//