地址

常用基本的格式化字符串参数介绍

你。 提交于 2019-12-15 19:47:40
常用基本的格式化字符串参数介绍: %c:输出字符,配上%n可用于向指定地址写数据。 %d:输出十进制整数,配上%n可用于向指定地址写数据。 %x:输出16进制数据,如%i x 表 示 要 泄 漏 偏 移 i 处 4 字 节 长 的 16 进 制 数 据 , x表示要泄漏偏移i处4字节长的16进制数据,%i x 表 示 要 泄 漏 偏 移 i 处 4 字 节 长 的 1 6 进 制 数 据 , lx表示要泄漏偏移i处8字节长的16进制数据,32bit和64bit环境下一样。 %p:输出16进制数据,与%x基本一样,只是附加了前缀0x,在32bit下输出4字节,在64bit下输出8字节,可通过输出字节的长度来判断目标环境是32bit还是64bit。 %s:输出的内容是字符串,即将偏移处指针指向的字符串输出,如%i$s表示输出偏移i处地址所指向的字符串,在32bit和64bit环境下一样,可用于读取GOT表等信息。 %n:将%n之前printf已经打印的字符个数赋值给偏移处指针所指向的地址位置,如%100×10 n 表 示 将 0 x 64 写 入 偏 移 10 处 保 存 的 指 针 所 指 向 的 地 址 ( 4 字 节 ) , 而 n表示将0x64写入偏移10处保存的指针所指向的地址(4字节),而% n 表 示 将 0 x 6 4 写 入 偏 移 1 0 处 保 存 的 指 针 所

C++ *和&

允我心安 提交于 2019-12-15 12:36:37
概述 在c++中,当申明变量int p 的时,表示p是一个储存地址的变量;比如int p=0,表示p指向地址为00000000的地址单元。当申明指针p之后,再用*p表示p指向的储存空间的内容;&表示取变量的地址 示例 #include <iostream> using namespace std; int main() { int a = 123; // &a表示a在内存中的地址,也就是123在内存中的地址 cout << "a: " << a << endl << "a's address:" << &a << endl; // 此时p是一个指针,指向a所在的位置 int *p = &a; cout << "p: " << p << endl; // 声明p之后,在p之前添加*表示p指向内存的值 cout << "p's value: " << *p << endl; // 同时p也是 一个变量,在内存中也有一个地址储存它,但其地址不是a的地址 cout << "p's address: " << &p << endl; // 试试*&组合使用是什么效果 cout << "*&p: " << *&p << endl; // &p是一个内存地址,*&p表示&p指向地址内存空间的值,在这里表示a的地址 cout << "**&p: " << **&p << endl; //

Pwnable之passcode

…衆ロ難τιáo~ 提交于 2019-12-15 12:31:40
pwnable第一道求助题 前几天开始做pwnable的练习题,前四题比较容易,到了第五题,本机调试可以获取flag,但是,在远程主机上却失败了。 原因:本机某地址可写入而远程主机该地址不可写导致程序异常。 漏洞:源代码passcode.c的第九行,scanf的参数passcode1未初始化且无&符号,导致实际读入的数字写入到了passcode1的值所代表的地址中,而不是读取到passcode1,因此,导致任意地址写入。 pwn思路: 本来,通过本机调试是可以覆盖passcode1和passcode2是两者通过strcmp的验证,从而输入flag。 但这种方法不适合远程服务器环境,passcode1中的未初始化地址空间是不可写的。所以,只能考虑其他办法,由于定时思维,一时想不到如何转变思路,只能baidu搜索解题思路,网络上资料指出passcode1的值可被覆盖为got表中的地址,因为got表是可写的,又因为程序在读入passcode1后,将调用printf和fflush函数,因此,可以选择将passcode1的值覆盖为got表中printf或者fflush函数地址,然后通过scanf函数将该地址的值赋值为system函数的上一条指令地址(保存'/bin/sh'字符串指令),然后,在程序调用printf或者fflush函数时,将直接跳转调用system函数输入flag! 来源:

Python学习之赋值、浅拷贝和深拷贝

