逆向-beginners之字符串数组

#include <stdio.h>

const char * month[] = {

"January",

"February",

"March",

"April",

"May",

"June",

"July",

"August",

"September",

"October",

"November",

"December"

};

const char * get_month(int m)

{

return month[m];

}

void main()

{

printf("month=%s\n", get_month(9)); // month=October

}

#if 0

/*

* intel

*/

0000000000001149 <get_month>:

1149: f3 0f 1e fa endbr64

114d: 55 push %rbp

114e: 48 89 e5 mov %rsp,%rbp

1151: 89 7d fc mov %edi,-0x4(%rbp)

1154: 8b 45 fc mov -0x4(%rbp),%eax

1157: 48 98 cltq

1159: 48 8d 14 c5 00 00 00 lea 0x0(,%rax,8),%rdx // rdx=rax*8+0--> 9*8, 因是64bit,所以是8.

1160: 00

1161: 48 8d 05 b8 2e 00 00 lea 0x2eb8(%rip),%rax # 4020 <month> // 指向数据区

1168: 48 8b 04 02 mov (%rdx,%rax,1),%rax

116c: 5d pop %rbp

116d: c3 retq

000000000000116e <main>:

116e: f3 0f 1e fa endbr64

1172: 55 push %rbp

1173: 48 89 e5 mov %rsp,%rbp

1176: bf 09 00 00 00 mov $0x9,%edi

117b: e8 c9 ff ff ff callq 1149 <get_month>

1180: 48 89 c6 mov %rax,%rsi

1183: 48 8d 3d d0 0e 00 00 lea 0xed0(%rip),%rdi # 205a <_IO_stdin_used+0x5a>

118a: b8 00 00 00 00 mov $0x0,%eax

118f: e8 bc fe ff ff callq 1050 <printf@plt>

1194: 90 nop

1195: 5d pop %rbp

1196: c3 retq

1197: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)

119e: 00 00

/*

* arm

*/

000000000040055c <get_month>:

40055c: d10043ff sub sp, sp, #0x10

400560: b9000fe0 str w0, [sp, #12]

400564: b0000080 adrp x0, 411000 <__libc_start_main@GLIBC_2.17>

400568: 9100c000 add x0, x0, #0x30 // 指向数据区

40056c: b9800fe1 ldrsw x1, [sp, #12]

400570: f8617800 ldr x0, [x0, x1, lsl #3]

400574: 910043ff add sp, sp, #0x10

400578: d65f03c0 ret

000000000040057c <main>:

40057c: a9bf7bfd stp x29, x30, [sp, #-16]!

400580: 910003fd mov x29, sp

400584: 52800120 mov w0, #0x9 // #9

400588: 97fffff5 bl 40055c <get_month>

40058c: aa0003e1 mov x1, x0

400590: 90000000 adrp x0, 400000 <_init-0x3e8>

400594: 911b6000 add x0, x0, #0x6d8

400598: 97ffffae bl 400450 <printf@plt>

40059c: d503201f nop

4005a0: a8c17bfd ldp x29, x30, [sp], #16

4005a4: d65f03c0 ret

#endif

相关推荐
我在人间贩卖青春6 天前
汇编之伪指令
汇编·伪指令
我在人间贩卖青春7 天前
汇编之伪操作
汇编·伪操作
济6177 天前
FreeRTOS基础--堆栈概念与汇编指令实战解析
汇编·嵌入式·freertos
myloveasuka7 天前
汇编TEST指令
汇编
我在人间贩卖青春7 天前
汇编编程驱动LED
汇编·点亮led
我在人间贩卖青春7 天前
汇编和C编程相互调用
汇编·混合编程
myloveasuka7 天前
寻址方式笔记
汇编·笔记·计算机组成原理
请输入蚊子8 天前
《操作系统真象还原》 第六章 完善内核
linux·汇编·操作系统·bochs·操作系统真像还原
myloveasuka8 天前
指令格式举例
汇编·笔记·计算机组成原理
我在人间贩卖青春8 天前
汇编之分支跳转指令
汇编·arm·分支跳转