在 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 == CEQ 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。你只需要知道哪个字节:-)