Tôi đang cố gắng xử lý đầu ra của một nm hoặc readelf -s trên một tệp thực thi. Tuy nhiên, tôi gặp khó khăn trong việc phân biệt các hàm tĩnh với nhau trong đầu ra.Làm thế nào tôi có thể phân biệt các chức năng tĩnh với đầu ra nm hoặc đọc trong C
Dưới đây là những gì tôi đang làm việc với:
test.c
static int foo() {
int x = 6;
}
main() {}
other.c
static int foo() {
int x = 5;
}
tôi biên soạn những như vậy:
gcc -o test test.c other.c
Và sau đó chạy một lệnh nm để có được tất cả các biểu tượng:
nm test
Trong đó hai biểu tượng sau (đối với chức năng tĩnh của tôi) xuất hiện:
00000000004004ed t foo
0000000000400500 t foo
Có một phương pháp để có thể thế nào để phân biệt các tập tin chức năng foo cụ thể xuất hiện từ đâu? Hoặc tôi sẽ cần phải làm một số phép thuật trước khi biên dịch để có được điều này để làm việc?
Tôi nên thêm điều đó vào trường hợp sử dụng của mình, tôi có quyền truy cập vào tệp nhị phân cuối cùng và tệp đối tượng được sử dụng, nhưng tôi không thể tự xây dựng nó để đảm bảo rằng nó có bảng biểu tượng.
Cảm ơn!
theo như tôi biết thông tin tệp nguồn được lưu trữ trong thông tin gỡ lỗi. Hoàn toàn bị tước nhị phân sẽ không có thông tin như vậy. Để đọc thông tin gỡ lỗi, hãy xem tùy chọn 'readelf' --debug-dump. Tương tự --debug-syms cho 'nm' –
Biên dịch với' -g' và sử dụng 'nm -l' – 4566976
Tôi nên thêm vào trường hợp sử dụng của mình, tôi có quyền truy cập vào tệp nhị phân cuối cùng và các tệp đối tượng được sử dụng bởi nó, nhưng Tôi không thể xây dựng hoặc đảm bảo thông tin gỡ lỗi trong nhị phân. – Andrew