这次研究与之前不同,之前从elf文件入手,这次从编译器入手,并且切实发现了可以成功的途径。
编译器armcc,连接器armlink, Cortex M3反汇编分析工具:mdisasm
编译命令:armcc -c --cpu Cortex-M3 -O0 --apcs=interwork --apcs /r
opi/rwpi main.c fun.c
main.c
extern int func(int a);
static int b=0xffffffff;
int main(void){
b=10;
return func(b);
}
fun.c
int s;
int func(int a){
s=0xffff;
return a+s;
}
编译命令:armcc -c --cpu Cortex-M3 -O0 --apcs=interwork --apcs /r
opi/rwpi main.c fun.c
链接命名:armlink.exe --cpu Cortex-M3 --ropi --ro_base 0x0 --
rwpi --rw_base 0x0 --entry=main --first=main --no_startup --remove main.o
fun.o -o main.elf
得到rw部分:
这一看出代码是与地址无关的,访问data靠r9与$d所指的偏移共同实现。
下一步开始我的星辰大海。