![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础知识
文章平均质量分 71
HZero.chen
随风潜入夜,润物细无声
展开
-
基础知识 - 参考文档
编程基础linux下的C语言编程(总结篇)原创 2021-09-11 18:14:23 · 153 阅读 · 0 评论 -
Node.js简介
1. 前言Node.js 是一个开源和跨平台的 JavaScript 运行时环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。Node.js = 运行环境+ JavaScript库.2. npmNPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:允许用户从NPM服务器下载别人编写的第三方包到本地使用。允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。允许用户将自己编写的包或命令行转载 2021-12-21 09:52:46 · 138 阅读 · 0 评论 -
ELF文件格式解析
参考文档《ELF格式解析》学习笔记(一)《ELF格式解析》学习笔记(二)《ELF格式解析》学习笔记(三) 详解ELF重定向原理原创 2021-06-29 14:11:14 · 944 阅读 · 0 评论 -
栈帧结构简析
1. 前言2. 分析示例int fun(int a,int b){ int c = 1; int d = 2; return 0;}int main(int argc,char **argv){ int a = 0; int b = 1; fun(a,b);}反汇编后的结果:......00010398 <fun>: //将main函数的帧指针fp(r7)入栈 10398: b480 pus原创 2021-06-10 14:54:00 · 1522 阅读 · 0 评论 -
GCC内嵌汇编学习笔记
1.前言本文主要对GCC内嵌汇编一文的简要总结,试着用自己的话把GCC汇编的关键点描述出来,以验证自己是否真正理解。本文将以《Linux内核完全注释 v3》中的一个例子进行描述,这个例子我看的时候是非常的懵逼,直到看了GCC内嵌汇编一文。2. 实例说明GCC内嵌汇编的基本结构__asm ("汇编语句列表" :输出寄存器 :输入寄存器 :会被修改的寄存器);汇编语句列表就是普通的一组汇编语句;输出寄存器表示寄存器的数据赋值给一个表达式作为输出。注:(1) 出现在输入原创 2021-01-05 11:21:56 · 216 阅读 · 0 评论 -
结构体对齐原则
结构体对齐原则无论是数据类型自身,结构体成员自身,结构体自身都将按自身对齐值和指定对齐值中小的那个值进行对齐注:数据类型自身的对齐值: 对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节;结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值;指定对齐值:#pragma pack (value)时的指定对齐值value,32位机器默认为4,64位机器默认为8;数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐原创 2020-12-18 11:47:31 · 595 阅读 · 2 评论 -
链接基础-7.版本命令
1.前言当使用ELF目标文件格式时,连接器支持带版本号的符号。读者可以发现仅仅在共享库中,符号的版本号属性才有意义。动态加载器使用符号的版本号为应用程序选择共享库内的一个函数的特定实现版本。可以在连接脚本内直接使用版本号命令,也可以将版本号命令实现于一个特定版本号描述文件(用连接选项–version-script指定该文件)。2.命令文法VERSION { version-script-commands }3. 参考文档The GNU Linker...转载 2020-12-10 11:02:50 · 74 阅读 · 0 评论 -
链接基础-6.PHDRS命令
1.前言该命令仅在产生ELF目标文件时有效。ELF目标文件格式用program headers程序头(程序头内包含一个或多个segment程序段描述)来描述程序如何被载入内存。可以用objdump -p命令查看。当在本地ELF系统运行ELF目标文件格式的程序时,系统加载器通过读取程序头信息以知道如何将程序加载到内存。要了解系统加载器如何解析程序头,请参考ELF ABI文档。在连接脚本内不指定PHDRS命令时,连接器能够很好的创建程序头,但是有时需要更精确的描述程序头,那么PAHDRS命令就派上用场了转载 2020-12-10 10:58:54 · 1584 阅读 · 0 评论 -
链接基础-5.内存区域命令
1.前言注意:以下存储区域指的是在程序地址空间内的。在默认情形下,连接器可以为section分配任意位置的存储区域。你也可以用MEMORY命令定义存储区域,并通过输出section描述的> REGION属性显示地将该输出section限定于某块存储区域,当存储区域大小不能满足要求时,连接器会报告该错误。2.MEMORY命令的文法MEMORY { NAME1 [(ATTR)] : ORIGIN = ORIGIN1, LENGTH = LEN2 NAME2 [(ATTR)] : ORIGIN转载 2020-12-10 10:50:00 · 331 阅读 · 0 评论 -
链接基础-4.section command
1.前言SECTIONS-COMMAND作用包含如下:如何把输入文件的sections映射到输出文件的各个section:如何将输入section合为输出section;如何把输出section放入程序地址空间(VMA)和进程地址空间(LMA).2.SECTIONS-COMMAND格式 SECTIONS { SECTIONS-COMMAND SECTIONS-COMMAND … }SECTION-COMMAND有四种:(1) ENTRY命令(2) 符号赋值语句转载 2020-12-10 10:33:54 · 519 阅读 · 0 评论 -
链接基础-3.符号赋值
1.前言本文主要介绍链接i脚本赋值相关的内容2.通过链接脚本修改目标文件符号地址在目标文件内定义的符号可以在链接脚本内被赋值. (注意和C语言中赋值的不同!)此时该符号被定义为全局的. 每个符号都对应了一个地址, 此处的赋值是更改这个符号对应的地址./* a.c */#includeint a = 100;int main(void){ printf( “&a=0x%p “, &a ); return 0;}/* a.lds */a = 3;输出:$转载 2020-12-09 10:37:48 · 409 阅读 · 0 评论 -
链接基础-2.链接脚本命令
1. 前言本文介绍链接脚本锁使用的一些基本命令。2. 简单脚本命令ENTRY(symbol)将符号SYMBOL的值设置成入口地址。注:入口地址(entry point): 进程执行的第一条用户空间的指令在进程地址空间的地址ld有多种方法设置进程入口地址, 按以下顺序: (编号越前, 优先级越高)1, ld命令行的-e选项2, 连接脚本的ENTRY(SYMBOL)命令3, 如果定义了start符号, 使用start符号值4, 如果存在.text section, 使用.text sec转载 2020-12-09 10:12:20 · 406 阅读 · 0 评论 -
链接基础-1.基本概念
目录1. 前言2.基本概念链接器输入文件输出文件目标文件(包括可执行文件)输入section和输出sectionsectionloadable section和allocatable sectionVMA和LMA符号(symbol)3. 脚本格式4. 简单例子1. 前言每一个链接过程都由链接脚本控制,一般以lds作为文件的后缀名。链接脚本主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分在程序地址空间内的布局。链接器有个默认的内置连接脚本, 可用ld –verbose转载 2020-12-09 09:49:09 · 528 阅读 · 0 评论