我正在用 VLA 测试一些“C”代码。Hex-Rays 无法识别 VLA 并不奇怪。与结构一样,有一些方法可以让它理解(简单地使你认为它是结构的变量类型) - VLA 有类似的东西吗?
十六进制射线是否以任何方式支持 VLA?
逆向工程
艾达
C
六线谱
大批
2021-06-17 13:57:15
1个回答
看起来 Hexrays 不支持这个。
按照可变长度数组的说明(https://www.hex-rays.com/products/ida/support/tutorials/varstr/index.shtml)表明它确实适用于 IDA 反汇编和设置类型(热键 Y) ,但不在反编译器输出(Hexrays)中。
示例来源:
typedef struct {
int a;
int b;
char c[0];
} foo;
int main() {
foo* f = malloc(512);
f->c[123] = 0;
}
IDA 中定义的结构:
00000000 struc_1 struc ; (sizeof=0x8, mappedto_1, variable size)
00000000 a dd ?
00000004 b dd ?
00000008 c db 0 dup(?) ; XREF: main+1D/w
00000008 struc_1 ends
注释后反汇编示例:
push ebp
mov ebp, esp
and esp, 0FFFFFFF0h
sub esp, 20h
mov dword ptr [esp], 200h ; size
call _malloc
mov [esp+1Ch], eax
mov eax, [esp+1Ch]
mov [eax+(struc_1.c+7Bh)], 0
leave
retn
反编译输出示例:
int __cdecl main(int argc, const char **argv, const char **envp)
{
struc_1 *result; // eax@1
result = (struc_1 *)malloc(0x200u);
BYTE3(result[0x10].a) = 0;
return (int)&result->a;
}