lua虚拟机字节码修改_[求助]lua虚拟机字节码怎么改变

本文讨论了如何将lua虚拟机的字节码指令按照新的顺序进行排列,提供了原始指令和目标指令的对应关系。
摘要由CSDN通过智能技术生成

*/

OP_GETGLOBAL,/*        A Bx        R(A) := Gbl[Kst(Bx)]                                */

OP_GETTABLE,/*        A B C        R(A) := R(B)[RK(C)]                                */

OP_SETGLOBAL,/*        A Bx        Gbl[Kst(Bx)] := R(A)                                */

OP_SETUPVAL,/*        A B        UpValue:= R(A)                                */

OP_SETTABLE,/*        A B C        R(A)[RK(B)] := RK(C)                                */

OP_NEWTABLE,/*        A B C        R(A) := {} (size = B,C)                                */

OP_SELF,/*        A B C        R(A+1) := R(B); R(A) := R(B)[RK(C)]                */

OP_ADD,/*        A B C        R(A) := RK(B) + RK(C)                                */

OP_SUB,/*        A B C        R(A) := RK(B) - RK(C)                                */

OP_MUL,/*        A B C        R(A) := RK(B) * RK(C)                                */

OP_DIV,/*        A B C        R(A) := RK(B) / RK(C)                                */

OP_MOD,/*        A B C        R(A) := RK(B) % RK(C)                                */

OP_POW,/*        A B C        R(A) := RK(B) ^ RK(C)                                */

OP_UNM,/*        A B        R(A) := -R(B)                                        */

OP_NOT,/*        A B        R(A) := not R(B)                                */

OP_LEN,/*        A B        R(A) := length of R(B)                                */

OP_CONCAT,/*        A B C        R(A) := R(B).. ... ..R(C)                        */

OP_JMP,/*        sBx        pc+=sBx                                        */

OP_EQ,/*        A B C        if ((RK(B) == RK(C)) ~= A) then pc++                */

OP_LT,/*        A B C        if ((RK(B)

OP_LE,/*        A B C        if ((RK(B) <= RK(C)) ~= A) then pc++                  */

OP_TEST,/*        A C        if not (R(A) <=> C) then pc++                        */

OP_TESTSET,/*        A B C        if (R(B) <=> C) then R(A) := R(B) else pc++        */

OP_CALL,/*        A B C        R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1)) */

OP_TAILCALL,/*        A B C        return R(A)(R(A+1), ... ,R(A+B-1))                */

OP_RETURN,/*        A B        return R(A), ... ,R(A+B-2)        (see note)        */

OP_FORLOOP,/*        A sBx        R(A)+=R(A+2);

if R(A) = R(A+1) then { pc+=sBx; R(A+3)=R(A) }*/

OP_FORPREP,/*        A sBx        R(A)-=R(A+2); pc+=sBx                                */

OP_TFORLOOP,/*        A C        R(A+3), ... ,R(A+2+C) := R(A)(R(A+1), R(A+2));

if R(A+3) ~= nil then R(A+2)=R(A+3) else pc++        */

OP_SETLIST,/*        A B C        R(A)[(C-1)*FPF+i] := R(A+i), 1 <= i <= B        */

OP_CLOSE,/*        A         close all variables in the stack up to (>=) R(A)*/

OP_CLOSURE,/*        A Bx        R(A) := closure(KPROTO[Bx], R(A), ... ,R(A+n))        */

OP_VARARG/*        A B        R(A), R(A+1), ..., R(A+B-1) = vararg                */

} OpCode;

这是lua源码虚拟机指令的代码。

我需要改成下面这对应的顺序需要怎么改呢

OP_MOVE          0        25

OP_LOADK        1        19

OP_LOADBOOL        2        9

OP_LOADNIL        3        0

OP_GETUPVAL        4        22

OP_GETGLOBAL        5        28

OP_GETTABLE        6        20

OP_SETGLOBAL        7        26

OP_SETUPVAL        8        30

OP_SETTABLE        9        15

OP_NEWTABLE        10        5

OP_SELF        11        27

OP_ADD        12        33

OP_SUB        13        1

OP_MUL        14        29

OP_DIV        15        11

OP_MOD        16        13

OP_POW        17        23

OP_UNM        18        2

OP_NOT        19        31

OP_LEN        20        6

OP_CONCAT        21        34

OP_JMP        22        35

OP_EQ        23        36

OP_LT        24        17

OP_LE        25        7

OP_TEST        26        16

OP_TESTSET        27        4

OP_CALL        28        21

OP_TAILCALL        29        18

OP_RETURN        30        12

OP_FORLOOP        31        14

OP_FORPREP        32        10

OP_TFORLOOP        33        24

OP_SETLIST        34        8

OP_CLOSE        35        32

OP_CLOSURE        36        3

OP_VARARG        37        37

左边为原来的编码 右边为需要更改之后的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值