![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
软件教程
DylanHe215
爱好电子
展开
-
Linux设备树与驱动
文章目录源头内核head.s对dtb的简单处理bootloader启动内核时,回设置r0,r1,r2三个寄存器head.s工作步骤对设备树平台信息的处理(选择machine_desc)start_kernel的调用过程对设备树中运行时配置信息的处理dtb转换为device_node(unflatten)device_node结构体对应一个节点property结构体表示节点的具体属性device_n...原创 2020-03-20 09:08:43 · 2309 阅读 · 0 评论 -
Linux程序与运行库
内存运行库系统调用与API运行库实现内存运行库系统调用与API运行库实现原创 2020-01-07 14:44:21 · 510 阅读 · 0 评论 -
ELF文件格式与共享库
ELF头Object目标文件类型Object文件格式数据表示ELF Header结构体e_idente_type类型e_machineELF节section头表结构体section介绍符号表字符串表符号值重定位重定位类型Linux命令行ELF头Object目标文件类型一个可重定位(relocation)文件保存着代码和适当的数据,用来和其他的object文件一起创建一个可执行文件或一个共...原创 2019-12-20 18:01:52 · 1124 阅读 · 0 评论 -
Widonws和Linux常用工具集
Objdump(cygwin版)HiewPrefileResHackPE_add_importPE_patcherPE_search_str_refsObjdump(cygwin版)可转存所有的PE文件结构Hiew二进制编辑器Prefile用来处理PE文件的Python库ResHackResource Hacker的简称,是一个资源编辑器PE_add_import一个小工具,...原创 2019-12-09 20:35:21 · 459 阅读 · 0 评论 -
32位系统处理64位数据
64位返回值x86平台ARM平台参数传递及加减运算x86平台ARM平台右移x86平台ARM平台32位数据转换为64位数据x86平台ARM平台32位系统的通用寄存器GPR只能容纳32位数据,所以这种平台必须把64位数据转换为一对32位数据才能进行运算64位返回值#include <stdio.h>uint64_t f(){ return 0x1234567890ABCDEF...原创 2019-12-05 19:00:16 · 3174 阅读 · 0 评论 -
ARM32、ARM64寄存器的比较
ARM32位寄存器ARM32寄存器表ARM64寄存器ARM64寄存器使用64位下NEON寄存器ARM64与ARM32的兼容ARM64与ARM32寄存器的映射AArch32上的系统寄存器AArch32上的PSTATEARM64的异常中断ARM32位寄存器ARM32寄存器表ARM64寄存器ARM64寄存器使用ARMv8-A具有31个64位通用寄存器,在所有异常级别都可以访问x0~x7...原创 2019-11-29 14:38:41 · 6177 阅读 · 1 评论 -
Linux交叉编译环境、Linux库创建和编译
Linux库创建和编译创建静态库ar命令创建静态库文件编译静态库创建共享库gcc命令编译共享库运行使用共享库的程序创建静态库ar命令1、在Linux环境中,使用ar命令创建静态库文件,ar命令创建可供编译器读取的函数目标文件的存档文件。ar命令格式:ar [-] (dmpqrtx) [abcfilNoPsSuvV] [membername] [count] archive files…...原创 2019-11-09 11:28:23 · 663 阅读 · 0 评论 -
Linux内嵌汇编
Linux内嵌汇编基本内嵌汇编扩展asm格式指定输入和输出值使用寄存器使用占位符引用占位符替换占位符改动的寄存器列表使用内存位置处理跳转使用内联汇编代码C宏函数创建内联汇编宏函数基本内嵌汇编1、GNU的C编译器使用asm关键字指出汇编语言编写的源代码段落。2、在基本asm格式,汇编代码通过C全局变量名称整合输入值和输出值。asm(“assembly code”)指令必须在引号内;如果...原创 2019-11-08 19:25:05 · 497 阅读 · 0 评论 -
跟踪系统调用strace
Linux跟踪系统调用strace程序高级strace参数监视程序系统调用附加到正在运行的程序strace程序能够截取程序发出的系统调用并且显示它们,被跟踪的程序可以是从strace命令运行的,也可以是系统上已经运行的进程。例程:$ strace ./syscalltest2添加命令行参数-c,在程序执行之后创建一个报告,概述发出的所有系统调用,以及每个系统调用花费的时间)$ str...原创 2019-11-07 19:02:40 · 189 阅读 · 0 评论 -
Linux常用系统调用
Linux常用系统调用系统调用参数传递以及返回值内存访问内核系统调用设备访问内核系统调用文件系统系统调用进程系统调用系统调用参数传递以及返回值系统调用输入参数:在C样式的函数调用中,输入参数被存放堆栈中,但是系统调用与函数调用不同,需要的参数被存放在寄存器中。系统调用参数顺序:EAX:系统调用值,也做系统调用返回值EBX:第1个参数ECX:第2个参数EDX:第3个参数ESI:第...原创 2019-11-07 18:12:58 · 278 阅读 · 0 评论 -
Linux代码开发工具
GNU汇编器gnu binutils软件包的所有程序包描述addr2line把地址转换为文件名和行号ar创建、修改和展开文件存档as把汇编语言代码汇编成目标文件c++filt还原C++符号的过滤器gprof显示程序简档信息的程序ld把目标代码文件链接为可执行文件nlmconv把目标代码转换成Netware Loadable ...原创 2019-11-05 17:26:21 · 158 阅读 · 0 评论 -
IA-32平台寄存器
IA-32平台寄存器组通用寄存器段寄存器指令指针寄存器控制寄存器标志寄存器通用寄存器EAX 用于操作数和结果数据的累加器EBX 指向数据内存段中的数据的指针ECX 字符串和循环操作的计数器EDX I/O指针EDI 用于字符串操作的目标的数据指针ESI 用于字符串操作的源的数据指针ESP 堆栈指针EBP 堆栈数据指针其中,EAX、EBX、ECX、EDX寄存器可以通过16位和8位名...原创 2019-11-05 10:41:18 · 294 阅读 · 0 评论 -
二进制补丁(不是真正的补丁制作流程)
补丁应用工具rdiffbsdiff/bspatchgit diff/apply首先git diff/apply --binary仅限git仓库使用制作两个不同的二进制文件$ as --32 -o hello.o hello.s$ ld -melf_i386 -o hello hello.o$ cp hello hello.nihao$ echo “nihao world” >...原创 2019-09-12 09:11:53 · 928 阅读 · 0 评论 -
GCC 80x86/80x64的嵌入汇编以及栈帧结构
嵌入汇编格式asm( “汇编语句”:输出寄存器:输入寄存器:会被修改的寄存器);输入输出寄存器编号顺序从输出寄存器序列从左到右从上到下以“%0”开始,分别记为%0,%1,…,%9常用寄存器加载代码说明“a” 使用寄存器eax“b” 使用寄存器ebx“c” 使用寄存器ecx“d” 使用寄存器edx“S” 使用esi“D” 使用edi“q” 使用动态分配字节可寻址寄存器(e...原创 2019-08-26 15:40:53 · 771 阅读 · 0 评论 -
J-Flash的Hex/Bin文件的烧录
一、安装JLink官网下载地址二、打开软件J-Flash三、软件设置1、设置软件工程(3种方法)第一种设置方法:1.1)选择安装目录下C:\Program Files (x86)\SEGGER\JLink\Samples\JFlash\ProjectFiles下对应产品的jflash文件,如下图1.2)选择烧录器以及芯片型号 第二种设置方法:2.1)创建新的项目2.2)选择...原创 2019-08-21 16:43:00 · 6543 阅读 · 0 评论 -
MINIX 3的常用系统调用
进程管理pid = fork() 创建一个与父进程相同的子进程pid = waitpid(pid, &statloc, opts) 等待一个子进程结束s = wait(&status) waitpid的老版本s = execve(name, argv, envp) 替换一个进程的内核映像exit(status) ...原创 2019-08-20 09:36:25 · 453 阅读 · 0 评论 -
MLFQ调度规则
@MLFQ调度规则规则1:如果A的优先级 > B的优先级,运行A规则2:如果A的优先级 = B的优先级,轮转运行规则3:工作进入系统时,放在最高优先级(最上层队列)规则4:一旦工作用完了其在某一层的时候配额(无论中间主动放弃多少次CPU),就降低其优先级(移入低一级队列)规则5:经过一段时间S,将系统中所有工作重新加入最高优先级队列...原创 2019-07-22 09:15:29 · 2417 阅读 · 0 评论 -
Ubuntu的Git安装使用教程
Ubuntu下git的安装与使用首先,确认你的系统是否已安装git,如果没有,在命令行模式下输入命令进行安装sudo apt-get install gitUbuntu下git的配置第一步:配置用户名和邮箱git config --global user.name “xxx”git config --global user.email “邮箱地址”第二步:生成git的密钥ssh-k...原创 2019-04-26 09:47:19 · 1931 阅读 · 0 评论