前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jalangi2 API

Jalangi2 API

作者头像
SuperHeroes
发布2018-05-30 16:49:02
1.1K0
发布2018-05-30 16:49:02
举报
文章被收录于专栏:云霄雨霁云霄雨霁

MyAnalysis

/user/ ksen / Dropbox / jalangi2 / src / js /运行/ analysisCallbackTemplate。js,第101行

这个文件是编写定制的Jalangi 2分析的模板。简单地复制这个文件并重新编写您需要在分析中实现的回调。其他回调应该从文件中删除。

在以下方法中(也称为回调)可以选择不返回任何东西。如果所有的回调都没有返回任何值,那么我们就得到了一个被动的分析,其中具体的执行是未修改的,回调可以用来观察执行。您可以选择在一些回调中返回具有指定属性的适当对象,以修改具体执行的行为。例如,可以将从MyAnalysis#putFieldPre返回的对象的skip属性设置为true,从而跳过实际的putField操作。类似地,可以设置从MyAnalysis#write回调返回的对象的结果字段,以修改实际写入到变量的值。可以适当地设置从MyAnalysis#conditional回调返回的对象的结果字段,以更改程序执行的控制流。在MyAnalysis#functionExit和MyAnalysis#scriptExit中,可以将返回对象的isBacktrack属性设置为true,从头开始就重新执行函数的主体。结合改变程序控制流的能力,使我们能够在符号执行中探索函数的不同路径。

注意,如果调用process.exit(),则执行终止异常,并跳过MyAnalysis#endExecution的回调。

通过使用J$.smap中存储的全局对象,一个分析可以访问源映射,它将指令标识映射到源位置。Jalangi 2为运行时加载的每个JavaScript脚本分配了一个唯一的id,称为sid。J $.smap将每个sid映射到一个对象,称为iids,其中包含了id为sid的脚本的源映射信息。iid具有以下属性:

Ø  originalCodeFileName:原始脚本文件的存储路径

Ø  instrumentedCodeFileName:测试脚本文件的存储路径

Ø  url:是可选的,并存储脚本的URL,如果它是在使用-URL选项的过程中设置的

Ø  evalSid:存储eval被调用的脚本的sid,以备当前脚本来自eval函数调用

Ø  evalIid:eval函数调用的iid,以防当前脚本来自eval函数调用

Ø  nBranches:条件语句的脚本数量

Ø  code:如果代码用-inlineSource选项进行了测试,那么将使用一个字符串来表示原始的脚本代码

Iids:还映射每个iid(代表指令id,分配给Jalangi2插入的每个回调函数的唯一ID)到包含[beginLineNumber, beginColumnNumber, endLineNumber, endColumnNumber]的数组。如果将代码用-inlineIID选项进行了测试,那么从iids到数组的映射仅可用。

在下面描述的每个回调中,iid表示脚本中回调的唯一静态指令id。在两个不同的脚本中插入的两个回调函数可能具有相同的iid。在一个回调函数中,可以使用J$.sid访问当前的脚本id。您可以调用J$.getGlobalIID(iid)来获得一个名为giid的字符串,该字符串静态地标识整个程序的回调。J$.getGlobalIID(iid)返回字符串J$.sid+“:”+iid。J$.iidToLocation(giid)返回一个字符串,包含原始脚本文件路径,开始和结束行号,和插入带有giid的回调的代码片段。

一些样本分析可以在../src/js/sample_analyses/找到。有关运行分析的说明,请参阅../README.md。

方法

