
虚拟机
文章平均质量分 89
web3.0前沿技术研究者
欢迎讨论区块链前沿技术和web3的发展:
电报:https://t.me/blckchainfans
展开
-
JNI方法使用指导
Get ID很多应用场景下,我们需要读写Java中的成员变量或调用Java中成员函数,实现这一功能的第一步是先或者目标(Java变量或函数)的ID。 JNI Environment提供一组用于获取这些ID的接口。GetFieldID, GetStaticFieldIDjfieldID GetFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig);jfieldID GetStaticFieldID(JNIEnv原创 2022-01-14 13:57:45 · 1124 阅读 · 0 评论 -
jvm类加载器,类加载机制详解
前言今天我们来讲讲jvm里类加载的过程,我们写了那么多类,却不知道类的加载过程,岂不是很尴尬。jvm的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由jvm的具体实现指定的。[来自官方规范]jvm组成结构之一就是类装载器子系统,我们今天就来仔细讲讲这个组件。Java代码执行流程图大家通过这个流程图,了解一下我们写好的Java代码是如何执行的,其中要经历类加载器这个流程,我们就来仔细讲讲这里面的知识点。转载 2021-12-24 17:53:37 · 309 阅读 · 0 评论 -
简述如何实现区块链中的JVM
虚拟机是区块链中的一个关键组件,用来执行智能合约,需要满足安全性和一致性,所谓的安全性一般是指合约代码需要在隔离的沙箱环境中运行,以免错误或恶意代码造成对区块链系统的损害。而一致性...虚拟机是区块链中的一个关键组件,用来执行智能合约,需要满足安全性和一致性,所谓的安全性一般是指合约代码需要在隔离的沙箱环境中运行,以免错误或恶意代码造成对区块链系统的损害。而一致性是指区块链网络中任意诚实的节点执行同一个合约,如果输入参数一致,输出结果都应该是一致的。目前比较主流的虚拟机实现包括EVM、WASM,其他的实转载 2021-12-24 15:17:45 · 353 阅读 · 0 评论 -
JNI C/C++ Callback from JAVA
JNI是JAVA世界和底层世界沟通的重要桥梁,在Android的底层开发中用到的较多。相关知识在网络上也容易搜索到,这里也不再累述。本篇文章,要介绍的是,在Java通过JNI传递一个callback函数到C/C++中。JAVA层首先你需要有个callback 的类:public interface BLDeviceInfoCallback { String deviceInfo(String did, String name, boolean state);}然呢在你提供生..转载 2021-12-23 15:30:20 · 1162 阅读 · 0 评论 -
在c/c++中调用Java方法
JNI就是Java Native Interface, 即可以实现Java调用本地库, 也可以实现C/C++调用Java代码, 从而实现了两种语言的互通, 可以让我们更加灵活的使用.通过使用JNI可以从一个侧面了解Java内部的一些实现.本文使用的环境是64位的win7系统 JDK 1.6.0u30 (32位) C/C++编译器是 Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86 (VC 6转载 2021-12-21 15:05:33 · 488 阅读 · 0 评论 -
C++调用JVM.dll运行Java程序,JNI实战简例,精简JRE实战
精简一下JRE,实现C++和JAVA混合编程:JRE目录:jre/bin/server/jvm.dlljre/bin/java.dlljre/bin/verify.dlljre/bin/zip.dlljre/lib/rt.jar下面是Java端测试内容:jre/Test/com/hwb/Hello.java 1 2 3 4 5 6 7 8 9 package com.hwb; //转载 2021-12-10 14:57:09 · 540 阅读 · 0 评论 -
如何在windows 11中安装WSLG(WSL2)
什么是 WSLWSL(Windows Subsystem for Linux):Windows系统中的一个子系统,在这个子系统上可以运行Linux操作系统。可以让开发人员直接在Windows上按原样运行GNU/Linux环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销。什么是 WSL2?WSL2是适用于Linux的Windows子系统体系结构的一个新版本,它是对基础体系结构的一次重大改造。它使用虚拟化技术和Linux内...转载 2021-10-20 15:57:26 · 1331 阅读 · 0 评论 -
WASI探索(二) -- 将猜数字编译为WASI目标并使用Wasmer运行
猜数字作为入门Rust时第一次编写并具有实际功能的程序,适合让读者快速掌握rust的基本概念。同时,为了让程序更加有趣,博主在原本的猜数字程序上添加了日志和从运行时参数传递游戏难度的功能。此外,由于博主偏好改变,本文还会涉及到另外一款WASI运行时Wasmer,以及他们为了丰富WASI生态而推出的wasm包管理器wapm阅读须知学习外部资料更有助于读者了解相关生态,因此本文将不赘述:WASI是什么? Wasmer与wapm如何安装? rust是什么?如何安装Rust?如何学习rust..转载 2021-09-13 16:20:31 · 733 阅读 · 0 评论 -
WASI探索(一) -- WASI简介与Wasmtime配置
WASM(Web Assembly)尽管是为了提高网页中性能敏感模块表现而提出的字节码标准, 但是WASM却不仅能用在浏览器(broswer)中, 也可以用在其他环境中. 在这些环境中, 我们则需要支持WASI(WebAssembly System Interface, WASM系统接口)的runtime来执行我们编译运行的wasm模块. 本文将介绍Mozilla下的一个组织CraneStation所开发的WASM运行时wasmtime, 该运行时对WASI支持比较高.什么是WASI1?WASI转载 2021-09-13 16:11:48 · 6441 阅读 · 0 评论 -
WebAssembly运行时--Wasmtime
Wasmtime是由bytecodealliance开源的WebAssembly和WASI的小型高效运行时。它在Web外部运行WebAssembly代码,既可以用作命令行实用程序,也可以用作更大应用程序中嵌入的库。具备以下特点:轻量级。Wasmtime是WebAssembly的独立运行时,可根据您的需求进行扩展。它适合于微型芯片,也可以使用大型服务器。 Wasmtime也可以嵌入几乎所有应用程序中。 快。Wasmtime建立在优化的Cranelift代码生成器上,可在运行时快速生成高质量的..转载 2021-09-13 15:43:24 · 789 阅读 · 0 评论 -
Deno通过V8和Rust的数据传递
题外话这几天终于能放下一些事情,回头来关注一下Deno,打开Deno目录,git pull一下,突然有点小惊喜,那一大坨C++ binding相关的东西被移除了,感觉整个Deno目录整洁了许多,再仔细瞧瞧,发现整个项目的目录重构后,也比原来理解起来也轻松多了。Rust中使用V8,避免不了使用C++,那么V8和C++那一部分到哪儿去了呢?答案是:denoland/rusty_v8github.com/denoland/rusty_v8打开rusty_v8的目录,可以熟悉的看到http转载 2021-08-03 14:41:38 · 478 阅读 · 0 评论 -
微软的wasm 和 rust的wasm 方案对比
微软家的:blazor看图即可见原理。mono.wasm用来构造了一个dotnet解释器。在blazor被微软收购之前是用的dotnetanywhere,现在换成了mono然后,直接加载那些dll,执行正经的IL代码。这个方案,稳健,除了加载容量吓死人这个helloworld,肉眼可见的压缩后容量超过100K的文件就4个。开发工具 visual studio 2019开发语言 IL家族火狐家的rustwasm非常干净,代码直接被编译为wasm执行,没有依赖转载 2021-08-02 13:55:28 · 1399 阅读 · 0 评论 -
Solidity汇编开发简明教程
在用Solidity开发以太坊智能合约时,使用汇编可以直接与EVM交互,降低 gas开销成本,更精细的控制智能合约的行为,因此值得Solidity开发者学习 并加以利用。本文是Solidity汇编开发的简明教程,旨在帮助你快速熟悉 如何在Solidity智能合约代码中嵌入汇编代码。2、以太坊虚拟机和堆栈结构机器以太坊虚拟机EVM有自己的指令集,该指令集中目前包含了 144个操作码,详情参考Geth源代码这些指令是Solidity抽象出来的,可以在Solidity内联使用。例如: 1转载 2021-07-31 14:29:50 · 654 阅读 · 0 评论 -
Solidity随机数发生器原理与实现
1、什么是随机数想象一下你身边的随机噪音或者任何随机发生的事情,可以说检测到这些随机模式 的概率为0。这就是随机数的意思 —— 一个可以生成指定范围内的任意不确定 数字的模式。当我这么说的时候,考虑一下1~100之间的某个数。由于不确定性,我 猜不出来你的脑子里现在想的是哪个数。随机数是从某个特定分布中选中的数,通常也会要求这些数之间彼此独立, 这样在前后两个数之间就不会存在相关性。计算机生成的随机数有时会 称为伪随机数,这一术语中保留了随机,表示其不可预测性。当没有额外 的约定时,通常随机数采转载 2021-07-31 14:23:14 · 700 阅读 · 0 评论 -
以太坊EVM兼容区块链全表
以太坊已经借助DeFi迅速成为去中心化应用的主流开发平台,利用以太坊 技术开发的分叉链或EVM兼容链也层出不穷。本文列出主流的以太坊EVM兼容链, 以便开发者使用MetaMask或Web3中间件时,可以正确设置Chain ID和Network ID。Chain ID 链名称 链简称 链缩写 网络 Network ID 1 Ethereum Mainnet eth ETH mainnet 1 10 Optimistic Ethe转载 2021-07-31 13:46:55 · 1138 阅读 · 0 评论 -
ChainBridge跨链协议教程【EVM/Substrate】
ChainBridge是一个可扩展的跨链通信协议,目前兼容EMV和Substrate链, 支持两个不同的EVM区块链、或者一个EVM链与一个Substrate链之间的跨链桥接与 通证转移,支持ERC20、ERC721等多种类型的通证的跨链转移,以及普通数据的 跨链转移。在这个教程中,我们将介绍ChainBridge的基本构成和安装方法,并 利用ChainBridge实现Substrate原生资产和以太坊ERC20/ERC721通证之间的跨链 转移。用自己熟悉的语言学习以太坊开发:Java...转载 2021-07-31 13:45:41 · 941 阅读 · 0 评论 -
以太坊虚拟机原理解析
安全考量尽管在通常情况下编写一个按照预期运行的软件很简单, 但想要确保没有人能够以出乎意料的方式使用它就困难多了。在 Solidity 中,这一点尤为重要,因为智能合约可以用来处理通证,甚至有可能是更有价值的东西。 除此之外,智能合约的每一次执行都是公开的,而且源代码也通常是容易获得的。当然,你总是需要考虑有多大的风险: 你可以将智能合约与公开的(当然也对恶意用户开放)、甚至是开源的网...原创 2019-05-08 13:09:34 · 8642 阅读 · 0 评论 -
以太坊虚拟机ABI编码外部方法调用的方式
安装Solidity编译器版本Solidity的版本遵循语义化版本原则,作为发布版本的补充,每日开发构建(nightly development builds)也是可用的。这个每日开发构建不保证能正常工作,尽管尽了最大的努力,但仍可能包含未记录的和/或重大的改动。我们推荐使用最新的发布版本。下面的包安装程序将使用最新发布版本。Remix我们推荐使用 Remix 来开发简单合约...原创 2019-05-08 11:39:03 · 12901 阅读 · 0 评论 -
以太坊虚拟机动态数据类型的表示方法
合约的元数据Solidity编译器自动生成JSON文件,即合约的元数据,其中包含了当前合约的相关信息。 它可以用于查询编译器版本,所使用的源代码,应用二进制接口Application Binary Interface(ABI)和以太坊标准说明格式Ethereum Nature Specification Format(natspec)文档,以便更安全地与合约进行交互并验证其源代码。编...原创 2019-05-08 13:14:04 · 11010 阅读 · 0 评论 -
以太坊虚拟机固定长度数据类型的表示方法
pplication Binary Interface(ABI)说明基本设计在以太坊Ethereum生态系统中,应用二进制接口Application Binary Interface(ABI)是从区块链外部与合约进行交互以及合约与合约间进行交互的一种标准方式。 数据会根据其类型按照这份手册中说明的方法进行编码。这种编码并不是可以自描述的,而是需要一种特定的概要(schema...原创 2019-05-08 13:15:44 · 8697 阅读 · 0 评论 -
以太坊虚拟机
YulYul (先前被也被称为 JULIA 或 IULIA)是一种可以编译到各种不同后端的中间语言(以太坊虚拟机Ethereum Virtual Machine(EVM)1.0,以太坊虚拟机Ethereum Virtual Machine(EVM)1.5,而 eWASM 也在计划中)。 正因为如此,它被设计成为这三种平台的可用的共同标准。 它已经可以用于 Solidity 内部的“内联汇...原创 2019-05-08 13:17:11 · 11663 阅读 · 0 评论 -
以太坊虚拟学习
入门智能合约简单的智能合约让我们先看一下最基本的例子。现在就算你都不理解也不要紧,后面我们会有更深入的讲解。存储合约(把一个数据保存到链上)pragma solidity >=0.4.0 <0.7.0;contract SimpleStorage { uint storedData; function set(uint x) public { ...原创 2019-05-08 11:37:40 · 11723 阅读 · 0 评论 -
LLVM:Rust、Clang等语言的强大支持以及编译原理和过程
本文档根据当前最新官方版本v0.5.8进行翻译,本翻译最初HiBlock社区发起,后经过深入浅出区块链社区社区成员根据最新版本补充翻译。本中文文档大部分情况下,英中直译,但有时为了更好的理解也会使用意译,如需转载请联系Tiny熊(微信:xlbxiong).Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++,Python 和 Javas...原创 2019-05-08 11:35:43 · 14827 阅读 · 1 评论 -
V8 执行 JavaScript 的流程
前言本文意在简单的介绍一下 V8 执行 JS 的过程,通过了解 V8 执行 JS 的过程,知道 JS 代码呈现在浏览器上到底做了什么。当然本人也是在陆续探索 V8 ,文章中如有不当之处,还望不吝指正,理性交流。众所周知,机器(CPU)只能识别机器码(二进制码),对于 JS 代码,它是识别不了的,所以当代码成为页面出现在屏幕上的时候,必然是做了很多的转译工作。V8 执行 JavaScript 过程如上图所示,我们将一步步进行拆分分析:JS TO AST在 V8 引擎拿到 JS 代码原创 2021-07-05 09:55:42 · 293 阅读 · 0 评论 -
{转}学习LLVM
一、特殊的技术会对文明带来重大变革(一)文明是有记录的承载我们今天先回顾一下人类的文明史。众所周知,文明是由记录手段来承载的。最早的文字是篆刻在石板上,泥板上,龟甲上,以及金属上的。我们可以看到这种记载工具主要使用在奴隶社会。 在这之后广泛出现了可以书写的文字,文字书写在羊皮上,丝绸上和纸上。建立在书写文字上的文明,其传播水平相对于刻写的信息提高了一个效率档次。人类来到了封建社会。时间...原创 2021-07-02 15:15:26 · 7240 阅读 · 0 评论 -
WebAssembly (WASM)智能合约
对中国农话网与交换机产业的一点看法中国农话的现状及发展趋势中国是一个农业大国,农村地域和农业人口占了总数的80%左右。这几年,随着国家经济的蓬勃发展,农村经济特别乡镇企业发展非常迅猛,从而促使农村电话的大发展,潜力很大。但也不能用资本主义国家的方法来测算。我国农村总体文化不发达,商品经济还未成熟,通信是要发展,不会这么快,这么急迫;现在的估计过大了一些,造成严重的供过于求。放号率不高,资金...原创 2021-07-02 14:05:17 · 11615 阅读 · 2 评论 -
EVM、Wasm虚拟机原理和设计思路
目前我们的形势和任务——任正非在1995年总结大会上的讲话 1995年12月26日【1987年到1995年,华为用了不到10年时间,员工人数从6人至1750人,销售收入从0到15亿元。任正非在这次讲话中首次提出末位淘汰的思想,每年保持5%的自然淘汰率和10%的合理流动率,以激发员工的积极性。】一、历史回顾十五年前,我们打开国门,实行开放改革。那时十亿中国人的心中装满的是世界上2/3...原创 2021-07-02 13:50:20 · 12799 阅读 · 1 评论 -
llvm快速学习
摘要:前两篇文章都是来自某乎上妹子的回答,无论是从金融的角度还是技术的角度,感觉文风都是萌萌哒。这篇文章咱们将专注于技术角度,从现实的技术去分析区块链技术,相信你在读完本文以后将获取一些新的思路和想法!精彩不容错过!在前面的两篇文章里,咱们看到了知乎上的两位妹纸关于区块链的理解,一位从金融角度切入同时兼顾了技术概况,另一位呢则偏重于技术层面(一言不合就放代码)。通过两位妹子(萌萌哒)的叙述,...原创 2021-06-24 15:40:38 · 11276 阅读 · 0 评论 -
WASM发展状况更新,以及LLVM-wasm编译环境搭建过程
反骄破满,在思想上艰苦奋斗——任正非在十大杰出员工表彰大会上的发言 1996年4月6日成功是一个讨厌的教员,它诱使聪明人认为他们不会失败,它不是一位引导我们走向未来的可靠的向导。华为已处在一个上升时期,它往往会使我们以为八年的艰苦奋战已经胜利。这是十分可怕的,我们与国内外企业的差距还较大,只有在思想上继续艰苦奋斗,长期保持进取、不甘落后的态势,才可能不会灭亡。繁荣的里面,处处充满危机。...原创 2021-06-30 14:10:17 · 11748 阅读 · 0 评论 -
如何使用LLVM将C语言编译为WASM
不前进就免职──任正非在生产系统干部就职仪式上的讲话首先祝贺您们就任新职务。公司组织改造从市场部中层开始,已经延伸到生产系统。在华为大发展的历史时期,您们有机会负责一部分事情是无尚光荣的。公司号召为伟大祖国的繁荣昌盛、为中华民族的振兴、为自己与家人的幸福而努力奋斗。历史已经把我们推到了时代的前沿,您们要用自己的青春热血去实践,我相信您们会踏踏实实、一丝不苟地去做好自己管辖的事情。华为的...转载 2021-06-30 14:05:14 · 12265 阅读 · 1 评论 -
用Rust编写LLVM的玩具编译器
原文:A Toy Front-End for LLVM, written in Rust正文我目前的副业是用 Rust 编写一个可以将代码转换成 LLVM IR 的编译器。LLVM 的 API 对于新手来说有点令人生畏,而且没有很多有关的教程(有限的教程大多数还是基于 C++ 的,如何使用 Rust 做同样的事并不总是那么明确)。我希望当我准备做一件事情时,有人可以手把手的教我,这也是我要写这篇文章的原因。对于 Rust,与 LLVM 的接口交互的最佳选择是使用 llvm-sys。互联网.转载 2021-06-03 14:48:41 · 1728 阅读 · 2 评论