当前位置:首页 > 实用技巧 >

webkit代码调试

来源:原点资讯(www.yd166.com)时间:2023-06-18 18:29:11作者:YD166手机阅读>>

这个数字是bigarr! 的大小,即NUM_SPREAD_ARGS sizeof(a)。为了查看JITed代码,我们可以设置JSC_dumpDFGDisassembly环境变量,这样jsc就可以跳转到DFG和FTL的编译代码了。

ZDIs-Mac:webkit_ga_asan zdi$ JSC_dumpDFGDisassembly=true lldb -s lldb_cmds.txt WebKitBuild/Release/jsc ~/poc3.js

这将丢弃掉大量无关的代码集,那我们应该如何确定相关代码呢?

我们知道崩溃事件发生在0x6400042d1d29处:mov qword ptr [rcx 8rsi], r8。那我们为何不尝试搜索这个地址呢?

没错,我们在DFG中找到了:

webkit代码调试,(5)

代码在使用DFG JIT的分布操作符来创建一个新数组时,调用了NewArrayWithSpread方法,整个行为发生在gen_func生成的一个函数f中,调用行为发生在一个循环中。

在对源代码进行分析后,我们发现了Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp文件中的SpeculativeJIT::compileNewArrayWithSpread函数。这是DFG代码的起始位置,启动代码意味着将JIT生成的机器代码写入内存以供以后执行。

我们可以通过查看compileNewArrayWithSpread方法来理解其中的机器代码。我们看到compileAllocateNewArrayWithSize()负责分配具有特定大小的新数组,它的第三个参数sizeGPR将作为第二个参数传递给emitAllocateButterfly(),这意味着它将为数组分配一个新的butterfly(包含JS对象值的内存空间)。如果您不熟悉JSObject的butterfly,可以点击【这里】了解更多信息。

webkit代码调试,(6)

跳转到EnITalListAtButoFuffE(),我们看到大小参数siZeGPR向左移动3位(乘以8),然后添加到常数sieof(IndexingHeader)。

webkit代码调试,(7)

方便起见,我们需要将实际的机器代码与我们在这个函数中的C 代码相匹配。m_jit字段的类型是JITCompiler。

JITCompiler负责根据数据流图生成JIT代码。它通过委托给jit来实现,后者生成一个宏汇编程序(JITCompiler通过继承关系拥有该程序)。JITCompiler保存编译期间所需信息的引用,并记录链接中使用的信息(例如,要链接的所有调用的列表)。

这意味着我们看到的调用,如m_jit.move()、m_jit.add32()等,是发出程序集的函数。通过跟踪每一个函数,我们将能够将其与C 对应的组件匹配。除了跟踪内存分配的malloc调试功能外,我们还根据自己对Intel程序集的偏好配置11db。

ZDIs-Mac:~ zdi$ cat ~/.lldbinit
settings set target.x86-disassembly-flavor intel
type format add --format hex long
type format add --format hex "unsigned long"
command script import lldb.macosx.heap
settings set target.env-vars
DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib
settings set target.env-vars MallocStackLogging=1
settings set target.env-vars MallocScribble=1

由于在启用Guard Malloc的情况下正在分配大容量,我们需要设置另一个允许此类分配的环境变量。

ZDIs-Mac:webkit_ga_asan zdi$ cat lldb_cmds.txt
env DYLD_FRAMEWORK_PATH=/Users/zdi/webkit_ga_asan/WebKitBuild/Release env MALLOC_PERMIT_INSANE_REQUESTS=1
r

JSC_dumpDFGDisassembly将以AT&T格式转储程序集,因此我们运行deassembly-s 0x6400042d1c22-c 70可以获得英特尔风格的程序集,结果如下:

webkit代码调试,(8)

栏目热文

实验性webkit功能怎么设置(如何恢复试验性webkit设置)

实验性webkit功能怎么设置(如何恢复试验性webkit设置)

苹果于北京时间2020年2月6日凌晨推送了 iOS 13.4 的第一个 beta 版本。随着几天的应用,又发现了一些更新...

2023-06-18 18:25:01查看全文 >>

webkit怎么设置(safari怎么设置为webkit)

webkit怎么设置(safari怎么设置为webkit)

IE与WebKit内核Windows系统上的浏览器目前使用比较多的有两大内核,分别是Trident(也称之为IE内核)和...

2023-06-18 18:29:11查看全文 >>

webkit功能(webkit功能选项详解)

webkit功能(webkit功能选项详解)

导语:本文从市面主流的浏览器及相应的内核引擎开始,介绍了Chromium为代表的浏览器架构及Blink内核的功能架构。C...

2023-06-18 17:57:21查看全文 >>

webkit开发教程(WEBKIT用什么语言开发的)

webkit开发教程(WEBKIT用什么语言开发的)

在这篇教程中,我们会用 Python 的 PyQt 框架编写一个简单的 web 浏览器。关于 PyQt ,你可能已经有...

2023-06-18 18:22:58查看全文 >>

试用性webkit功能怎么设置

试用性webkit功能怎么设置

Safari 对于 iPhone 用户来说一定不陌生。作为内置浏览器,Safari 干净、安全、迅速又强大。无论是网页搜...

2023-06-18 17:50:41查看全文 >>

webkit浏览器设置(safari浏览器webkit改了怎么恢复)

webkit浏览器设置(safari浏览器webkit改了怎么恢复)

作为一个广受好评的浏览器引擎,其网页布局的质量(包括速度、效率、符合标准度等)往往是其关键,那么WebKit究竟是如何布...

2023-06-18 18:32:17查看全文 >>

webkit使用说明书(webkit功能可以全部关闭吗)

webkit使用说明书(webkit功能可以全部关闭吗)

使用模拟浏览器作为爬虫手段的原因:使自己的爬虫更像用户的操作行为和往往在异步加载中某些请求很难构造;在我们日常开发中,经...

2023-06-18 18:21:13查看全文 >>

webkit应用(webkit有哪些)

webkit应用(webkit有哪些)

整理 | 祝涛 出品 | CSDN(ID:CSDNnews)著名的苹果博主John Gruber最近掀起了一场网络纷争,...

2023-06-18 18:10:25查看全文 >>

webkit怎么调整(webkit是什么功能)

webkit怎么调整(webkit是什么功能)

导读目前,在两大主流移动智能操作系统iOS和Android上,默认的浏览器内核都是WebKit,而且分别以Framewo...

2023-06-18 18:29:02查看全文 >>

webkit 手册(webkit功能需要全部打开吗)

webkit 手册(webkit功能需要全部打开吗)

openKylin用户手册是详细描述openKylin操作系统的功能和用户界面,让用户了解如何使用该软件的说明书。通过阅...

2023-06-18 18:22:12查看全文 >>

文档排行