在 lua 字节码中将 EQ 更改为非 EQ
Change EQ to a not EQ in lua bytecode
我正在尝试对 lua 5.1 字节码文件进行二进制修补。
我不知道如何在十六进制转储中将 EQ 操作的十六进制表示更改为非 EQ。
没有NEQ操作码。比较的是EQ还是NEQ是
由 EQ 操作码中的 A 字段控制。参见 https://www.lua.org/source/5.1/lopcodes.h.html#OP_EQ。
EQ 1 B C
表示 if B == C
,EQ 0 B C
表示 if B ~= C
。
在生成的二进制文件上尝试使用 luac -l 和 xxd 的简单示例。
EQ 操作码中的位布局是 B C A OP
。参见 https://www.lua.org/source/5.1/lopcodes.h.html#POS_OP。
所以 A OP
在 EQ 比较中给出 0x57 字节,而 A OP
在 NEQ 比较中给出 0x17 字节。
因此,您需要将一个字节从 0x57 更改为 0x17。你只需要知道哪个字节:-)
我正在尝试对 lua 5.1 字节码文件进行二进制修补。 我不知道如何在十六进制转储中将 EQ 操作的十六进制表示更改为非 EQ。
没有NEQ操作码。比较的是EQ还是NEQ是 由 EQ 操作码中的 A 字段控制。参见 https://www.lua.org/source/5.1/lopcodes.h.html#OP_EQ。
EQ 1 B C
表示 if B == C
,EQ 0 B C
表示 if B ~= C
。
在生成的二进制文件上尝试使用 luac -l 和 xxd 的简单示例。
EQ 操作码中的位布局是 B C A OP
。参见 https://www.lua.org/source/5.1/lopcodes.h.html#POS_OP。
所以 A OP
在 EQ 比较中给出 0x57 字节,而 A OP
在 NEQ 比较中给出 0x17 字节。
因此,您需要将一个字节从 0x57 更改为 0x17。你只需要知道哪个字节:-)