¼¼Êõ·ÖÏíchromeexploit

白癜风早期有什么症çŠ? http://m.39.net/pf/a_6320392.html

ǰÑÔ

±¾ÆªÖ÷ÒªÊǶÔzer0conÉÏchromeexploitationÒéÌâv8²¿·ÖµÄ½â¶Á¡£

Õâ¸ö©¶´·¢ÉúÔÚSimplifiedLoweringphaseµÄVisitSpeculativeIntegerAdditiveOpº¯ÊýÖУ¬¸Ãº¯ÊýÊÇÓÃÀ´´¦ÀíSpeculativeSafeIntegerAdd/SpeculativeSafeIntegerSubtract½Úµã£¬¶ÔÆäÖØÐ¼ÆËãÀàÐͲ¢½«Æäת»¯»òÕß½µ¼¶µ½¸üµ×²ãµÄIR¡£Õâ¸öº¯Êý·Ç³£ÓÐȤ£¬¾ÝÎÒËùÖªËüÒѾ­³öÁËÈý¸ö¿ÉÒÔRCEµÄ©¶´ÁË

SimplifiedlowingphaseºÍRootCause

propagatingtruncations:·´ÏòÊý¾ÝÁ÷·ÖÎö£¬´«²¥truncation£¬²¢ÉèÖÃrestriction_typeretype:ÕýÏòÊý¾ÝÁ÷·ÖÎö£¬ÖØÐ¼ÆËãÀàÐÍ£¬²¢ÉèÖÃrepresentation¡£lower:½µ¼¶(lower)½Úµã»òÕß²åÈëת»»(conversion)½ÚµãÖØÒªµÄÊý¾Ý½á¹¹ºÍº¯ÊýNodeInfo£¬¼Ç¼Êý¾ÝÁ÷·ÖÎöÖнڵãµÄ¸÷ÖÖÀàÐÍÐÅÏ¢£¬Ö÷Òª°üÀ¨truncation(Ö¸Ã÷¸Ã½ÚµãÔÚʹÓõÄʱºòµÄ½Ø¶ÏÐÅÏ¢)£¬restriction_type(ÔÚtruncation´«²¥½×¶ÎÉèÖÃËüµÄÖµ£¬ÓÃÓÚÔÚretypeµÄʱºòÉèÖÃfeedback_type)£¬feedback_type£¨ÓÃÓÚÔÚRetypephaseÖØÐ¼ÆËãtypeÐÅÏ¢£©£¬representation£¨½ÚµãretypeÍê³ÉÖ®ºó×îÖյıíʾÀàÐÍ£¬¿ÉÒÔÓÃÓÚÖ¸Ã÷Ó¦¸ÃÈçºÎlowerµ½¸ü¾ßÌåµÄ½Úµã£¬ÊÇ·ñÐèÒªConvert£©µÈ¡£

//Informationforeachnodetrackedduringthefixpoint.classNodeInfofinal{public://Addsnewusetothenode.Returnstrueifsomethinghaschanged//andthenodehastoberequeued.boolAddUse(UseInfoinfo){Truncationold_truncation=truncation_;truncation_=Truncation::Generalize(truncation_,info.truncation());returntruncation_!=old_truncation;}voidset_queued(){state_=kQueued;}voidset_visited(){state_=kVisited;}voidset_pushed(){state_=kPushed;}voidreset_state(){state_=kUnvisited;}boolvisited()const{returnstate_==kVisited;}boolqueued()const{returnstate_==kQueued;}boolpushed()const{returnstate_==kPushed;}boolunvisited()const{returnstate_==kUnvisited;}Truncationtruncation()const{returntruncation_;}voidset_output(MachineRepresentationoutput){representation_=output;}MachineRepresentationrepresentation()const{returnrepresentation_;}//Helpersforfeedbacktyping.voidset_feedback_type(Typetype){feedback_type_=type;}Typefeedback_type()const{returnfeedback_type_;}voidset_weakened(){weakened_=true;}boolweakened()const{returnweakened_;}voidset_restriction_type(Typetype){restriction_type_=type;}Typerestriction_type()const{returnrestriction_type_;}private:enumState:uint8_t{kUnvisited,kPushed,kVisited,kQueued};Statestate_=kUnvisited;MachineRepresentationrepresentation_=MachineRepresentation::kNone;//Outputrepresentation.Truncationtruncation_=Truncation::None();//Informationaboutuses.Typerestriction_type_=Type::Any();Typefeedback_type_;boolweakened_=false;};ProcessInputÕâÊÇÒ»¸öÄ£°åº¯Êý£¬¸ù¾Ý²»Í¬µÄphaseµ÷Óò»Í¬µÄʵÏÖ£¬¶ÔÓÚtruncationpropagatephase£¬Ëü½«Ö±½Óµ÷ÓÃEnqueueInput¡£

