逆向-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 monthm;

}

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 小时前
LiteOS-M 切换汇编逐行图解(4):中断三件套与 HalTaskSchedule 触发
汇编·stm32·单片机·嵌入式硬件·harmonyos
xx~t19 小时前
嵌入式——ARM——汇编2
linux·汇编·arm开发·嵌入式硬件·启动代码
祖力5521 小时前
ARM汇编LED实验
汇编·arm·imx6ull
索端阳2 天前
ARM Day02 学习总结:ARM汇编基础核心知识点梳理
汇编·学习·arm
xx~t2 天前
嵌入式——ARM——汇编1
linux·汇编·arm开发·嵌入式硬件·arm
索端阳3 天前
初识 ARM Cortex-A7,嵌入式底层入门总结
汇编·嵌入式硬件
ThornArmor3 天前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
星栖与芯4 天前
LiteOS-M 切换汇编逐行图解(1):汇编是什么·寄存器与栈
汇编·stm32·嵌入式硬件·harmonyos·鸿蒙系统
yume_sibai4 天前
11-Rust 不安全编程(unsafe 关键字 + 裸指针 + FFI + 内联汇编 + 内存安全保证)
汇编·安全·rust
小杨不想秃头6 天前
信息安全工程师 历年真题原题汇编(2016–2025)
汇编