首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

动态内容的缓存技术 CSI,SSI,ESI

目前开放的实现 Cache 的技术主要有 CSI,SSI,ESI 之类几种。在一个动态网页中,内容不断更新和变化,但这并不意味不能缓存,其实还是有 90% 的内容都可以做到 CDN 中的。...所以通过 CDN 之类的 Cache 时,还是会失效,不灵活. 3、Edge Side Includes (ESI): Edge Side Includes(ESI) 和Server Side Includes...ESI(Edge Side Include)通过使用简单的标记语言来对那些可以加速和不能加速的网页中的内容片断进行描述,每个网页都被划分成不同的小部分分别赋予不同的缓存控制 策略,使Cache服务器可以根据这些策略在将完整的网页发送给用户之前将不同的小部分动态地组合在一起...优点: ESI更适合用于缓存服务器上,缓存整个页面或页面片段,因此ESI特别适合用于缓存,CDN 的第一名的老大,Akamai 全力支持协议。对于布置和 Cache 都是最友好的。

3.1K451

Linux系统调用原理

二、进入系统调用 本文主要介绍的是 x86 CPU 进入系统调用的方式 Linux 提供了 int 0x80 中断来让用户程序进入 系统调用,我们来看看 Linux 对 int 0x80 中断的处理初始化过程...Linux 使用寄存器来传递参数,参数与寄存器的关系如下: 第1个参数放置在 ebx 寄存器。 第2个参数放置在 ecx 寄存器。 第3个参数放置在 edx 寄存器。...第4个参数放置在 esi 寄存器。 第5个参数放置在 edi 寄存器。 第6个参数放置在 ebp 寄存器。...而 Linux 进入中断处理程序时,会把这些寄存器的值保存到内核栈中,这样 系统调用 就能通过内核栈来获取到参数。...进入中断处理上下文时,会把 ebx、ecx、edx、esi、edi、ebp 寄存器的值保存到内核栈中,那么 系统调用 就可以从内核栈获取到参数的值。

4.1K30

5.5 汇编语言:函数调用约定

栈结构在内存中占用一段连续存储空间,通过esp与ebp这两个栈指针寄存器来保存当前栈起始地址与结束地址,每4个字节保存一个数据。...一般情况下在Win32环境默认遵循的就是STDCALL,而在Win64环境下使用的则是FastCALL,在Linux系统上则遵循SystemV的约定,这里我整理了他们之间的异同点.CDECL:C/C++...前两个参数放入(ECX, EDX),剩下的参数压栈保存.FASTCALL64:被调方平栈,不定参数的函数无法使用,前四个参数放入(RCX, RDX, R8, R9),剩下的参数压栈保存.System V:类Linux...但是,由于FASTCALL约定使用的寄存器数量比CDECL和STDCALL约定多,因此它也有一些限制,例如不支持使用浮点数等实现中需要使用多个寄存器的数据类型。...FASTCALL效率最高,其他两种调用方式都是通过栈传递参数,唯独_fastcall可以利用寄存器传递参数,一般前两个或前四个参数用寄存器传递,其余参数传递则转换为栈传递,此约定不定参数函数无法使用。

22820

Linux下开发stm32 ③ | 寄存器工程开发

先来回顾一下前两篇 Linux下开发stm32(一) | 使用gcc-arm-none-eabi工具链编译 Linux下开发stm32(二) | 使用openocd下载与调试 前两篇我们介绍了如何创建一个空的裸机工程...main文件),并编译工程生成elf文件,然后将其转为bin格式或hex格式,使用openocd下载,最后编写了一个makefile雏形,并成功点亮了一个LED~ 但是这个LED我们是通过指针直接操作寄存器地址来完成的...,接下来,我们在此基础上,引入stm32头文件,其中包含了寄存器的宏定义,也就是使用寄存器进行开发~ 1.创建寄存器工程 首先将上一节中创建的裸机工程00-template-reg复制一份出来,改名为01...0x40010c00+0x0c) &= ~(1<<0); GPIOB->ODR &= ~(1<<0); while(1); } void SystemInit(void) { } 至此,寄存器工程创建完毕...,接下来开始编译~ 2.编译&下载寄存器工程 编译寄存器工程的重点就在于C头文件和C源文件,启动文件的编译和链接都和之前一样。

1.2K30

5.5 汇编语言:函数调用约定

栈结构在内存中占用一段连续存储空间,通过esp与ebp这两个栈指针寄存器来保存当前栈起始地址与结束地址,每4个字节保存一个数据。...一般情况下在Win32环境默认遵循的就是STDCALL,而在Win64环境下使用的则是FastCALL,在Linux系统上则遵循SystemV的约定,这里我整理了他们之间的异同点....System V:类Linux系统默认约定,前八个参数放入(RDI,RSI, RDX, RCX, R8, R9),剩下的参数压栈保存....但是,由于FASTCALL约定使用的寄存器数量比CDECL和STDCALL约定多,因此它也有一些限制,例如不支持使用浮点数等实现中需要使用多个寄存器的数据类型。...FASTCALL效率最高,其他两种调用方式都是通过栈传递参数,唯独_fastcall可以利用寄存器传递参数,一般前两个或前四个参数用寄存器传递,其余参数传递则转换为栈传递,此约定不定参数函数无法使用。