templatevoidRepresentationSelector::ProcessInputPROPAGATE(Node*node,intindex,UseInfouse){DCHECK_IMPLIES(use.type_check()!=TypeCheckKind::kNone,!node-op()-HasProperty(Operator::kNoDeopt)node-op()-EffectInputCount()0);EnqueueInputPROPAGATE(node,index,use);}templatevoidRepresentationSelector::ProcessInputRETYPE(Node*node,intindex,UseInfouse){DCHECK_IMPLIES(use.type_check()!=TypeCheckKind::kNone,!node-op()-HasProperty(Operator::kNoDeopt)node-op()-EffectInputCount()0);}templatevoidRepresentationSelector::ProcessInputLOWER(Node*node,intindex,UseInfouse){DCHECK_IMPLIES(use.type_check()!=TypeCheckKind::kNone,!node-op()-HasProperty(Operator::kNoDeopt)node-op()-EffectInputCount()0);ConvertInput(node,index,use);}...//Convertsinput{index}of{node}accordingtogivenUseInfo{use},//assumingthetypeoftheinputis{input_type}.If{input_type}isnull,//ittakestheinputfromtheinputnode{TypeOf(node-InputAt(index))}.voidConvertInput(Node*node,intindex,UseInfouse,Typeinput_type=Type::Invalid()){//Inthechangephase,insertachangebeforetheuseifnecessary.if(use.representation()==MachineRepresentation::kNone)return;//Noinputrequirementontheuse.Node*input=node-InputAt(index);DCHECK_NOT_NULL(input);NodeInfo*input_info=GetInfo(input);MachineRepresentationinput_rep=input_info-representation();if(input_rep!=use.representation()

use.type_check()!=TypeCheckKind::kNone){//Outputrepresentationdoesntmatchusage.TRACE("change:#%d:%s(

%d#%d:%s)",node-id(),node-op()-mnemonic(),index,input-id(),input-op()-mnemonic());TRACE("from%sto%s:%s\n",MachineReprToString(input_info-representation()),MachineReprToString(use.representation()),use.truncation().description());if(input_type.IsInvalid()){input_type=TypeOf(input);}Node*n=changer_-GetRepresentationFor(input,input_rep,input_type,node,use);node-ReplaceInput(index,n);}}EnqueueInputÕâ¸öº¯ÊýÏÈ´ÓÈ«¾ÖÊý×éÀïÈ¡³önodeµÄÖ¸¶¨indexµÄÊäÈë½Úµã¶ÔÓ¦µÄNodeInfoÐÅÏ¢£¬È»ºóµ÷ÓÃAddUseÀ´¸üÐÂinfoµÄtruncation_×ֶΣ¬´Ó¶ø½«truncation·´Ïò´«²¥¡£

//Enqueue{use_node}s{index}inputifthe{use_info}containsnewinformation//forthatinputnode.templatevoidRepresentationSelector::EnqueueInputPROPAGATE(Node*use_node,intindex,UseInfouse_info){Node*node=use_node-InputAt(index);NodeInfo*info=GetInfo(node);#ifdefDEBUG//Checkmonotonicityofinputrequirements.node_input_use_infos_[use_node-id()].SetAndCheckInput(use_node,index,use_info);#endif//DEBUGif(info-unvisited()){info-AddUse(use_info);TRACE("initial#%i:%s\n",node-id(),info-truncation().description());return;}TRACE("queue#%i?:%s\n",node-id(),info-truncation().description());if(info-AddUse(use_info)){//Newusageinformationforthenodeisavailable.if(!info-queued()){DCHECK(info-visited());revisit_queue_.push(node);info-set_queued();TRACE("added:%s\n",info-truncation().description());}else{TRACE("inqueue:%s\n",info-truncation().description());}}}boolAddUse(UseInfoinfo){Truncationold_truncation=truncation_;truncation_=Truncation::Generalize(truncation_,info.truncation());returntruncation_!=old_truncation;}SetOutputÕâ¸öº¯ÊýÒ²ÊÇÄ£°åº¯Êý£¬¸ù¾Ý²»Í¬phaseµ÷Óò»Í¬µÄÆ«ÌØ»¯ÊµÏÖ¶ÔÓÚtruncationpropagatephase£¬Ëü½«¸üнڵã¶ÔÓ¦µÄnodeinfoµÄrestriction_type_£¬²¢ÓÃÓÚºóÐøµÄretypephaseÉÏ¡£¶ÔÓÚretypephase£¬Ëü½«¸üнڵãµÄrepresentation±íʾ¡£

templatevoidRepresentationSelector::SetOutputPROPAGATE(Node*node,MachineRepresentationrepresentation,Typerestriction_type){NodeInfo*constinfo=GetInfo(node);info-set_restriction_type(restriction_type);}templatevoidRepresentationSelector::SetOutputRETYPE(Node*node,MachineRepresentationrepresentation,Typerestriction_type){NodeInfo*constinfo=GetInfo(node);DCHECK(restriction_type.Is(info-restriction_type()));info-set_output(representation);}templatevoidRepresentationSelector::SetOutputLOWER(Node*node,MachineRepresentationrepresentation,Typerestriction_type){NodeInfo*constinfo=GetInfo(node);DCHECK_EQ(info-representation(),representation);DCHECK(restriction_type.Is(info-restriction_type()));USE(info);}

PoC

Issue



×ªÔØÇë×¢Ã÷µØÖ·:http://www.gongjingmilanagjml.com/glyy/7626.html
  • ÉÏһƪÎÄÕ£º
  • ÏÂһƪÎÄÕ£º
  • ÈȵãÎÄÕÂ

    • ûÓÐÈȵãÎÄÕÂ

    ÍÆ¼öÎÄÕÂ

    • ûÓÐÍÆ¼öÎÄÕÂ