本帖最后由 斗战胜猴 于 2025-7-15 13:57 编辑
Call方法 JMP方法 纯汇编
Call原理 将参数倒叙 压入堆栈 再call [函数地址+方法序号*4] 或 [[类指针]+方法序号*4]
Call方法 一次性汇编调用 支持 传递 类变量 和 类指针,纯call汇编
JMP方法 调用2次 原理
JMP [函数地址+方法序号*4] ,this0,参数一,参数2
JMP [[类指针]+方法序号*4], this0,参数一,参数2
也可以写 调用一次为了方便大家理解 取对象方法 和 取类方法 的地址 调用子程序时 需要加一个参数才行,this0
类的方法参数1开始 都是+8的关系,故压堆栈偏移需要调整。不然传参数都是1。
不同点 是方法序号
Call方法类对象 _初始化没有 ,_销毁0 方法1是1 做了递增序号
Call方法类地址 仿 类_取内部方法地址 的方法序号 _初始化1 ,_销毁2 方法1是3 ,做了递减序号
Call方法对象 _初始化没有 ,_销毁1 方法1是2 未做序号加减
JMP方法对象指针 CallObject _初始化0 ,_销毁1 方法1是2, 未做序号加减
JMP方法类指针 _初始化没有 ,_销毁0 方法1是1 做了递增序号
因为 精益的 类_取内部方法地址 每次都需要申请 物理内存,还需要释放 非常麻烦,故而决定搞搞看。
更新Call类 支持 集变量 识别
补充内容 (2025-7-16 00:16):
.版本 2
.子程序 Call类汇编, 整数型, 公开, _初始化没有 ,_销毁没有 方法1是1 函数地址=[[对象指针]+方法索引*4+4]
.参数 对象指针, 整数型, , 函数地址=[[对象指针]+方法索引*4+4]
.参数 方法索引, 整数型, , _初始化没有 ,_销毁没有 方法1是1
.参数 参数1, 整数型, 可空, 0x10
.参数 参数2, 整数型, 可空, 0x18
.参数 参数3, 整数型, 可空, 0x20
.参数 参数4, 整数型, 可空, 0x28
.参数 参数5, 整数型, 可空, 0x30
.参数 参数6, 整数型, 可空, 0x38
.参数 参数7, 整数型, 可空, 0x40
.参数 参数8, 整数型, 可空, 0x48
.参数 参数9, 整数型, 可空, 0x50
.参数 参数10, 整数型, 可空, 0x58
.参数 参数11, 整数型, 可空, 0x60
.参数 参数12, 整数型, 可空, 0x68
.参数 参数13, 整数型, 可空, 0x70
.参数 参数14, 整数型, 可空, 0x78
置入代码 ({ 49, 192, 131, 125, 8, 0, 116, 61, 131, 125, 12, 0, 116, 55, 255, 117, 120, 255, 117, 112, 255, 117, 104, 255, 117, 96, 255, 117, 88, 255, 117, 80, 255, 117, 72, 255, 117, 64, 255, 117, 56, 255, 117, 48, 255, 117, 40, 255, 117, 32, 255, 117, 24, 255, 117, 16, 139, 77, 12, 80, 139, 69, 8, 139, 0, 255, 84, 136, 4, 201, 194, 120, 0 })
返回 (0)
|