Support for variable size structure array in decompiler
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 35/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Lĩnh vực
- compilers, reverse-engineering
Hướng nghiên cứu
Start with the supplied C reproduction and compare its current HLIL output with the expected indexed structure-array accesses. Trace the decompiler path responsible for structure-member and pointer-array indexing, then add coverage demonstrating the expected output and verify that both the allocation loop and print_persons example decompile correctly.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
I've a structure which have a variable sized structure array in it. After importing and setting types it decompiled like this in HLIL:
people people
people.count = 0
people.arr = malloc(0x30)
... (memset )
for (int32_t i = 0; i s<= 3; i = i + 1)
//expected: people.arr[i].age = i
people.arr[sx.q(i) * 4] = i
//expected: people.arr[i].name = "test name"
*(people.arr + sx.q(i) * 0x10 + 8) = "test name"
people.count = people.count + 1
print_persons(people: &people)
print_persons
for (int32_t i = 0; i s< 3; i = i + 1)
printf("Person: %s, Age:%d\n", people->arr[sx.q(i)].name, zx.q(people->arr[sx.q(i)].age))
I guess this is not a bug, but a feature not implemented yet. I could not find an issue for it so creating one for tracking it.
Test code:
typedef struct _person
{
int age;
char* name;
}person;
typedef struct _people
{
int count;
person* arr;
}people;
void print_persons(people *people)
{
for (int i = 0; i < 3; i++)
{
printf("Person: %s, Age:%d\n", people->arr[i].name, people->arr[i].age);
}
}
int main()
{
people people;
people.count = 0;
people.arr = malloc(sizeof(person) * 3);
memset(people.arr, 0, sizeof(person) * 3);
for (int i = 0; i <= 3; i++)
{
people.arr[i].age = i;
people.arr[i].name = "test name";
people.count++;
}
print_persons(&people);
}
- Ngôn ngữ chính
- C++
- Star
- 1.3k
- Fork
- 298
- Merge trung bình
- 5 ngày 5 giờ
- Pull request đã merge (30 ngày)
- 19
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của Vector35/binaryninja-api
-
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 88/100
Vector35/binaryninja-api#8540 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
Vector35/binaryninja-api#8516 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 92/100
Vector35/binaryninja-api#8503 ·
-
normalize time logs from WARP Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
Vector35/binaryninja-api#8446 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
Vector35/binaryninja-api#8444 ·
Tất cả issue của Vector35/binaryninja-api
Issue tương tự
-
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 92/100
autowarefoundation/autoware_universe#13413 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
-
automated-analysis bug memory-safety
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
-
Sensor initialization takes very long when `--initial-sim-time` is set to current UNIX timestamp Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
gazebosim/gz-sensors#662 · 1 bình luận ·