22120

使用Varnish+ESI实现静态页面的局部缓存

3、Edge Side Includes (ESI):         Edge Side Includes(ESI) 和Server Side Includes(SSI)和功能类似。...ESI可以直接通过URI包含远程服务器文件,ESI更适合用于缓存服务器上,缓存整个页面或页面片段,因此ESI特别适合用于缓存。像当下流行的缓存服务器Varnish对此有所支持。    ...使用Varnish及其对ESI的支持很容易实现对以上两种需求的较好支持:    1、与用户个性化无关的信息:直接由Varnish+ESI就可以实现。...2、与用户个性化信息相关:对于整个页面的缓存策略仍然使用Varnish+ESI方式。...简单梳理了一下基于Varnish+ESI实现静态页面缓存的思路,有空再写代码具体测试一下。     Varnish作为一个高性能的缓存服务器,值得好好研究一下。

64921

【Windows 逆向】OD 调试器工具 ( 分析 OD 硬件断点处的关键代码 | 添加硬件断点 | 关键代码 | MOV 指令 | EAX 寄存器值分析 | 使用命令查看 esi+0cc 地址 )

文章目录 一、添加硬件断点 二、关键代码 三、MOV 汇编指令格式 四、EAX 寄存器值分析 五、使用命令查看 esi+0cc 地址 一、添加硬件断点 ---- 在上一篇博客中 , 在子弹个数数据内存地址...: [esi+000000CC] 是 基址变址寻址 , 取出 esi 寄存器的值 05A59478 , 与 CC 相加 , 得到一个地址 05A59544 , 这个地址就是子弹数据的地址 , 读取该地址中的值..., 写入到 EAX 寄存器中 ; 从上述汇编代码中 , 可以知道 , 子弹数据的动态地址 05A59544 , 是由 基址 05A59478 加上立即数 CC 得来的 ; 四、EAX 寄存器值分析 -...--- 其中 EAX 寄存器的值是 5A , 该值 5A 是在 esi+000000CC 地址中存储的数据 ; 五、使用命令查看 esi+0cc 地址 ---- 查看 esi+000000CC 地址的值..., 在 OD 中的 Command 中执行 dd esi+0cc 指令 , 跳转到了 07BB2D8C 地址处 , 改地址存储的值就是 5A , 也就是 90 , 正好是当前子弹数量 ;

59300

汇编语言基础教程-寻址方式

,以上指令就变成了类似以下形式 mov eax,[00404011];地址外面加一个方括号,表示取这个地址的内容 4寄存器间接寻址 操作数的地址放在寄存器中 如: mov ESI,00404011H mov...EAX,[ESI] 32位CPU中EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP能用作间接寻址 5寄存器相对寻址 如: mov ESI,00404011H mov EAX,[ESI+4...] 6基址变址寻址 如: mov ESI,00404011H mov EBX,4 mov EAX,[ESI+EBX] 7基址变址相对寻址 如: mov ESI,00404011H mov EBX,4 mov...EAX,[ESI+EBX+4] 8基址变址比例相对寻址 如: mov ESI,00404011H mov EBX,4 mov EAX,[ESI+EBX*2+4] 9*段超越 内存操作数的地址由两个部分指定...寻址方式中确定操作数的有效地址后,还要依靠段寄存器一起来确定操作数的内存地址 默认情况下内存操作指令在DS段中 如果使用了ESP和EBP来寻址,那么使用的是SS段寄存器 如: mov eax,[ebp+

37420

汇编角度看函数堆栈调用

= 0; ret = sum(a,b); printf("ret = %d\n",ret); return 0; } 实验环境:vc++ 6.0 和 Win10操作系统 注意:linux...mov ebp,esp 00401023 sub esp,44h 00401026 push ebx 00401027 push esi...[push 寄存器] 功能:将一个寄存器中的数据入栈。包含两个动作:将寄存器中的数据入栈,栈顶指针向上(低地址)偏移。 [pop 寄存器] 功能:出栈,以一个寄存器接受出栈的数据。...ecx寄存器中的值是重复的次数。 stos指令的作用是将eax寄存器中的值拷贝到[edi]指向的地址。 2.常用的寄存器。 eax:累加寄存器,它是许多加法乘法指令的缺省寄存器。...esi/edi:"分别叫做源/目标索引寄存器"(source/destination index),因为在很多字符串操作指令中,DS:ESI指向源串,而ES:EDI指向目标串。

58820

Kokodayo-Wp

