汇编精讲01

1、简单源码main.c

#include<stdio.h>
int g_a=1;
int main()
{
	int a =1;
	int b =2;
	return 0;
}

 2、反汇编方法:截取main函数部分


(1)arm-linux-gcc hello.c
   arm-linux-objdump -d a.out > main.s

(2)arm-linux-gcc -S main.c -o main.S
a.out:     file format elf32-littlearm


Disassembly of section .init:

00008250 <_init>:
    8250:	e92d4008 	push	{r3, lr}
    8254:	eb00001d 	bl	82d0 <call_weak_fn>
    8258:	e8bd8008 	pop	{r3, pc}

Disassembly of section .plt:

0000825c <.plt>:
    825c:	e52de004 	push	{lr}		; (str lr, [sp, #-4]!)
    8260:	e59fe004 	ldr	lr, [pc, #4]	; 826c <_init+0x1c>
    8264:	e08fe00e 	add	lr, pc, lr
    8268:	e5bef008 	ldr	pc, [lr, #8]!
    826c:	00008274 	.word	0x00008274
    8270:	e28fc600 	add	ip, pc, #0, 12
    8274:	e28cca08 	add	ip, ip, #8, 20	; 0x8000
    8278:	e5bcf274 	ldr	pc, [ip, #628]!	; 0x274
    827c:	e28fc600 	add	ip, pc, #0, 12
    8280:	e28cca08 	add	ip, ip, #8, 20	; 0x8000
    8284:	e5bcf26c 	ldr	pc, [ip, #620]!	; 0x26c
    8288:	e28fc600 	add	ip, pc, #0, 12
    828c:	e28cca08 	add	ip, ip, #8, 20	; 0x8000
    8290:	e5bcf264 	ldr	pc, [ip, #612]!	; 0x264

Disassembly of section .text:

00008294 <_start>:
    8294:	e3a0b000 	mov	fp, #0
    8298:	e3a0e000 	mov	lr, #0
    829c:	e49d1004 	pop	{r1}		; (ldr r1, [sp], #4)
    82a0:	e1a0200d 	mov	r2, sp
    82a4:	e52d2004 	push	{r2}		; (str r2, [sp, #-4]!)
    82a8:	e52d0004 	push	{r0}		; (str r0, [sp, #-4]!)
    82ac:	e59fc010 	ldr	ip, [pc, #16]	; 82c4 <_start+0x30>
    82b0:	e52dc004 	push	{ip}		; (str ip, [sp, #-4]!)
    82b4:	e59f000c 	ldr	r0, [pc, #12]	; 82c8 <_start+0x34>
    82b8:	e59f300c 	ldr	r3, [pc, #12]	; 82cc <_start+0x38>
    82bc:	ebffffeb 	bl	8270 <_init+0x20>
    82c0:	ebfffff0 	bl	8288 <_init+0x38>
    82c4:	000083d0 	.word	0x000083d0
    82c8:	00008340 	.word	0x00008340
    82cc:	00008370 	.word	0x00008370

000082d0 <call_weak_fn>:
    82d0:	e59f3014 	ldr	r3, [pc, #20]	; 82ec <call_weak_fn+0x1c>
    82d4:	e59f2014 	ldr	r2, [pc, #20]	; 82f0 <call_weak_fn+0x20>
    82d8:	e08f3003 	add	r3, pc, r3
    82dc:	e7932002 	ldr	r2, [r3, r2]
    82e0:	e3520000 	cmp	r2, #0
    82e4:	012fff1e 	bxeq	lr
    82e8:	eaffffe3 	b	827c <_init+0x2c>
    82ec:	00008200 	.word	0x00008200
    82f0:	00000018 	.word	0x00000018

000082f4 <__do_global_dtors_aux>:
    82f4:	e59f3010 	ldr	r3, [pc, #16]	; 830c <__do_global_dtors_aux+0x18>
    82f8:	e5d32000 	ldrb	r2, [r3]
    82fc:	e3520000 	cmp	r2, #0
    8300:	03a02001 	moveq	r2, #1
    8304:	05c32000 	strbeq	r2, [r3]
    8308:	e12fff1e 	bx	lr
    830c:	00010508 	.word	0x00010508

00008310 <frame_dummy>:
    8310:	e59f0020 	ldr	r0, [pc, #32]	; 8338 <frame_dummy+0x28>
    8314:	e92d4008 	push	{r3, lr}
    8318:	e5903000 	ldr	r3, [r0]
    831c:	e3530000 	cmp	r3, #0
    8320:	08bd8008 	popeq	{r3, pc}
    8324:	e59f3010 	ldr	r3, [pc, #16]	; 833c <frame_dummy+0x2c>
    8328:	e3530000 	cmp	r3, #0
    832c:	08bd8008 	popeq	{r3, pc}
    8330:	e12fff33 	blx	r3
    8334:	e8bd8008 	pop	{r3, pc}
    8338:	000103f4 	.word	0x000103f4
    833c:	00000000 	.word	0x00000000

00008340 <main>:
    8340:	e52db004 	push	{fp}		; (str fp, [sp, #-4]!)
    8344:	e28db000 	add	fp, sp, #0
    8348:	e24dd00c 	sub	sp, sp, #12
    834c:	e3a03001 	mov	r3, #1
    8350:	e50b3008 	str	r3, [fp, #-8]
    8354:	e3a03002 	mov	r3, #2
    8358:	e50b300c 	str	r3, [fp, #-12]
    835c:	e3a03000 	mov	r3, #0
    8360:	e1a00003 	mov	r0, r3
    8364:	e28bd000 	add	sp, fp, #0
    8368:	e8bd0800 	ldmfd	sp!, {fp}
    836c:	e12fff1e 	bx	lr

00008370 <__libc_csu_init>:
    8370:	e92d45f8 	push	{r3, r4, r5, r6, r7, r8, sl, lr}
    8374:	e59f504c 	ldr	r5, [pc, #76]	; 83c8 <__libc_csu_init+0x58>
    8378:	e59fa04c 	ldr	sl, [pc, #76]	; 83cc <__libc_csu_init+0x5c>
    837c:	e08f5005 	add	r5, pc, r5
    8380:	e08fa00a 	add	sl, pc, sl
    8384:	e065a00a 	rsb	sl, r5, sl
    8388:	e1a06000 	mov	r6, r0
    838c:	e1a07001 	mov	r7, r1
    8390:	e1a08002 	mov	r8, r2
    8394:	ebffffad 	bl	8250 <_init>
    8398:	e1b0a14a 	asrs	sl, sl, #2
    839c:	08bd85f8 	popeq	{r3, r4, r5, r6, r7, r8, sl, pc}
    83a0:	e3a04000 	mov	r4, #0
    83a4:	e4953004 	ldr	r3, [r5], #4
    83a8:	e1a00006 	mov	r0, r6
    83ac:	e1a01007 	mov	r1, r7
    83b0:	e1a02008 	mov	r2, r8
    83b4:	e2844001 	add	r4, r4, #1
    83b8:	e12fff33 	blx	r3
    83bc:	e154000a 	cmp	r4, sl
    83c0:	1afffff7 	bne	83a4 <__libc_csu_init+0x34>
    83c4:	e8bd85f8 	pop	{r3, r4, r5, r6, r7, r8, sl, pc}
    83c8:	00008068 	.word	0x00008068
    83cc:	00008068 	.word	0x00008068

000083d0 <__libc_csu_fini>:
    83d0:	e12fff1e 	bx	lr

Disassembly of section .fini:

000083d4 <_fini>:
    83d4:	e92d4008 	push	{r3, lr}
    83d8:	e8bd8008 	pop	{r3, pc}

3、分析main函数的汇编代码

00008340 <main>:
    8340:	e52db004 	push	{fp}		; (str fp, [sp, #-4]!)
    8344:	e28db000 	add	fp, sp, #0
    8348:	e24dd00c 	sub	sp, sp, #12
    834c:	e3a03001 	mov	r3, #1
    8350:	e50b3008 	str	r3, [fp, #-8]
    8354:	e3a03002 	mov	r3, #2
    8358:	e50b300c 	str	r3, [fp, #-12]
    835c:	e3a03000 	mov	r3, #0
    8360:	e1a00003 	mov	r0, r3
    8364:	e28bd000 	add	sp, fp, #0
    8368:	e8bd0800 	ldmfd	sp!, {fp}
    836c:	e12fff1e 	bx	lr

第一列:汇编命令地址

第二列:汇编二进制代码

第三列:汇编指令

第四列:;分号代表注释

 

 r0用作保存返回值

bx 跳转指令

lr用于保存函数返回地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值