如何动态调试来学习ARM汇编 1
单步调式之前的程序使用的命令是 ni
查看地址处的数据 p/x *0xab18f410
#include <stdio.h>
#define ARM "armv7a"
int main(int argc, char** argv){
printf("fuck %s\n", ARM);
return 0;
}
对应的汇编代码
1: 0xab18f410 <+0>: push {r11, lr}
2; 0xab18f414 <+4>: mov r11, sp
3: 0xab18f418 <+8>: sub sp, sp, #16
4: 0xab18f41c <+12>: ldr r2, ; 0xab18f45c <main+76>
5: 0xab18f420 <+16>: add r2, pc, r2
6: 0xab18f424 <+20>: ldr r3, ; 0xab18f460 <main+80>
7: 0xab18f428 <+24>: add r3, pc, r3
8: 0xab18f42c <+28>: movw r12, #0
9: 0xab18f430 <+32>: str r12,
10: 0xab18f434 <+36>: str r0,
11: 0xab18f438 <+40>: str r1,
12: 0xab18f43c <+44>: mov r0, r2
13: 0xab18f440 <+48>: mov r1, r3
14: 0xab18f444 <+52>: bl 0xab18f4b0
15: 0xab18f448 <+56>: movw r1, #0
16: 0xab18f44c <+60>: str r0,
17: 0xab18f450 <+64>: mov r0, r1
18: 0xab18f454 <+68>: mov sp, r11
19: 0xab18f458 <+72>: pop {r11, pc}
0xab18f45c <+76>: ; <UNDEFINED> instruction: 0xffffef57
0xab18f460 <+80>: ; <UNDEFINED> instruction: 0xffffef48
执行第14条指令bl 0xab18f4b0之前
bl printf
bl 子程序的调用
R0-R3传参数
大于4个参数的时候,多的参数使用栈来传参
R0用作返回值
执行完第19条指令 pop {r11, pc} 后
bx lr @跳转到lr地址 arm -->thumb或者thumb --> arm
带x是有指令集切换
楼主汇编高手啊{:1_921:} 是个高手,得好好学习 学习了,学习了 楼主这个方法看起来是个学习汇编的好方法,楼主能录制一个视频讲解一下细节吗?看了你的帖子还是不会操作啊,比如怎么就知道那个C语言程序对应的汇编程序是下面的那个,以及你是怎么操作的都不是很清楚。谢谢楼主啦! 正在学习操作系统移植,受教 大白痴先生 发表于 2021-3-17 21:37
楼主这个方法看起来是个学习汇编的好方法,楼主能录制一个视频讲解一下细节吗?看了你的帖子还是不会操作啊 ...
可以看看我的前一个帖子 图文写的非常清楚了
https://www.52pojie.cn/thread-1392812-1-1.html 学习到了谢谢分享 可以在M1上开辟新战场了 {:1_918:}
页:
[1]