0x11进行扩展,把他变大,但是由于该题mprotect时,第三个参数prot为5,所以只有rx,也就是读取和执行权限,没有写入的权限(这里不懂的可以搜一下Linux下权限相关的文章看看),所以,为了后续能把可写的内存变大...,需要先对这片内存赋予可写的权限,这题直接使用mprotect扩展即可,mprotect所对应的系统调用号可以在/usr/include/x86_64-linux-gnu/asm/unistd_64.h...这里还有一个小知识,也是看到了其他师傅的文章之后才知道的,在gcc编译时,当call一个系统函数时,通常还会call一个寄存器,这题call我们写入的shellcode时,call了rdx寄存器,所以rdx...在膜拜大佬的WP的同时,我也学习到了一个对这题至关重要的知识:当执行完syscall之后,程序会从内核态快速返回用户态,rcx的值会被置为rip的值,这也导致了第四个参数被存放在了r10寄存器中。...那么当我们赋予了内存写入的权限之后,来看看各个寄存器的值,rcx的值为rip,rax此时为0,那么我们如果要在该内存写入,只需要写入read的shellcode: mov esi,ecx xor edi

29420

无名寄存器

在计算机里面也有寄存器,计算机中的寄存器是看得见,摸得着的实体,寄存器中存储需要经常访问的一些数据。...而vim中也有寄存器的概念,vim中的寄存器是一个虚拟的概念,更像是一块专门用来存储数据的内存缓冲区。在使用vim的过程中离不开寄存器,而且我们很早就用到了寄存器,只是没有发现罢了。...为了解决这个问题,一个思路就是使用有名寄存器。 vim中提供了由a到z的有名寄存器,可以在使用operator 的操作前面指定需要使用的寄存器,引用一个寄存器可以使用 " + 寄存器名的格式。...黑洞寄存器 前面说到 dd会将被删除内容放入到无名寄存器中,如果这段内容我确实不想要了,也不想它占用寄存器,有没有什么办法彻底删除呢,答案是使用黑洞寄存器,顾名思义,放入该寄存器中的内容都被吸走丢失了,...看不出什么区别,那么我们可以试试使用 :reg 命令来查看有名寄存器和黑洞寄存器的值,我们发现黑洞寄存器的值永远为空,而有名寄存器此时多了一条记录。

83110

Linux (x86) Exploit 开发系列教程之八 绕过 ASLR -- 第三部分

这个技巧类似于 GOT 覆盖,但是这里不会覆盖特定 Libc 函数的 GOT 条目,而是将它的值复制到寄存器中,并将偏移差加到寄存器的内容。因此,寄存器就含有所需的 Libc 函数地址。...例如,GOT[getuid]包含getuid的函数地址,将其复制到寄存器。两个 Libc 函数(execve和getuid)的偏移差加到寄存器的内容。现在跳到寄存器的值就调用了execve。...现在我们需要寻找一个零件,它将这个值0xaaa99b40复制到 EBX 寄存器中。...因此我们需要找到一个零件,它将偏移差复制到 EAX 寄存器中。 $ gdb -q vuln ......使用 ROP 的 GOT 解引用 零件 1:首先我们需要一个零件,它将偏移差加到GOT[getuid],并且它的结果需要加载到寄存器中。所以让我们寻找一个add零件,它将结果复制到寄存器中。

1.8K40

【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( CE 找出子弹数据内存地址是临时地址 | 挖掘真实的子弹数据内存地址 )

寄存器的值 加上 000000CC 十六进制数值 ; esi+000000CC 2、查看 0x21160114 地址是如何计算出来的 ( ESI 寄存器的值 0x21160048 + 000000CC...立即数 相加得到 ) 双击第一条指令 16B2C0ED - mov eax,[esi+000000CC] , 得到如下数据 , 其中得到 EAX 和 ESI 两个寄存器值 : EAX=00000061...ESI=21160048 其中 ESI 寄存器的值 ( 0x21160048 ) + 000000CC 立即数 , 计算结果如下 : \rm 0x21160048 + 0x000000CC = 0x21160114...0x21160114 地址就是子弹数据的真实地址 , 这个地址是 ESI 寄存器的值 加上 0xCC 立即数 , 得到的地址 ; 具体的数据如下 : EAX=00000061 EBX=0799BB70...; 3、查询指针基址 21160048 ESI 寄存器 中有个值 0x21160048 , 这个值不知道是怎么来的 , 这里就需要在整个内存中搜索该值 , 查找哪些内存地址中保存了来值 ; 进而查找

1.5K10

5.10 汇编语言:汇编过程与结构

栈是由CPU管理的线性内存数组,它使用两个寄存器(SS和ESP)来保存栈的状态,SS寄存器存放段选择符,而ESP寄存器的值通常是指向特定位置的一个32位偏移值,我们很少需要直接操作ESP寄存器,相反的ESP...CPU提供了两个特殊的寄存器用于标识位于系统栈顶端的栈帧。 ESP 栈指针寄存器:栈指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。...EBP 基址指针寄存器:基址指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。...使用lea esi, [ebp - 30]指令将MyString的基地址加载到esi寄存器中。该指令偏移ebp-30是因为ebp-4是MakeArray函数的第一个参数的位置,因此需要增加四个字节。...一种方式是使用lea指令将数组的地址加载到esi寄存器中,然后使用mov dword ptr ds:[esi],10等指令将相应的常数值存储到数组中。

18020
领券