梦想的初衷 提交于 2019-12-15 09:14:34
拷贝大家都比较熟悉,就是复制,其实又和传统的复制有一定的区别 一、赋值 赋值就是把一个对象的引用(在内存中的存储地址即存储对象的内存地址)和变量进行关联起来。对象的地址可通过函数id查询及id(obj),如a=b,其实就是把a的内存地址和变量b关联起来。 a=['a',3,'c','b',[2,'b']] b=a #a的内存地址与变量b关联 print(a,b) print(id(a),id(b)) """a和b的地址是一样的,所以a和b两个变量中任何一个发生改变另外一个也会跟着改变因为他们俩的地址是一样的""" a[1]='d' print(a,b) b[4][0]='a' print(a,b) a.append('e') print(a,b) print(id(a),id(b)) """小结:1、一旦对象生成后那么它的存储地址就会固定了,所以再怎么改变变量的值,它的存储地址不会改变 2、经过赋值后两个变量的地址一样,类似于指针,所以改变其中任何一个另外一个会跟着改变""" 执行结果: ['a', 3, 'c', 'b', [2, 'b']] ['a', 3, 'c', 'b', [2, 'b']] 1575497342144 1575497342144 ['a', 'd', 'c', 'b', [2, 'b']] ['a', 'd', 'c', 'b', [2, 'b']] [

关于C++指针的deIete理解

