hiện tại tôi đang viết chương trình nhỏ đọc tiêu đề tệp elf và in một số thông tinĐọc ELF tiêu đề trong C
Tôi có một con trỏ char chưa ký tên là buf trỏ đến vị trí tệp elf nằm trong bộ nhớ (I sử dụng mmap để ánh xạ nó vào bộ nhớ), sau đó tôi định kiểu nó vào một hợp tinh con trỏ tiêu đề
Elf32_Ehdr *ehdr = (Elf32_Ehdr *)buf;
Sau này tôi muốn để có được một địa chỉ của bảng tiêu đề chương trình, tôi làm điều đó như thế này
Elf32_Phdr *ptbl = (Elf32_Phdr *) (buf + ehdr->e_phoff)
Như tôi đã nhận thấy giá trị của con trỏ ptbl không thay đổi và khi tôi cố gắng để in giá trị của các thành viên e_phoff như thế này
fprintf(stdout , "Offset of program headers : %d\n", ehdr->e_phoff);
tôi nhận được không Cùng những thứ sẽ xảy ra khi tôi cố gắng để in số chương trình tiêu đề và số tiêu đề phần - luôn nhận được số không Nếu tôi sử dụng chế độ đọc linux, nó in các giá trị thích hợp Có ai gặp phải sự cố tương tự không?
Tôi nghĩ rằng tôi đã tìm thấy vấn đề, tôi đang sử dụng máy 64 bit, vì vậy tôi vừa thay đổi Elf32_Phdr thành Elf64_Phdr và nó đã hoạt động –
Tiếp tục trả lời câu hỏi của riêng bạn. Đó là một điều hợp lệ để làm, nếu bạn tìm thấy câu trả lời đầu tiên. Rõ ràng, bạn đã sử dụng kiểu con trỏ struct sai, vì vậy bạn đã tham khảo bộ nhớ ngược dòng về những gì dự định. –
Tôi đề nghị sử dụng libelf. –