地址

gnu ld脚本总结

那年仲夏 提交于 2020-02-07 00:49:39
GNU ld脚本总结 格式定义 举例1 举例2 格式定义 SECTION [ADDRESS] [ ( TYPE ) ] : [AT(LMA)] { OUTPUT - SECTION - COMMAND OUTPUT - SECTION - COMMAND . . . } [ >REGION ] [AT>LMA_REGION] [ :PHDR :PHDR . . . ] [ =FILLEXP ] 功能:将*.O的ELF文件的各种段(输入段)通过脚本重新打包并规定好保存地址和执行地址,这个就是bin文件。 SECTION:表示输出段的名称,{}内的内容为*.O的输入段名 LMA: bin存放的地址,一般指ROM。 VMA: 代码运行的地址,例如,当在ram中运行时。 LMA: bin存放的地址,一般指ROM。 [ADDRESS]:表示运行地址(VMA),如果此处不配置VMA则可通过 [AT>LMA_REGION]配置 [AT(LMA)]:bin存放地址定义 [>REGION]: 表示放入的区范围,若section的空间SIZE超出REGION定义的范围则连接器会报错。此时可以设置[ADDRESS]表示在该区域中的具体开始地址;也可以不设置,使用region设置的范围。 注意: [ADDRESS] [(TYPE)] : [AT(LMA)] 定义了VMA和LMA的起始地址 [>REGION

js变量和作用域

◇◆丶佛笑我妖孽 提交于 2020-02-07 00:39:23
js变量和作用域 (一)js变量 1. 变量数据类型和堆栈 1.1 数据类型 1.2 堆栈 2. 变量值的比较 3. 参数的传递 4. 类型检测 4.1 typeof 4.1 instanceof (二)js变量的作用域与解析 1. 变量对象及作用域链 2. js解析机制 2.1 预解析 2.2 解析冲突 2.3 逐行解析 (一)js变量 1. 变量数据类型和堆栈 1.1 数据类型 基本数据类型 数字 字符串 布尔值 undefined null 基本数据类型的值不能被修改,其值保存在栈中,当变量赋予新的值,栈中的值被覆盖 引用数据类型 对象 数组 引用数据类型的值可以被修改,其地址保存在栈中,值保存在堆中 1.2 堆栈 栈 堆 基本数据类型 a 值 引用数据类型 b 地址1 地址1 { } c 地址2 地址2 { } 2. 变量值的比较 基本数据类型 由于其值保存在栈中,每次比较都是栈中的值进行比较 引用数据类型 其地址保存在栈中,每次比较进行的都是栈中地址的比较,从堆栈表格中就可以看出,两个相同的对象,其保存在栈中的地址是不相同的 var a = { } , b = { } ; console . log ( a === b ) ; //得出结果为flase 总结:js中变量的比较是保存在栈中内容的比较 3. 参数的传递 基本数据类型 参数复制定义变量的值后进行传递 var a

【PWN系列】2015-Defcon Qualifier R0pbaby

左心房为你撑大大i 提交于 2020-02-06 20:13:54
个人博客地址 http://www.darkerbox.com 欢迎大家学习交流 题目: https://github.com/ctf-wiki/ctf-challenges 分析 先拖到ida分析。顺序大概运行程序看看。 ida图片就不截图了太长了。 分析了一下,程序有三个功能 第一个功能是获取libc的地址。 第二个功能是获取函数的地址 第三个功能可以输入一些东西。 漏洞就出在第三个功能上,先看看关键汇编代码 memcpy(&savedregs, nptr, v6); nptr中存放着就是我们输入的字符串。v6是大小。至于 savedregs ,是ida的一个关键字,双击进入,发现 savedregs 就是RBP。太直接了。直接将我们输入的字符从RBP开始覆盖。那么偏移就是8个字节,因为是64为程序 利用 整理思路: 程序给了很大的方便,这里要注意一下。第一个选项给的不是libc的地址,而是libc的地址的地址。libc基地址需要我们手动找 第二个选项可以知道system的地址,确定libc后,找到system在libc的偏移。可获得libc的真实地址。 在libc中找/bin/sh和pop rdi的地址。就可以直接调用了。 目前我们已知system的地址。找libc的基地址,先确定liibc。是libc.so.6。 确定libc后,就已经得到了libc的基地址

ipv4、ipv6编址

谁说我不能喝 提交于 2020-02-06 20:01:25
ipv4地址 IPv4地址分类及特征 IP地址按作用范围可分成两类,一类是在大网使用的公共IP地址,另一类是只在内网使用的私有地址。 IP按用途可分五大类:A类(政府)、B类(公司)、C类(公用)、D类(组播)和E类(实验),地址格式为网络地址+主机地址或网络地址+子网地址+主机地址形式。 它们之间的区别和特征如下表所示: 此外还有几个特殊IP地址: 1、0.0.0.0只能做源地址 2、255.255.255.255是广播地址 3、127.x.x.x为环回地址,本机使用 4、专用地址: 10/8 地址范围:10.0.0.0——10.255.255.255, 172.16/12 地址范围:172.16.0.0——172.31.255.255, 192.168/16地址范围:192.168.0.0——192.168.255.255。 来源: CSDN 作者: 轻飘风扬 链接: https://blog.csdn.net/jsh13417/article/details/104198813

C++函数指针详解

早过忘川 提交于 2020-02-06 07:30:36
C++指针详解请参考: C++指针详细讲解 目录 一、为何存在函数指针 二、函数地址 三、声明函数指针 四、使用指针来调用函数 五、使用typedef进行简化 附录 一、为何存在函数指针 与数据项相似的是函数也有地址,一般情况下对用户来说没什么用,但是对于程序来说,用处比较大,例如:将另一个函数的地址作为一个函数的参数,这样第一个函数就能找到第二个函数并且运行它。虽然这种方式比起直接调用的方式比更加的笨拙,但是其允许在不同的时间传递不同函数的地址,这意味着可以在不同的时间使用不同的函数。 二、函数地址 函数名就是函数的地址,例如:函数get_sum(),该函数的地址是get_sum而不是get_sum(),get_sum()为函数的返回值。 三、声明函数指针 函数指针的声明:表明指定的函数返回类型、表明函数的特征标(参数列表) 注意:只有当一个函数的返回类型和参数列表和声明的函数指针的返回类型和参数列表一致的时候才可以进行传递,编译器拒绝这种赋值。 int get_sum(int a, int b); int (*ptr)(int, int); // 声明函数指针ptr 四、使用指针来调用函数 // 第一种方式 (*ptr)(4, 5); // 第二种方式C++可用 ptr(4, 5); 五、使用typedef进行简化 例如:typedef double real;

指针

て烟熏妆下的殇ゞ 提交于 2020-02-06 05:21:39
指针(Point) 说到指针,首先要知道什么是指针,那么什么是指针呢? 在计算机中,指针是编程语言中的一个对象,利用地址,它的值是直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。 那么什么是变量呢? 变量通俗的来说就是能变化数。从本质上说就是在内存当中某一个进程里的一个临时存储区域。其作用是用于存储一些计算当中产生的一些临时性数据。在代码中可以只使用一个变量,也可以使用多个变量,变量中可以存放单词、数值、日期以及属性。 每一个变量空间在创建的时候都会被随机的分配地址,这个地址是个真实的物理内存地址,变量空间中的数据在变化的过程中必须保持是可兼容的,至少是同一类型。否则就会存在错误。 如果直接在代码中用变量的物理地址去访问空间中的数据的话 ,就有可能访问不到。因此为了避免地址的不确定性,引入了变量名这个概念 由变量名-地址表 来保证变量名和变量之间的关系(底层实现)。这样保证其正确性。 我们说的变量空间的地址, 其实就是C语言当中学的指针。 举个例子简单的说明下: 其中*c的含义是返回c 的值作为地址的那个空间的取值。&b的意义是返回当时声明b时开辟的地址。显然可以用赋值语句对内存地址赋值。具体说明如下: #include<stdio.h> void

C++知识点

百般思念 提交于 2020-02-06 01:53:21
int **p和int *p有什么区别 int *p表示的是一级指针,表示p所指向的地址里面存放的是一个int类型的值。int **p表示的是二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针。 一级指针存放变量的地址,指向的值是变量的内容。如int* p={1,2,3}, p=数组的首地址,*p=数组的第一个值; 二级指针存放一级指针的地址,指向一级指针。如int*p ={1,2,3}, int**pp=&p,pp=指针p的首地址,*pp=数组的首地址,**pp=数组第一个值1。 指针数组的数组名传递参数对应为指针的指针即二级指针,二维数组的数组名传递参数对应为数组指针即指向一维数组的指针 一级指针通过形参,可以修改实参中指针所指向的地址中的值。修改不了实参中指针所指向的地址。需要借助二级指针才可以。 int *p :一级指针,表示p所指向的地址里面存放的是一个int类型的值 int **p :二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向int的一级指针) 例如: int i=10; //定义了一个 整型变量 int *p=&i; //定义了一个指针指向这个变量 int **p1=&p; //定义了一个二级指针指向p指针 那么取出10的值方式为: printf("i=[%d]\n",*p); printf("i

