加载过程
⾸先是类AliasLoadder中load()的调⽤,使⽤Laravel框架所带有的Facade功能去尝试加载我们payload中所需要的类。
⾸先提供所要加载的类是不是其中包含Facades,如果是则通过loadFacade()进⾏加载
通过load()没有加载成功,调⽤loadclass()进⾏加载,
loadclass()中通过调⽤findfile()尝试通过Laravel中的composer的⾃动加载功能含有的classmap去尝试寻要加载的类所对应的类⽂件位置,此时将会加载vendor⽬录中所有组件, 并⽣成namespace + classname的⼀个 key => value 的 php 数组来对所包含的⽂件来进⾏⼀个匹配
到类PendingCommand所对应的⽂件后,将通过includeFile()进⾏包含
完成类PendingCommand的整个加载流程
bootstrapped
中,⾸先要调⽤mockConsoleOutput()
,调⽤了Mockery的函数。F7进⼊,这⾥⼜进⾏⼀次对象模拟。
这⾥要⽤到php魔术⽅法中的⼀个⼩trick,当访问⼀个类中不存在的属性时会触发get(),通过去触发get()⽅法去进⼀步构造pop链,
$abstract赋值为了Application,并且make()⼜调⽤了resolve(),即实现了第⼆次调⽤isBuildable()判断是否可以进⾏实例化,即此时已
其中第⼀个分⽀isCallableWithAtSign()判断回调函数是否为字符串并且其中含有@,并且$defaultMethod默认为null,显然此时不满⾜if条件,即进⼊第⼆个分⽀,callBoundMethod()的调⽤.
static::callBoundMethod只是判断我们的$callback是否为数组。后⾯的匿名函数直接调⽤call_user_func_array(),并且第⼀个参数我们可

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。