设置位于开始位置的起始代码段

2025-05-19 17:48:00

1、首先,进入目录LINK,运行make生成arm-linux-ld选项为“-Ttext 0x00000000”的反汇编码ttt.s。

设置位于开始位置的起始代码段

2、然后,修改Makefile:将第4、7行的“#”去掉,在第3、6行前加上“#”,运行make生成arm-linux-ld选项为“-Ttext 0x30000000”的反汇编码ttt2.slink.s程序中用到两种跳转方法:b跳转指令、直接向pc寄存器赋值。

设置位于开始位置的起始代码段

3、然后,先把在不同“-Ttext”选项下,生成的可执行文件的反汇编码列出来,再详细分析这两种不同指令带来的差异。

设置位于开始位置的起始代码段

4、然后,让第一张图片从最左面开始,滚动方向是从左向右,而且让第一张图片和最后一张图片要连接在一起,现在是一个滚动完成之后,图片又从最右边开始向左滚动。

设置位于开始位置的起始代码段

5、然后,在应用程序中,栈和堆的起始地址是有约定的。但是内核本身没有另外一个更高层的程序来管理内核的地址空间,所以内核空间的栈的组织,和应用程序有所不同。内核的栈如果溢出时,不能像应用程序那样产生一个page fault,然后分配新的地址空间,继续使用。内核的栈如果溢出,没有人知道,除非溢出的地方影响了运行,让程序crash。

设置位于开始位置的起始代码段

6、最后,堆的空间的扩大靠brk()系蕙蝤叼翕统调用,而内核的内存使用,get_free_pages来实现的(虽然上层封装了kmalloc和vmalloc),这个基本上是自己管理自己,由于Linux内核还不支持自己的swapping,所以内核如果找不到可用的页框了,也就没办法了。

设置位于开始位置的起始代码段
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