指针的简单了解

北慕城南 提交于 2020-02-06 01:01:49
指针的简单了解 你们初学指针头就大了,是不是?不要慌,接下来跟我了解下! ** 指针P是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。 说到变量,变量又是什么呢? 变量可以储存计算机的计算结果,变量是通过变量名访问的,变量是可变的。 指针实际上也是变量,它里面存储的实际是内存中的一个地址。举例来说:你如果要去找一个人,那你得知道他在哪?那就得知道他所在的地址,以说指针就是就相当于这个人的地址了。 举个例子: # include <stdio.h> int main ( ) { int a = 3 ; int b = 2 ; int * c ; c = & b ; int * * d ; //二重指针只能指向一重指针,以此类推 d = & c ; printf ( "a的地址=%d\n" , & a ) ; //取变量a的地址 printf ( "b的地址=%d\n" , & b ) ; //取变量b的地址 printf ( "c的地址=%d\n" , & c ) ; //取变量c的地址——指针也是一种变量 printf ( "d的地址=%d\n" , & d ) ; //取变量d的地址——同理 printf (

VsCode从零开始配置一个属于自己的Vue开发环境

廉价感情. 提交于 2020-02-06 00:14:29
vscode vue VsCode算是比较热门的一个代码编辑器了,全名Visual Studio Code 下载地址: 点我去下载 插件众多,功能齐全,我在平常开发过程中都是用的它,整理了些自认好用的插件, 自己也记录下,万一以后换电脑了捏😂 参考文档: https://liubing.me/vscode-vue-setting.html Vetur 插件文档地址: https://marketplace.visualstudio.com/items?itemName=octref.vetur 开发Vue必装的一个插件 未安装之前vue文件显示这样的 安装完成后显示这样的,看着是不是贼拉舒服 Vue 2 Snippets 插件文档地址: https://marketplace.visualstudio.com/items?itemName=hollowtree.vue-snippets 主要加强vue的便捷写法 Auto Close Tag 插件文档地址: https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag 自动闭合标签所用 配合快捷键 Alt+. ( Command+Alt+. for Mac)特别好使。 Auto Rename Tag 插件文档地址: https:/

环回地址

依然范特西╮ 提交于 2020-02-05 16:01:09
本文转载自: 原文链接:https://blog.csdn.net/maoxiaohai123/article/details/86230477 A类地址段127.0.0.0默认被用作本地环回地址,其实只要是127开头的所有地址均是环回地址。 这个地址是用于标志本机的localhost。也就是说当要向本机发送数据时,就会用到环回地址。 当收到数据包时,判断若目的IP地址与本机IP地址一致(或者收到多播、广播地址,且本机属于多播、广播地址)时,网卡就会将数据发送给环回接口。此时数据包还是会经过协议栈,只是到网络层时,会传到环回接口。所以环回一般会被用于检测本机协议栈是否正常(环回接口不会经过网卡)。 来源: CSDN 作者: 奥利给,加油加油加油 链接: https://blog.csdn.net/qq_43166888/article/details/104180916