_return (iid,val){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第385行

在使用return关键字从函数返回值之前调用此回调。

Name           Type      Description

iid                num      此回调的静态唯一指令标识符

val               *           要返回的值

Returns:

Type                           Description

Object | undefined  - 如果返回一个对象,则返回的值将替换为存储在该对象的result属性中的值。

_throw (iid,val){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第397行

在使用throw关键字抛出一个值之前调用此回调函数。

Name           Type      Description

iid                num     此回调的静态唯一指令标识符

val               *           要抛出的值

Returns

Type                    Description

Object | undefined - 如果返回一个对象,则抛出的值将替换为存储在该对象的result属性中的值。

_with (iid,val){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第409行

当执行with语句时 调用此回调。

Name           Type      Description

iid                num      此回调的静态唯一指令标识符

val               *           被用作with内容的值

Returns:

Type                    Description

Object | undefined -如果返回一个对象,with中的值将被替换为存储在该对象的result属性中的值。

binary(iid,op,left,right,result,isOpAssign,isSwitchCaseComparison,isComputed){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第513行

这个回调在二进制操作之后被调用。二进制操作包括+, - ,*,/,%,&,|,^,<<,>>,>>>,<,>,<=,> =,==,!=,=== ==,instanceof,delete,in。

Name                                Type             Description

iid                                     num            此回调的静态唯一指令标识符

op                                     string           要执行的操作

left                                   *                  左操作数

right                                 *                  右操作数

result                               *                   二进制运算的结果

isOpAssign                       boolean 如果二进制操作是表单的一部分则为真x op= e

isSwitchCaseComparison boolean 如果二进制操作是将判别式与switch语句中的结果进行比较的一部分,则为真。

isComputed                             boolean      如果操作是表单delete x[p],则为真,否则为false(即使表单的操作delete x.p)

Returns:

Type                           Description

Object | undefined - 如果返回一个对象,二进制操作的结果将替换为存储在对象的result属性中的值。

binaryPre (iid,op,left,right,isOpAssign,isSwitchCaseComparison,isComputed){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第491行

这个回调在二进制操作之前被调用。二进制操作包括+, - ,*,/,%,&,|,^,<<,>>,>>>,<,>,<=,> =,==,!=,=== ==,instanceof,delete,in。delete x 由于此操作无法反射执行,无回调。

Name                                Type      Description

iid                                     num     此回调的静态唯一指令标识符

op                                     string    要执行的操作

left                                   *           左操作数

right                                 *           右操作数

isOpAssign                       boolean 如果二进制操作是表单的一部分则为真x op= e

isSwitchCaseComparison boolean 如果二进制操作是将判别式与switch语句中的结果进行比较的一部分,则为真。

isComputed                             boolean 如果操作是表单delete x[p],则为真,否则为false(即使表单的操作delete x.p)

Returns:

Type                           Description

Object | undefined- 如果返回一个对象,并且 skip属性为true,则跳过二进制操作。如果返回对象,则原始op,left和right将被替换为返回的对象。

conditional(iid,result){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第555行

这种回调在分支之后进行条件检查后调用。分支可以发生在各种语句中,包括if-then-else,switch-case,while,for,||,&&,?

Name           Type      Description

iid                num     此回调的静态唯一指令标识符

result          *           条件表达式的值

Returns:

Type                           Description

Object | undefined - 如果返回对象,则条件表达式的结果将替换为存储在对象的result属性中的值。

declare (iid,name,val,isArgument,argumentIndex,isCatchParam){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第266行

这个回调函数在每个局部变量在范围内被定义的开始时被触发,对于每个正规的参数,对于每个使用函数语句定义的函数,对于arguments变量,以及在catch语句中传递的正式参数,都是如此。

Name                  Type             Description

iid                       num            此回调的静态唯一指令标识符

name                  string           声明变量的名称

val                      *                声明的变量的初始值。变量可以是局部变量、函数参数、捕获参数、arguments或使用函数语句定义的函数。用var声明的变量是undefined类型(没被定义),不能通过从这个回调返回一个不同的值来更改。在函数执行的开始时,在参数变量上调用一个声明回调。

isArgument               boolean      如果变量是参数或形式参数,则为真。

argumentIndex num            函数调用中参数的索引。指数从0开始。如果变量不是形式参数,则argumentIndex为-1。

isCatchParam    boolean      如果变量是catch语句的参数,则为True。

Returns:

Type                           Description

Object | undefined - 如果函数返回一个对象,那么原始初始值将替换为存储在对象的result属性中的值。这不适用于使用var声明的局部变量。

endExecution (iid){undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第601行

当node.js中执行终止时,调用此回调。在浏览器环境中,如果使用ChainedAnalyses.js或ChainedAnalysesNoCheck.js并按Alt-Shift-T,则调用回调。

Returns:

Type                           Description

undefined                 - 忽略任何返回值

endExpression (iid){undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第592行

当一个表达式被计算并且其值被丢弃时,这个回调被调用。例如,当表达式语句完成其执行时,将调用此回调。

Name           Type      Description

iid                num     此回调的静态唯一指令标识符

Returns:

Type                           Description

undefined                 - 忽略任何返回值

forinObject (iid,val){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第241行

当使用for-in循环来迭代对象的属性时,将调用此回调。

Name           Type      Description

iid                num     此回调的静态唯一指令标识符

val               *           其属性在for-in循环中迭代的对象。

Returns:

Type                           Description

Object |undefined - 如果函数返回一个对象,那么其属性正被迭代的原始对象将被存储在返回对象的result属性中的值替换。

例:

for (x in y) { }

// the above call roughly gets instrumented as follows:

var aret = analysis.forinObject(iid, y);

if (aret) {

y = aret.result;

}

for (x in y) {}

functionEnter (iid,f,dis,args){undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第422行

在函数体启动之前调用此回调函数。

Name           Type             Description

Iid                 num            此回调的静态唯一指令标识符

F                   funtion               将被执行函数体的function对象

dis               *                  函数体this的值

args              array           被调用函数的参数列表

Returns:

Type                           Description

undefined                 - 忽略任何返回值

functionExit (iid,returnVal,wrappedExceptionVal){object}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第440行

当函数体的执行完成时,将调用此回调

Name                                Type             Description

iid                                     num            此回调的静态唯一指令标识符

returnVal                         *                  该函数返回的值

wrappedExceptionVal     Object |undefined       如果这个参数是一个对象,那么函数执行就会抛出一个未捕获的异常,异常被存储在参数的exception属性中。

Returns:

Type      Description

Object   --返回一个对象,那么实际的returnVal和wrappedExceptionVal.exception将被替换为返回的对象。如果返回一个对象并设置了属性isBacktrack,那么控制流将返回到函数体的开头,而不是返回给调用者。属性isBacktrack可以设置为true,以重复执行功能体,如同在MultiSE符号执行。

getField (iid,base,offset,val,isComputed,isOpAssign,isMethodCall){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第305行

在访问对象的属性后调用此回调。

Name           Type             Description

Iid                num            此回调的静态唯一指令标识符

base            *                  基对象

offset          string | *     属性

val               *                 base[offset]的值

isComputed boolean      如果使用方括号访问属性,则为true。例如, 如果get字段操作是o[p],则isComputed为真,如果get字段操作为o.p,则为false

isOpAssign Boolean      如果操作是form,则为真 o.p op= e

isMethodCall Boolean     如果get字段操作是方法调用的一部分(例如op()),则为True

Returns:

Type                           Description

Object |undefined- 如果返回一个对象,则get字段操作的值将替换为存储在该对象的result属性中的值。

getFieldPre (iid,base,offset,isComputed,isOpAssign,isMethodCall){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第286行

在访问对象的属性之前调用此回调。

Name           Type             Description

iid                num             此回调的静态唯一指令标识符

base            *                  基对象

offset          string | *     属性

isComputed boolean      如果使用方括号访问属性,则为true。例如, 如果get字段操作是o [p],则isComputed为真, 如果get字段操作为o.p,则为false

isOpAssign boolean      如果操作是form,则为真 o.p op= e

isMethodCall Boolean     如果get字段操作是方法调用的一部分(例如op()),则为True

Returns:

Type                           Description

Object |undefined - 如果返回对象并且对象的skip 属性为true,则跳过get字段操作。如果返回一个对象,则原始base和offset将从返回的对象替换。

instrumentCode (iid,newCode,newAst){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第581行

在字符串作为参数传递给eval或Function进行检测之后调用此回调。

Name           Type      Description

iid                num     此回调的静态唯一指令标识符

newCode    *           检测代码

newAst        object   检测代码的AST(抽象语法树)

Returns:

Type                           Description

Object |undefined - 如果返回一个对象,则将检测到的代码替换为存储在对象的result属性中的值。

instrumentCodePre (iid,code){Object}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第568行

在作为参数传递给eval或Function进行检测的字符串之前调用此回调。

Name           Type      Description

iid                num     此回调的静态唯一指令标识符

code            *           将要检测的代码

Returns:

Type                           Description

Object - 如果返回一个对象,并且 skip属性为true,则跳过code检测。如果返回一个对象,原始code将被替换为返回的对象。

invokeFun (iid,f,base,args,result,isConstructor,isMethod,functionIid){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第188行

这个回调在函数、方法或构造函数调用后调用。

Name           Type             Description

iid                num            此回调的静态唯一指令标识符

f                   function      被调用的函数对象

base            *                  函数f的接收对象

args             array           传递给f的参数数组

result          *                  调用的返回值

isConstructor boolean    如果f被调用为构造函数,则为真

isMethod     boolean      如果f被调用为方法,则为真

functionIid   num            当执行函数f时, 传递给回调MyAnalysis#functionEnter的iid(即唯一指令标识符)。 functionIid可以被视为函数f的静态标识符。请注意,给定的功能代码块可以创建几个函数对象,但每个这样的对象都有一个通用的functionIid,这是在函数执行时传递给MyAnalysis#functionEnter的iid 。

Returns:

Type                           Description

Object |undefined - 如果返回一个对象,则调用的函数的返回值将被替换为存储在该对象的result属性中的值。这样可以更改实际函数调用返回的值。

例:

x = y.f(a, b, c)

// the above call roughly gets instrumented as follows:

var skip = false;

var aret = analysis.invokeFunPre(113, f, y, [a, b, c], false, true);

if (aret) {

f = aret.f;

y = aret.y;

args = aret.args;

skip = aret.skip

}

if (!skip) {

result =f.apply(y, args);

}

aret = analysis.invokeFun(117, f, y, args, result, false, true);

if (aret) {

x = aret.result

} else {

x = result;

}

invokeFunPre (iid,f,base,args,isConstructor,isMethod,functionIid){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第141行

这个回调在函数、方法或构造函数调用之前被调用。请注意,方法调用还会触发MyAnalysis#getFieldPre和 MyAnalysis#getField回调。

Name           Type             Description

Iid                 num            此回调的静态唯一指令标识符

f                   function      要调用的函数对象

base            object          函数f的接收对象

args             array           传递给f的参数数组

isConstructor Boolean     如果f被调用为构造函数,则为真

isMethod    boolean      如果f被调用为方法,则为真

functionIid num            当执行函数f时, 传递给回调MyAnalysis#functionEnter的iid(即唯一指令标识符)。functionIid可以被视为该功能的静态标识符f。请注意,给定的功能代码块可以创建几个函数对象,但每个这样的对象都有一个通用的functionIid,这是在函数执行时传递给MyAnalysis#functionEnter的iid。

Returns:

Type                           Description

Object |undefined - 如果返回对象并且对象的skip属性为true,则跳过调用操作。如果返回对象,则原始f,base和args将被返回的对象替换。

例:

y.f(a, b, c)

// the above call roughly gets instrumented as follows:

var skip = false;

var aret = analysis.invokeFunPre(113, f, y, [a, b, c], false, true);

if (aret) {

f = aret.f;

y = aret.y;

args = aret.args;

skip = aret.skip

}

if (!skip) {

f.apply(y, args);

}

literal(iid,val,hasGetterSetter){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第216行

这个回调是在字面量创建之后调用的。字面量可以是function字面量,object字面量,array字面量,a number,a string,a boolean,a regular expression,null,NaN,Infinity, or undefined。

Name                  Type             Description

iid                       num            此回调的静态唯一指令标识符

val                      *                  字面量的值

hasGetterSetter boolean              如果文字是一个对象,并且对象定义了getter和setter,则为true

Returns:

Type                           Description

Object |undefined - 如果函数返回一个对象,那么原始文本值将替换为存储在对象的result属性中的值。

x = "Hello"

// the above call roughly gets instrumented as follows:

var result = "Hello";

var aret = analysis.literal(201, result, false);

if (aret) {

result = aret.result;

}

x = result;

onReady (cb)

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第632行

如果您的分析正在node.js上运行(即,通过direct.js或jalangi.js命令),onReady是有用的,并且需要在检测到的程序启动之前完成一些异步初始化。在这种情况下,初始化完成后,调用cb函数开始执行被检测的程序。请注意,这种回调在浏览器中无效,因为Jalangi无法控制检测程序何时运行。

Name           Type             Description

cb

putField (iid,base,offset,val,isComputed,isOpAssign){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第342行

在写入对象的属性后调用此回调。

Name                  Type             Description

iid                       num            此回调的静态唯一指令标识符

base                   *                  基对象

offset                  *                   属性

val                       *                  要存储base[offset]的值

isComputed       boolean      如果使用方括号访问属性,则为true。例如,如果get字段操作是o[p],则isComputed为真,如果get字段操作为o.p,则为false

isOpAssign    boolean    如果操作是形式,则为真 o.p op= e

Returns:

Type                           Description

Object |undefined - 如果返回对象,则put字段操作的结果将替换为存储在对象的result属性中的值。

putFieldPre (iid,base,offset,val,isComputed,isOpAssign){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第324行

在对象的属性写入之前调用此回调。

Name                  Type             Description

iid                       num            此回调的静态唯一指令标识符

base                   *                  基对象

offset                 *                  属性

val                      *                  要存储base[offset]的值

isComputed       boolean      如果使用方括号访问属性,则为true。例如,如果get字段操作是o [p],则isComputed为真,如果get字段操作为o.p,则为false

isOpAssign         boolean      如果操作是形式,则为真 o.p op= e

Returns:

Type                           Description

Object |undefined - 如果返回一个对象,并且skip 属性为true,则跳过put字段操作。如果返回一个对象,原始的base,offset和 val将被替换为返回的对象。

read (iid,name,val,isGlobal,isScriptLocal){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第357行

读取变量后调用此回调。

Name           Type             Description

iid                num            此回调的静态唯一指令标识符

name           string           正在读取的变量的名称

val               *                  从变量读取的值

isGlobal      boolean      如果变量未使用var声明(如console),则为True

isScriptLocal boolean      如果变量在全局范围内使用var声明,则为true

Returns:

Type                           Description

Object |undefined - 如果返回一个对象,则读取操作的结果将替换为存储在对象的result属性中的值。

runInstrumentedFunctionBody (iid,f,functionIid){boolean}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第618行

仅当使用J$.Config.ENABLE_SAMPLING = true进行调用时才调用此回调。在执行函数、方法或构造函数的body之前调用此回调函数,如果返回true,则执行instrumented函数体,否则执行unlstrumented函数体。

Name           Type             Description

iid                num            此回调的静态唯一指令标识符

f                   function      正在被执行的函数

functionIid num            当执行函数f时, 传递给回调MyAnalysis#functionEnter的iid(即唯一指令标识符)。functionIid可以被视为该功能的静态标识符f。请注意,给定的功能代码块可以创建几个函数对象,但每个这样的对象都有一个通用的functionIid,这是在函数执行时传递给MyAnalysis#functionEnter的iid 。

Returns:

Type                           Description

Boolean              - 如果返回true则执行仪表功能体,否则执行未测量的功能体。

scriptEnter (iid,instrumentedFileName,originalFileName)

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第451行

在执行JavaScript文件之前调用此回调

Name                                Type             Description

iid                                     num            此回调的静态唯一指令标识符

instrumentedFileName   string           检测脚本文件的名称

originalFileName             string           原始脚本文件的名称

scriptExit (iid,wrappedExceptionVal){object}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第468行

当JavaScript文件的执行完成时,将调用此回调

Name                                Type                           Description

iid                                     num                          此回调的静态唯一指令标识符

wrappedExceptionVal     Object|undefind      如果此参数是一个对象,则脚本执行会引发未捕获的异常,异常存储在参数的异常 属性中

Returns:

Type             Description

Object     --如果返回一个对象,那么实际的wrappedExceptionVal.exception将被替换为返回的对象。如果返回一个对象并设置了属性isBacktrack,那么控制流将返回到脚本正文的开头。属性 isBacktrack可以设置为true,以反复执行脚本体,就像MultiSE符号执行一样。

unary(iid,op,left,result){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第542行

这个回调在一次操作后调用。一元操作包括+, - ,〜,!,typeof,void。

Name           Type      Description

iid                num     此回调的静态唯一指令标识符

op                string    要执行的操作

left              *           左操作数

result          *           一次性操作的结果

Returns:

Type                           Description

Object |undefined - 如果返回一个对象,则一元操作的结果将替换为存储在对象的result属性中的值。

unaryPre (iid,op,left){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第527行

这种回调在一元操作之前被调用。一元操作包括+, - ,〜,!,typeof,void。

Name           Type      Description

iid                num     此回调的静态唯一指令标识符

op                string    要执行的操作

left              *           左操作数

Returns:

Type                           Description

Object |undefined  -如果返回一个对象,并且 skip属性为true,则跳过一元操作。 如果返回对象,则原始op和left将被替换为返回对象。

write (iid,name,val,lhs,isGlobal,isScriptLocal){Object | undefined}

/Users/ksen/Dropbox/jalangi2/src/js/runtime/analysisCallbackTemplate.js,第373行

在写入变量之前调用此回调函数。

Name           Type             Description

iid                num            此回调的静态唯一指令标识符

name           string           正在读取的变量的名称

val               *                  要写入变量的值

lhs               *                  在写入操作之前存储在变量中的值

isGlobal      boolean      如果变量未使用var声明(如console),则为True

isScriptLocal boolean      如果变量在全局范围内使用var声明,则为真

Returns:

Type                           Description

Object |undefined  -如果返回对象,则写入操作的结果将替换为存储在对象的result属性中的值。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.05.21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档