博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Web性能实践日志》一第1章 WebPageTest内部原理1.1 函数拦截
阅读量:6262 次
发布时间:2019-06-22

本文共 815 字,大约阅读时间需要 2 分钟。

本节书摘来自异步社区《Web性能实践日志》一书中的第1章,第1.1节,作者【加拿大】Stoyan Stefanov,更多章节内容可以访问云栖社区“异步社区”公众号查看

第1章 WebPageTest内部原理

Web性能实践日志

作者:Patrick Meenan

我想借着今年的这次机会向大家介绍一下WebPageTest是如何从浏览器获取性能数据的。虽然它与Windows下一些工具的技术原理大同小异,但本章介绍的内容并不能代表这些工具的工作原理。

首先,请看图1-1,这张图可以帮助我们从浏览器端理解Windows的网络堆栈。

c7d9cc6b25d7acfa10845e37131e3456b784b737

不管是什么浏览器,只要运行在Windows下,体系结构几乎就如图1-1描述的一样,所有的传输都是通过Windows Socket API完成的,即Windows下几乎所有应用程序都使用TCP/IP协议,如图1-1描述。

1.1 函数拦截

WebPageTest工作的关键是能够拦截任意函数调用和检查,甚至可以中途改变请求和响应(也可以选择完全不传输)。很幸运,有人已经做了绝大部分重要的工作,并且提供了一个非常优秀的开源库(),有了这个库,你就不需要关注实现的细节了,但你还是可以了解一下工作原理。

  • 在内存中找到目标函数(如果从dll导出会比较零碎)。
  • 把函数的前几个字节复制下来(确保x86指令完好无损)。
  • 使用跳转指令(jmp)重写函数入口让它指向到一个新函数。
  • 提供一个替代函数,这个函数包含刚才从源函数复制下来的字节以及用于指向剩余代码的跳转指令(jmp)。

这是一件非常细致的事情,稍不留神就会出岔子,但是使用定义良好的函数(如全部的Windows API),你就可以轻松地拦截任何你想拦截的内容。

这么做有一个缺点,就是你只能把调用重定向到运行在同一个进程下的代码,如果这些代码是你自己写的,那就没什么问题,但如果你要监测那些不受自己控制的软件的话就不太好了,反而可能还会带来一些麻烦。

转载地址:http://xyupa.baihongyu.com/

你可能感兴趣的文章
[原]【实例化需求】1.FitNesse工具应用简介
查看>>
java中的import和package机制
查看>>
统计、案例-深入理解Oracle索引(10):索引列字符类型统计信息的32位限制-by小雨...
查看>>
ubuntu常用命令精选
查看>>
UML类图
查看>>
企业上市上市央企大面积亏损折射出啥弊端?
查看>>
DXP_protel2004_原理图设计基础_集成运放原理图设计学习
查看>>
powershell--uninstall webapplication
查看>>
ubuntu配置vsftpd记录
查看>>
日期控件Android 自定义日历控件
查看>>
Java多线程编程:变量共享分析(Thread)
查看>>
word如何自动生成目录
查看>>
疯狂暑期学习计划~~~
查看>>
Mysql查询大表出现的一个错误
查看>>
Scala 中的foreach和map方法比较
查看>>
使用OWIN作为WebAPI的宿主
查看>>
阿里巴巴、腾讯、百度的面试问题笔知识汇总(两)
查看>>
如果他们在未来的几年内技术水平没有突破性的提升,或者缺乏一点灵性和品味,那么可能在未来很长一段时间内,他们都会保持这个薪资水平(转)...
查看>>
修改setup.py的源
查看>>
SQL Server 常用高级语法笔记
查看>>