地址

golang中net包用法(一)

こ雲淡風輕ζ 提交于 2019-12-05 00:27:12
net包对于网络I/O提供了便携式接口,包括TCP/IP,UDP,域名解析以及Unix Socket。尽管net包提供了大量访问底层的接口,但是大多数情况下,客户端仅仅只需要最基本的接口,例如Dial,LIsten,Accepte以及分配的conn连接和listener接口。 crypto/tls包使用相同的接口以及类似的Dial和Listen函数。下面对net包进行具体分析。 首先介绍其中常量: const ( IPv4len = 4 IPv6len = 16 ) 很容易看出这表示ip地址的长度(bytes),其中ipv4长度是4,ipv6地址长度是16 变量: 常用的ipv4地址: var ( IPv4bcast = IPv4(255, 255, 255, 255) // 广播地址 IPv4allsys = IPv4(224, 0, 0, 1) // 所有系统,包括主机和路由器,这是一个组播地址 IPv4allrouter = IPv4(224, 0, 0, 2) // 所有组播路由器 IPv4zero = IPv4(0, 0, 0, 0) // 本地网络,只能作为本地源地址其才是合法的 ) 常用的IPV6地址: var ( IPv6zero = IP{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} IPv6unspecified

32位汇编背景知识

允我心安 提交于 2019-12-04 23:25:19
目录 背景知识 GTDTR ,是一个48位的寄存器, 指向的描述符表为全局描述符表 GDT ( Gloabl Descriptor Table ) LDTR ,是一个16位的寄存器,指向局部描述符表 LDT ( Local Descriptor Table ),每个任务一个独立的 LDT 。 段选择器 内存分页机制 背景知识 以下说的知识皆以如非特别表明,皆说的是80386CPU 它的可寻址能力达到4GB 通过寄存器是32位 通用寄存器是32位的,2的32次方等于4GB,就可以使用一个通用寄存器来寻址,从而不必分段。虽然在地址上不再有分段的限制问题。但是,一个地址否可以被写入,可以被多少优先级的代码写入?等问题就出来,要解决此类问题,必须要在地址空间定义一些安全属性。这是由段选择器就有了作用。但是涉及属性和保护模式下段的其他参数和要表示的信息太多,要用64位的数据才能表示。 80386的段寄存器是16位的,无法放下保护模式下64位的段描述符。所以就把所有段的段描述符顺序放在内存中指定的位置,组成一个段描述符表( Descriptor Table );而段寄存器中的16位用来索引信息,指定这个段的属性用段描述符表中的第几个描述符来表示。可以通过它在段描述符表中" 选择 "一个项目以得到段的全部信息。这时段寄存器中的信息不再是段地址, 而是一个指向段描述符表的索引值

从go语言中找&和*区别

[亡魂溺海] 提交于 2019-12-04 23:16:02
*和&的区别 : & 是取地址符号 , 即取得某个变量的地址 , 如 ; &a *是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值 . 从代码中验证 : 先构建一个Rect类型 : 1. &是取地址符号, 取到Rect类型对象的地址 2. *可以表示一个变量是指针类型(r是一个指针变量): 3.*也可以表示指针类型变量所指向的存储单元 ,也就是这个地址所指向的值 4.查看这个指针变量的地址 , 基本数据类型直接打印地址 来源: CSDN 作者: 阿諾. 链接: https://blog.csdn.net/liuli9/article/details/81024077

copy_from/to_user详解

落花浮王杯 提交于 2019-12-04 22:23:05
参考:http://www.wowotech.net/memory_management/454.html 宋大侠的文章精彩,郭大侠的评论也精彩。 结论简单摘录如下: 无论是内核态还是用户态访问合法的用户空间地址,当虚拟地址并未建立物理地址的映射关系的时候,page fault的流程几乎一样,都会帮助我们申请物理内存并创建映射关系。所以这种情况下memcpy()和copy_{to,from}_user()是类似的。 当内核态访问非法用户空间地址的时候,通过 .fixup 和 __ex_table 两个段的帮助尝试修复异常。这种修复异常并不是建立地址映射关系,而是修改do_page_fault()返回地址。memcpy()由于没有创建这样的段,所以memcpy()无法做到这点。 在使能 CONFIG_ARM64_SW_TTBR0_PAN 或者 CONFIG_ARM64_PAN (硬件支持的情况下才有效)的时候,即使能禁止内核态访问用户态PGD,原理是通过修改TTBR0为一个全0的一级页表(和swap_page_dir一样,通过链接脚本分配占位)。此时我们只能使用copy_{to,from}_user()这种接口,直接使用memcpy()是不行的。 号外:用memory copy取代copy_{to,from}_user()是绝对禁止的,没有地址检查(access_ok)会引起安全问题

醒1

天大地大妈咪最大 提交于 2019-12-04 22:03:30
1. go 指针 指针使用流程: 定义指针变量。 为指针变量赋值。 访问指针变量中指向地址的值。 在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。 实例 package main import "fmt" func main() { var a int= 20 /* 声明实际变量 */ var ip *int /* 声明指针变量 */ ip = &a /* 指针变量的存储地址 */ fmt.Printf("a 变量的地址是: %x\n", &a ) /* 指针变量的存储地址 */ fmt.Printf("ip 变量储存的指针地址: %x\n", ip ) /* 使用指针访问值 */ fmt.Printf("*ip 变量的值: %d\n", *ip ) } 以上实例执行输出结果为: a 变量的地址是: 20818a220 ip 变量储存的指针地址: 20818a220 *ip 变量的值: 202. 机器 分类回归算法 3. 卷积 单神经 损失 误差 sigmod4. 架构 模型组合,组件拼接, 微服务独立运行,队列触发机制5. oos object Storage Service 对象存储    追加,断点,分片, 对象key MD5 校验6. 思 深解彼需7. 情中生物 来源: https://www.cnblogs.com/chaowolf/p/11886501

一个有意思的数组访问越界问题

天大地大妈咪最大 提交于 2019-12-04 21:17:07
首先,分析一下这段代码的输出结果: #include <iostream> using namespace std; int main(int argc, char* argv[]){ int i = 0; int arr[3] = {0}; for(; i <= 3; i++){ arr[i] = 0; cout << "Hello \n"; } return 0; } 注意 :可以明显的看出arr数组的访问是越界的,猜测编译时可能会报错, 实际结果,编译成功,无限循环输出 。 这是和函数调用的栈结构有关的。函数体内的局部变量存在栈上,且是连续压栈。在Linux进程的内存布局中,栈区在高地址空间,从高向低增长。所以,i和数组的数据从高位地址到低位地址依次是:i, a[2], a[1], a[0]。a[3]通过寻址公式,计算得到地址正好是i的存储地址,即i和a[3]指向的是同一地址,任一个的改变都会联动到另一个,所以a[3]=0,就相当于i=0.因此代码陷入了无限循环。 来源: https://www.cnblogs.com/khche/p/11883523.html

Segment fault 常见原因

时间秒杀一切 提交于 2019-12-04 21:12:37
[ https://blog.csdn.net/qq_22238021/article/details/79872978 ] 本质原因在于:程序访问了非法的地址 1.引用空指针 2.野指针 3.访问越界 造成的原因有多种: 主观原因: 1.新申请指针忘记赋NULL,也忘记分配空间,直接使用造成非法访问。 2.为指针赋值时,地址经过计算而来。计算过程有问题,导致赋值的地址不正确, 比如地址经过计算涉及到类型转换之类操作,很容易因为类型转换造成截断。 客观原因: 3.保存指针的空间被修改,比如你结构体中的一个成员是指针变量,它前面一个成员也是指针变量, 当前面的成员访问越界时,修改了后面成员的值,即前面操作踩了后面的空间,或者被其他程序踩到。 当再引用后面的指针时,就会发生段错误。或者free后面的指针时也会发生错误。 避免方法: 主观方面: 1.新申请指针赋NULL。 2.malloc和free一定要成对使用。 3.地址由计算得来时一定要小心处理,避免计算原因造成错误的地址。 客观方面: 4.怀疑发生段错误原因是指针地址被踩时,移动该成员到前面一点的位置,避免被踩,验证能否解决问题。 来源: https://www.cnblogs.com/How-Come/p/11884345.html

linux学习(一)认识阿里云

六月ゝ 毕业季﹏ 提交于 2019-12-04 19:58:55
一、 简介   阿里云,全球领先的云计算服务平台,阿里巴巴集团旗下公司。致力于打造公共、开放的云计算服务平台。提供云服务器ECS、关系型数据库服务RDS、开放存储服务OSS、内容分发网络CDN、对象存储OSS等云计算服务和解决方案。   在学习linux命令之前,先了解一下阿里云,作为我们今后部署项目项目的工具(PS:双11打折还是很实惠的,可以搞一台来玩~) 二、 实操   拥有一台阿里云服务器以后,我们可以部署一个本地开发好的项目到服务器上,并实现远程调用,模拟真实环境。   购买阿里云和基础配置就不再详细描述,直接上手干货~(由于版面篇幅限制,只列出具体步骤,详细操作图解请参考相关博文) 1、购买阿里云以后,先设置安全组   参考地址: 戳这里~ 2、Linux下搭建FTP服务器(开启FTP文件传输功能)   参考地址: 戳这里~ 3、本地通过flashfxp工具传送文件至服务器   参考地址: 戳这里~ 4、安装JDK   参考地址: 戳这里~ 5、启动ZK   参考地址: 戳这里~ 6、杀进程   参考地址: 戳这里~ 7、修改hosts(dubbo默认注册用的是内网ip,消费不到,改host让服务器端的生产者注册到公网ip上,就能实现远程调用了)   参考地址: 戳这里~ 来源: https://www.cnblogs.com/riches/p/11829643

韦东山嵌入式Linux学习笔记05--存储管理器

。_饼干妹妹 提交于 2019-12-04 15:55:41
问题 :   为什么两个DDR可以合在一起变成32位? SDRAM:    原理图如下:    jz2440 v3开发板上面用的内存芯片为钰创科技公司生产的EM63A165TS,一片内存大小为32MB大小,一共有两块,共64MB的大小. SDRAM接的是BANK 6,所以他的起始地址是 0x30000000. SDRAM的基本寻址关系 SDRAM的存储结构逻辑如上图, SDRAM内部是一个存储阵列,阵列就如同表格一样,将数据"填进去".和表格的检索原理一样,先指定一个行,再指定一个列,两点确定一个坐标,就可以准确地找到所需要的 单元格,这就是SDRAM寻址的基本原理.这个单元被称为存储单元,这个表格(存储阵列)就是逻辑Bank(就是L-Bank).SDRAM一般含有四个L-Bank. 对SDRAM的访问可以分为如下几个步骤:   1.CPU发出的片选信号nSCS0有效,它选中SDRAM芯片.   2.SDRAM有四个L-Bank,需要两根地址线来选中其中的一个,根据开发板的设计, 选用了ADDR24和ADDR25作为L-Bank的选择信号.   3.对被选中的芯片进行统一的行/列(存储单元)寻址.     根据SDRAM芯片的列地址线数目设置CPU的相关寄存器后,CPU就会从32位的自动分出L-Bank选择信号, 行地址信号,列地址信号,然后发出行地址信号,列地址信号. L

王爽汇编实验(五)

狂风中的少年 提交于 2019-12-04 15:53:28
将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。 assume cs:code,ds:data,ss:stack data segment dw 0123h,0456h,0789h,0abch,0def,0fedh,0cbah,0987h data ends stack segment dw 0,0,0,0,0,0,0,0 stack ends code segment start:mov ax,stack mov ss,ax mov sp,16 mov ax,data mov ds,ax push ds:[0] push ds:[2] pop ds:[2] pop ds:[0] mov ax,4c00h int 21h code ends end start ① cpu执行程序,程序返回前,data段中的数据为多少? 不必执行,将前两个data段的值相反 ② cpu执行程序,程序返回前,cs=076C、ss=076B、ds=076A、。 ③ 设程序加载后,code段的段地址为X,则data段的段地址为X-20H,stack段的段地址X-10H。 (2)将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题 ① cpu执行程序,程序返回前,data段中的数据为多少? 相反 ② cpu执行程序,程序返回前,cs=076C、ss=076B、ds=076A、。 ③