首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    javascript & c++ - v8pp 实现解析

    javascript等功能的 v8pp 的同时, 也对怎么在c++ 中嵌入式的使用 v8 虚拟机有个基础的了解...., 作用与js版本中的空函数一致, 最终我们构造出来的 object, 如果我们返回给javascript, 它将与js 版实现一样, 有一个值是 10 的 vb 成员....一方面 v8pp 需要借助自己定义的 object_registry 完成承载 c++ 类元数据的目的, 在其上正确的记录如ctor(), dtor() 等与 v8 交互过程中需要用到的相关 c++ 类的功能实现...object_registry 和 对应 c++ 类对象的指针, 这样的操作后如下图所示: 我们成功的将c++类的元信息 - object_registry, c++ 类对象与一个v8::Object...关联到了一起, 将 v8::Object 转换到 c++ 也很简单, 我们能够想象, 通过获取v8::Object上关联的internal field, 我们就能拿到相关的 c++ 类对象的信息做进一步的处理了

    1.2K21

    Frida Internal - Part 1: 架构、Gum 与 V8

    系列文章传送门: Frida Internal - Part 1: 架构、Gum 与 V8 (本文) Frida Internal - Part 2: frida-core Frida Internal...- Part 3: frida-java-bridge 与 ART hook 项目总览 在 frida 的主仓库中,我们一般是直接在其 release 页面下载 CI 的成品使用,其中可以看到有许多可供下载的组件...在 Linux 内核中也能看到很多 glib 封装设计的思想在,因此若是有 C 开发需求比如嵌入式场景,也可以考虑使用 glib 去进行辅助。...由于动态重编译与系统架构关系较大,代码中需要对当前平台的指令集进行准确的归类和处理,因此当前 Stalker 只支持常用的 ARM64、X86 和 IA32 架构,而且对于动态自修改的代码支持也不完善,...::NewDefaultAllocator(); v8::Isolate* isolate = v8::Isolate::New(create_params); { v8::Isolate

    1.9K21

    理解nodejs中js和c++的通信原理

    1 js调用c++ 首先介绍一下v8中两个非常核心的类FunctionTemplate和ObjectTemplate。...SetInternalFieldCount这个函数比较特殊,也是比较重要的一个地方,我们知道对象就是一块内存,对象有他自己的内存布局,我们知道在c++里,我们定义一个类,也就定义了对象的布局。...比如我们有以下定义。 class demo { private: int a; int b; }; 在内存中布局如下。 ?...上面这种方式有个问题,就是类定义之后,内存布局就固定了。而v8是自己去控制对象的内存布局的。当我们在v8中定义一个类的时候,是没有任何属性的。我们看一下v8中HeapObject类的定义。...这些类变量就是定义了对象每个域所占内存空间的信息,当我们定义一个HeapObject对象的时候,v8首先申请一块内存,然后把这块内存首地址强行转成对应对象的指针。然后通过类变量对属性的内存进行存取。

    2.8K20

    从No.js看Node.js原理

    比如Node.js是由V8、Libuv、JS组成的,Node.js底层是C\C++,Node.js不是语言是运行时。本文通过实现一个类Node.js的JS运行时No.js,去理解Node.js的本质。...No.js是我之前写的一个JS运行时,概念上是这么说,但是它算不上真正的运行时,它只是个demo,但是它让你看到如果你有兴趣,你也可以写个Node.js。 首先我们看看V8的基本用法。...1 从context中获取全局变量。 2 定义一个新功能,并注入到全局变量,这样我们就可以在JS里访问了。 3 打开一个文件并且读取进来,交给V8编译执行。下面我们看重点,即我们自定义的功能。...所以server.socket() 对应的函数是Server.prototype.socket。这个函数会从this中取出真正对象(TCPServer实例)的socket函数。然后执行它。...他主要用于适配V8的协议。真正的逻辑是在它关联的对象中实现的。其余的实现如下。

    1.3K30

    Deno学习之V8篇

    ("{}", str); context.exit(); } drop(locker); isolate 表示一个独立的V8虚拟机,拥有自己独立的堆和栈故取名isolate,翻译为沙箱 // 创建一个沙箱...let isolate = v8::Isolate::new(create_params); handle handle是指向对象的指针,指针在V8中分为两种持久化handle和本地化handle,一个放在堆上一个放在栈上...context content 我们程序中总用到直白意思就是上下文环境, v8使用Context可以显示相互分离Javascript脚本在同一个v8中运行而不相互干涉 // 创建一个上下文 Local...数据类型 由于C++原生数据类型与javascript有很大的数据差异,v8提供Data类。...image V8 引擎使用示例 有了上面所述的基本概念之后,我们来看一下一个使用 V8 引擎的应用程序的基本流程 创建 HandleScope 实例 创建一个持久化的 Context 进入 Context

    1.5K40

    保姆级教程: c++游戏服务器嵌入v8 js引擎

    逐渐有些原生语言项目因为希望有不停机更新的能力而引入脚本。而且由于大多数项目已经有现成的c++服务器框架,他们往往选择把脚本作为库嵌入到c++程序的做法。...服务器选用一个库,最看重的莫过于稳定性和性能了,在众多脚本引擎中,v8这两方面可谓佼佼者:稳定性源自长时间各种方式的折腾,v8引擎每天那么多的实例跑在各种各样的机器、环境下,跑着各种各样的代码,一天跑的代码量比很多小众的脚本引擎一辈子的代码量还多...于是有了本文,本文会循序渐进的介绍怎么在linux c++程序里头嵌入v8: HelloWorld级别的示例; c++类封装到js; 把v8改为嵌入式nodejs; 上述三步都会附带完整的可运行代码,最后会附上...上述代码我用分割线分成了6块,其中: 第2块是v8的启动,第6块是v8的关闭,除非你要定制启动参数,启动多虚拟机啥的,否则这两部分都是固定的; 第1块有个Print函数,和这函数同声明的c++函数,...在Print只是简单的取一个参数进行打印,如果有更多个数及种类的参数呢?更复杂的是一个c++类有构造函数,成员变量,有成员函数,静态函数,还有继承,重载等等,c++类如果需要封装不是十分麻烦?

    1.6K20

    c++服务器嵌入v8 js引擎胎教级教程

    逐渐有些原生语言项目(比如c++)因为希望有不停机更新的能力而引入脚本。这些团队往往有一套成熟c++服务器框架,他们往往选择把脚本作为库嵌入到C++程序的做法。...服务器选用一个库,最看重的莫过于稳定性和性能了,在众多脚本引擎中,v8这两方面可谓佼佼者: 稳定性源自长时间各种方式的折腾,v8引擎每天那么多的实例跑在各种各样的机器、环境下,跑着各种各样的代码,一天跑的代码量比很多小众的脚本引擎一辈子的代码量还多...于是有了本文,本文会循序渐进的介绍怎么在linux c++程序里头嵌入v8: HelloWorld级别的示例; c++类封装到js; 把v8改为嵌入式nodejs; 上述三步都会附带完整的可运行代码...上述代码我用分割线分成了6块,其中: 第2块是v8的启动,第6块是v8的关闭,除非你要定制启动参数,启动多虚拟机啥的,否则这两部分都是固定的; 第1块有个Print函数,和这函数同声明的C++函数,都可以注册到...在Print只是简单的取一个参数进行打印,如果有更多个数及种类的参数呢?更复杂的是一个c++类有构造函数,成员变量,有成员函数,静态函数,还有继承,重载等等,c++类如果需要封装不是十分麻烦?

    1.5K20

    Node.js编写组件的几种方式

    ()函数是一个有IO耗时操作的函数时,异步的foo()函数可以减少阻塞等待,提高整体性能。...C++导出函数返回值一般定义为void,函数参数中的指针参数,如果是返回值的(通过*.i文件中的OUTPUT指定),swig都会把他们处理为JS函数的返回值,如果有多个指针,则JS函数的返回值是list...六、其它 在使用v8 API实现Node.js组件时,可以发现跟实现Lua组件的相似之处,Lua有状态机,Node有Isolate。...Node实现对象导出时,需要实现一个构造函数,并为它增加“成员函数”,最后把构造函数导出为类名。Lua实现对象导出时,也需要实现一个创建对象的工厂函数,也需要把“成员函数”们加到table中。...Node的js脚本有new关键字,Lua没有,所以Lua对外只提供对象工厂用于创建对象,而Node可以提供对象工厂或者类封装。

    1.6K41
    领券