在 嵌入式软件编程中,经常会用到函数调用,之前在学习如何在C语言中嵌入汇编时有了解到C语言之前的参数调用是使用寄存器R0传递第一个参数,R1传递到第 二个..一直到R3传递第四个参数.但是实际上有时可能传递的参数非常多,超过8个,或是参数中有浮点数之类,参数也会超过4个寄存器,对于超出的部份并 不使用R4,而是使用堆栈的方式,但具体是如何的方式很多网站就没了下文了. 对于ARM体系来说,不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedur…
某天,王尼玛写了段C程序: #include <stdio.h> void input() { int i; ]; ; i < ; i++) { array[i] = i; } } void output() { int i; ]; ; i < ; i++) { printf("%d\n", array[i]); } } int main() { input(); output(); ){} ; } 这段代码的目的很简单,在input函数中定义了array[20…
首先,mbr主引导程序被破坏是指系统在启动过程中,磁头找不到/boot分区(windows的启动分区在c盘). 1)下面我们模拟主引导分区被破坏的情况:(在启动分区划分446M的存储大小) 2)重启(reboot)之后,会出现如下情况: 解决方法: 1)在真机中打开shell,输入virt-manager: 2)把虚拟机FORCE OFF之后,设置系统启动为光盘启动 3) 并进行如下选择: 4)完成之后,进入shell界面,执行如下操作: 5)完成之后,再设置虚拟机的启动为磁盘启动,即可. 注意…
原文网址:http://blog.sina.com.cn/s/blog_4e24d9c501014o39.html 笔记&&方便查阅. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~…
ps:先做草稿,以后有时间再整理并贴图,:) 主要是利用栈底寄存器(ebp).栈顶寄存器(esp)跟eax寄存器(存储返回值)来实现. 假设P调用Q: P() { Q(1,2); } (跟实际情况可能有点差异,主要还是用来了解函数调用的过程) 1.调用前准备,将Q的参数放到栈中(非push) mov $1, (%esp) mov $2, 4(%esp) 2.调用call 0x12345678 (Q的地址) 首先将函数的返回地址(call语句后的那条指令的地址)进栈, 然后跳到0x12345678…
当以一个函数内的临时变量对象作为另一个函数的形参的时候,原函数内的临时对象即 rvalue,就会成为此函数内的 lvalue. 这样会重新导致效率低下,因为造成了大量复制操作. <utility>头文件提供了 std:move()函数.此函数返回作为 rvalue 传递给的任何实参. 观察下面程序的输出: class CText { private: char *pText; public: void showIt()const { cout << pText << e…
在/boot目录下有两个重要的文件,分别是: vmlinuz-3.10.0-123.el7.x86_64         内核文件 initamfs-3.10.0-123.el7.x86_64.img    初始化文件 问题一:当系统中的内核文件vmlinuz-3.10.0-123.el7.x86_64 丢失之后,在没有重启的情况下,可以查看该安装包,并进行安装.具体步骤如下:   1)使用yum  whatprovides  /boot/vmlinuz-3.10.0-13.el7.x86_64…
在/boot/grub2目录下有一个grub.cfg文件:该文件主要是用来自动地引导系统启动内核程序和系统的初始化程序. 问题一:当系统在启动的情况下,我们不小心删除/boot/grub2/grub.cfg文件时,我们可以使用以下命令来恢复.(恢复之后在系统启动的时候会自动引导) 问题二:当/boot/grub2/grub.cfg文件删除之后,在系统第一次启动时要手动引导系统加在内核程序和初始化程序. 1) set root='hd0,msods1'               表示系统启动盘所…
********************* 部署过程 ************************** 一:场景描述 对于线上大流量服务或者需要上报日志的nginx服务,每天会产生大量的日志,这些日志非常有价值.可用于计数上报.用户行为分析.接口质量.性能监控等需求.但传统nginx记录日志的方式数据会散落在各自nginx上,而且大流量日志本身对磁盘也是一种冲击. 我们需要把这部分nginx日志统一收集汇总起来,收集过程和结果需要满足如下需求: 支持不同业务获取数据,如监控业务,数据分析统计…
一.系统启动级别一共有六个: 0:系统停机模式,系统不可以正常启动 1:单用户模式, root权限,用于系统的维护,禁止远程登陆 2:多用户模式,没有NFS网络支持 3:完整的多用户文本模式,有NFS,登陆后进入控制台命令行模式 4:系统未使用,作为保留一般不用 5:图形化模式,登陆后进入GUI模式 6:重启模式,默认级别不能为6,否则不能正常启动 ,并按 ctrl + x 使系统的继续启动 3)登陆进去之后,修改系统的启动级别为graphical.target,防止下一次发生这样的情况.…