CONCAT15 和 CONCAT412 在 ghidra 中意味着什么?

Mee*_*ski 6 ghidra

我在 ghidra 中反编译了一个文件,在反编译文件中看到了很多 CONCAT+RandomNumber!

它们是什么意思?

bor*_*orn 17

我先引用一下 Ghidra 帮助(F1):

CONCAT31(x,y)- 连接运算符 -PIECE 数字“3”表示输入操作数“x”的大小(以字节为单位)。数字“1”表示输入操作数“y”的大小(以字节为单位)。参数“x”和“y”保存连接的值。

      CONCAT31(0xaabbcc,0xdd) = 0xaabbccdd
Run Code Online (Sandbox Code Playgroud)

将“x”中的字节与“y”中的字节连接起来。在结果中,“x”成为最高有效字节,“y”成为最低有效字节。因此,所有这些带有 前缀的“函数”都CONCAT属于 Ghidra 使用的一组内部反编译器函数,用于表达通常不能简单地以类似 C 的高级表示形式表达的内容。

CONCAT特别是可以将其建模为将第一个参数左移第二个参数的大小,然后对两个参数进行逻辑与运算。但对于人类来说,更容易将其视为“将两件事放在一起”。

CONCAT仅当传递的参数不是预期大小时,后面的数字才重要,并且可能主要是为了使事情更加明确。具体来说,您不应该读CONCAT15作“concat 15”,而应读作“concat one 5”:第一个参数的大小预计为一个字节,而第二个参数的大小为 5,总计为 6 个字节CONCAT15(0x12, 0x3456789012):与 相同0x123456789012

PS:CONCAT412几乎肯定意味着连接412字节,而不是412

  • 是的,对于 XX=58 :) (4认同)
  • 那么 concatXX("Stack","Overflow") 等于 StackOverflow 吗? (2认同)