五迷三道 提交于 2019-12-14 16:09:09
关于c++指针的deIete理解 附∶①函数内的指针是局部变量,由编译器分配栈区空间(由cout<<&p可知p指针有空间地址,占用size字节长度由类型决定),函数结束时自动释放空间。 ②用new运算符等操作分配给指针的堆区空间(如:int*p=new int [n])只能人为分配(new等),并用指针协助分配(只能人为,只能用指针),并且不会自动释放,需要用deIete运算符等人为释放空间。 ③已定义的变量名(如int n中的n)对应的地址再次编译都会改变(包括指针变量p地址及指针对应的堆区空间地址都如此,之所以对应的堆区空间地址也改变是因为再次编译后指针p的空间地址改变,编译到new运算符处时又给p赋一个新的堆区地址),可运行后输出地址后发现(这与内存泄露有关) 正文开始: 为什么delete []p后要给指针p赋成NULL? 首先我们要知道deIete []p的原理:delete的作用是更换p空间中存的地址值(把对应的堆区地址值换为另一个地址(栈区地址?),以此来切断两个空间的联系,并非删去两个空间,之后,p中仍有地址,变成了野指针,会对接下来写的代码有危害,而赋NULL之后,p中地址值更换为0,这样就不会对下面代码有影响了。 所以delete后要赋NULL 来源: CSDN 作者: 潇影 链接: https://blog.csdn.net/qq_45644751

STM32学习笔记(一)---基础知识

让人想犯罪 __ 提交于 2019-12-14 01:30:00
STM32学习笔记(一)—基础知识 知识点 1.所有芯片的引脚顺序都是逆序排列的 2.芯片主要由内核和片上外设组成。 3. volatile :在 C 语言中该关键字用于修饰易变的变量,要求编译器不要优化。 存储器映射 存储器本身不具有地址,给存储器分配地址的过程就称为 存储器映射 。 给存储器再分配一个地址的过程就叫做 存储器重映射 。 寄存器映射 设计片上外设时,以四个字节为一个单元,共32bit,每个单元对应不同的功能,我们控制这些单元就可以驱动外设工作。 根据每个单元的功能不同,以功能为名给这个内存单元起别名,这个别名就是寄存器。 给已经分配好地址的有特定功能的内存单元取别名的过程就叫做 寄存器映射 例子: GPIOF端口的输出数据寄存器ODR的内存地址为0x4002 1414(ODR寄存器32位,低16位有效,控制16个IO端口输出高低电平) 通过绝对地址访问内存单元: * ( unsigned int * ) 0x40021414 = 0xFFFF ; 通过寄存器方式访问内存单元 # define GPIOF_BASE 0x40021400 # define GPIOF_ODR (unsigned int *)(0x40021400 + 0x14) * GPIOF_ODR = 0xFFFF ; c语言封装寄存器 /* 外设基地址 */ # define PERIPH

计算机网络 - 练习(一百九十三)

假装没事ソ 提交于 2019-12-13 22:43:12
计算机网络 练习(一百九十三) 内存按字节编址,地址从 90000H 到 CFFFFH,若用存储容量为 16K×8bit 的存储器芯片构成该内存,至少需要()片。 A. 2 B. 4 C. 8 D. 16 ---------------------------------------- 答案 : D 解析 : 关于如何计算十六进制,其实把它看成十进制计算一样就可以。 CFFFF - 90000 + 1= (C-9)FFFF +1 = 3FFFF +1 = 262144 即: 2 18 B = 2 8 K B 2^{18} B =2^8KB 2 1 8 B = 2 8 K B 【这里1KB = 2 10 2^{10} 2 1 0 B的意思】 若存储芯片的容量为 16 K ∗ 8 b i t = 16 K B 16K*8bit=16KB 1 6 K ∗ 8 b i t = 1 6 K B ,则需要 2 8 K 16 K = 16 \frac{2^8K}{16K}=16 1 6 K 2 8 K ​ = 1 6 个芯片组成该内存。 32 位的 IP 地址可以划分为网络号和主机号两部分。以下地址中,0.0.0.0 不能作为目标地址,可以作为源地址使用,表示本网络上的本主机。网络上 127 的非全 0 和全 1 的 IP 地址,用作本地软件回环测试之用(测试本机的 TCP/IP

一个项目设置两个git地址,并最终实现一次性同时推送到到两个git地址上的方法总结

夙愿已清 提交于 2019-12-13 18:48:07
基于多处备份的想法,确保自己的代码不丢失。或者是代码的git本身搭建在自己公司的服务上,而你为了保险起见,想把项目同时放在码云或者github上面。 这样,你就需要让一个项目同时备份在两个云端,这样即使公司的服务器上面的代码丢了,或者公司服务器把你的名单除名了,你仍然在码云或者github上面存有你的代码。 那么,怎么实现这个想法呢?请看如下步骤: 前提: 1、假设你现在在gitLab上面新建了一个git地址A(里面已经有项目内容) git@git.taotiangou.net:teamemory/myh5.git 2、假设你同时在码云上面同样新建了一个git地址B (可能是一个新建的空白项目内容地址) git@gitee.com:teamemory/myH5.git 现在想实现我在git地址A项目中,提交代码的同时,可同时提交到git地址B 。 方法1:(需要push两次,不符合题目要求,但是优点是可以pull两次) 步骤1: 在git A 项目中添加另一个git B远程的地址 git remote add origin2 git@gitee.com:teamemory/myH5.git // origin2可以自定义 步骤2: 先拉取git B 该地址上的数据 git pull origin2 master --allow-unrelated-histories (-

教你修改电脑mac地址图解教程

流过昼夜 提交于 2019-12-13 11:23:31
mac地址又称为硬件地址或者物理地址,指的是局域网中的每一台计算机中固化在适配器的ROM中的地址,第二层数据链路层则负责 MAC地址,一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的地址。MAC地址由48位二进制(6个字节)组成,采用十六进制表示。简单的说就是你自己电脑的网卡的身份证。 修改mac地址教程: 先到电脑桌面,右键点击我的电脑,点击【属性】,如下图所示。 然后点击【设备管理器】-【网卡适配器】-然后选中你的网卡,右键点击属性,如下图所示。 接着点击【高级】-【网络地址】-选【值】,填入一个新的网卡地址,这个地址必须是12位的,最后点击确定mac地址就修改完成了,如下图所示,我修改的新的mac地址是 0A-2B-3C-4D-5E-6F。 注意:MAC地址使用十六进制数来表示的,即0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F这是个数来表示的。 本文地址: https://www.linuxprobe.com/mac-computer-update.html 来源: CSDN 作者: wuxiangping2017 链接: https://blog.csdn.net/u014389734/article/details/103521777

详解交换机对不同类型数据帧的转发过程

爱⌒轻易说出口 提交于 2019-12-12 04:09:32
搭建实验拓扑图,这里以cisco设备为例 地址规划为172.16.0.0/24网段 名词解释: a.MAC地址表:是一张目的MAC地址及其所连接的出接口的地址对应表。记录老化时间默认为300s。 b.洪范行为:是交换机对未知单播帧的处理方式, 是将此帧向所有端口(除收到该数据帧的端口)进行转发。 c.广播: 是指交换将帧目的MAC 为FF:FF:FF:FF:FF:FF的数据帧转发到除收到该帧之外的所有端口的动作。 d.组播地址表:是一张VLAN ID+组播ip+出端口的地址对应表。组播地址表对应的出口端口不是一个,而是一组端口列表。 一.单播 1.未知单播 现在使用PC0去ping PC1,交换机接收到数据帧,由于开机后未进行任何配置MAC地址表为空: ①交换机将帧中 源MAC 和 进入接口 记录到MAC地址表中 ②再基于MAC地址表中自上而下查看 目标MAC 的 出接口 ③因未能查询到目标MAC和出接口的对应关系,则进行洪范 ④当PC1回复PC0时,交换机同样记录下帧中 源MAC 和 进入接口 ⑤查询MAC地址表 目标MAC ,基于 出接口 转发 ⑥交换机MAC地址表的每条记录达到其老化时间还未刷新,删除该条目。 2.已知单播 注:上一个实验PC0 ping PC1后MAC地址表已存在两者MAC地址和接口的对应关系 ①交换机将帧中 源MAC 和 进入接口 记录到MAC地址表中