Ghidra 索引 C 四字
Ghidra Indexing C quad word
有这个 Ghidra 反编译的 C 代码。
我知道 local_60 是一个四字词,但我不明白如何索引它
这里的local_60._3_1_
指的是什么?
local_60 = 0x6c46575935676a5a;
local_28 = 0x7945474e3563544f;
printf("Enter access code: ");
__isoc99_scanf(&DAT_0010201c,&DAT_001040c0);
if ((((DAT_001040c0 == 'f') && (DAT_001040c1 == 'b')) && (DAT_001040c2 == local_60._3_1_)) &&
((DAT_001040c3 == '6' && (DAT_001040c4 == local_28._2_1_)))) {
您通常可以点击反编译的C代码部分并突出显示原始汇编产生的部分,这可以帮助您理解ghidra _3_1_和_2_1_的含义。
根据我的经验,_X_Y_ 语法通常意味着代码试图通过考虑 8 个字节中的单个字节的值来“索引”到像数组这样的整数。除此之外,如果您检查来自两个常量 0x6c46575935676a5a
和 0x7945474e3563544f
的字节值,您可能会注意到所有字节都是正确的 ASCII 字符。这两件事表明 local_60 和 local_28 应该是 char[8]
而不是整数。您应该能够右键单击变量声明并手动更改它们的类型,这可以通过将语法更改为数组索引和数组初始化来提高代码的可读性。
有这个 Ghidra 反编译的 C 代码。
我知道 local_60 是一个四字词,但我不明白如何索引它
这里的local_60._3_1_
指的是什么?
local_60 = 0x6c46575935676a5a;
local_28 = 0x7945474e3563544f;
printf("Enter access code: ");
__isoc99_scanf(&DAT_0010201c,&DAT_001040c0);
if ((((DAT_001040c0 == 'f') && (DAT_001040c1 == 'b')) && (DAT_001040c2 == local_60._3_1_)) &&
((DAT_001040c3 == '6' && (DAT_001040c4 == local_28._2_1_)))) {
您通常可以点击反编译的C代码部分并突出显示原始汇编产生的部分,这可以帮助您理解ghidra _3_1_和_2_1_的含义。
根据我的经验,_X_Y_ 语法通常意味着代码试图通过考虑 8 个字节中的单个字节的值来“索引”到像数组这样的整数。除此之外,如果您检查来自两个常量 0x6c46575935676a5a
和 0x7945474e3563544f
的字节值,您可能会注意到所有字节都是正确的 ASCII 字符。这两件事表明 local_60 和 local_28 应该是 char[8]
而不是整数。您应该能够右键单击变量声明并手动更改它们的类型,这可以通过将语法更改为数组索引和数组初始化来提高代码的可读性。