* PDB: add module info parsing * Refactor PDB component * Refactor PDB/tpi * Fix read_pascal_string * Fix memory leaks * Add test `Modules from PDB`
177 lines
3.5 KiB
Text
177 lines
3.5 KiB
Text
NAME=idp flags
|
|
FILE=bins/pdb/SimplePDB.exe
|
|
CMDS=<<EOF
|
|
idp bins/pdb/SimplePDB.pdb
|
|
fi 1 @ 0x00401000
|
|
fi 1 @ 0x00401010
|
|
EOF
|
|
EXPECT=<<EOF
|
|
0x00401000 4096 section..text
|
|
0x00401000 0 pdb.SimplePDB.void___cdecl_SomeCoolFunction_void
|
|
0x00401010 0 pdb.SimplePDB._main
|
|
EOF
|
|
RUN
|
|
|
|
NAME=idp bin state bug (#9441)
|
|
FILE=bins/pdb/SimplePDB.exe
|
|
CMDS=<<EOF
|
|
e asm.bits
|
|
idpi bins/pdb/SimplePDB.pdb~SomeCoolFunction
|
|
e asm.bits
|
|
EOF
|
|
EXPECT=<<EOF
|
|
32
|
|
0x00401000 4366 .text void __cdecl SomeCoolFunction(void)
|
|
32
|
|
EOF
|
|
RUN
|
|
|
|
NAME=idpij
|
|
FILE==
|
|
CMDS=idpij bins/pdb/minimal.pdb~{}
|
|
EXPECT=<<EOF
|
|
[
|
|
{
|
|
"modules": [
|
|
{
|
|
"module_name": "* Linker Generated Manifest RES *",
|
|
"object_file_name": ""
|
|
},
|
|
{
|
|
"module_name": "C:\\Users\\emuresan\\source\\repos\\minimal\\Release\\main.obj",
|
|
"object_file_name": "C:\\Users\\emuresan\\source\\repos\\minimal\\Release\\main.obj"
|
|
},
|
|
{
|
|
"module_name": "* Linker *",
|
|
"object_file_name": ""
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"types": [
|
|
{
|
|
"type": "structure",
|
|
"name": "struct_typedef",
|
|
"size": 7,
|
|
"members": [
|
|
{
|
|
"member_type": "char",
|
|
"member_name": "a",
|
|
"offset": 0
|
|
},
|
|
{
|
|
"member_type": "int16_t",
|
|
"member_name": "b",
|
|
"offset": 1
|
|
},
|
|
{
|
|
"member_type": "int32_t",
|
|
"member_name": "c",
|
|
"offset": 3
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "union",
|
|
"name": "type_0x1004",
|
|
"size": 4,
|
|
"members": [
|
|
{
|
|
"member_type": "char [4]",
|
|
"member_name": "a",
|
|
"offset": 0
|
|
},
|
|
{
|
|
"member_type": "int32_t",
|
|
"member_name": "b",
|
|
"offset": 0
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "structure",
|
|
"name": "unnamed_member_types_typedef",
|
|
"size": 8,
|
|
"members": [
|
|
{
|
|
"member_type": "union type_0x1004",
|
|
"member_name": "a",
|
|
"offset": 0
|
|
},
|
|
{
|
|
"member_type": "int32_t",
|
|
"member_name": "b",
|
|
"offset": 4
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "structure",
|
|
"name": "bitfield_typedef",
|
|
"size": 1,
|
|
"members": [
|
|
|
|
]
|
|
},
|
|
{
|
|
"type": "union",
|
|
"name": "union_typedef",
|
|
"size": 4,
|
|
"members": [
|
|
{
|
|
"member_type": "char",
|
|
"member_name": "a",
|
|
"offset": 0
|
|
},
|
|
{
|
|
"member_type": "int16_t",
|
|
"member_name": "b",
|
|
"offset": 0
|
|
},
|
|
{
|
|
"member_type": "int32_t",
|
|
"member_name": "c",
|
|
"offset": 0
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"gvars": [
|
|
{
|
|
"address": 12292,
|
|
"symtype": 4366,
|
|
"section_name": ".data",
|
|
"gdata_name": "_uninitialized_global"
|
|
},
|
|
{
|
|
"address": 12288,
|
|
"symtype": 4366,
|
|
"section_name": ".data",
|
|
"gdata_name": "_initialized_global"
|
|
},
|
|
{
|
|
"address": 4096,
|
|
"symtype": 4366,
|
|
"section_name": ".text",
|
|
"gdata_name": "_function"
|
|
},
|
|
{
|
|
"address": 4182,
|
|
"symtype": 4366,
|
|
"section_name": ".text",
|
|
"gdata_name": "_mainCRTStartup"
|
|
},
|
|
{
|
|
"address": 4120,
|
|
"symtype": 4366,
|
|
"section_name": ".text",
|
|
"gdata_name": "_main"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
EOF
|
|
RUN
|
|
|