Tôi đang cố gắng gỡ lỗi một vấn đề liên kết mà tôi có, khi viết hạt nhân.Kịch bản trình liên kết: chiến lược gỡ lỗi?
Vấn đề ở đây là tôi có một biến số SCAN_CODE_MAPPING
mà tôi không thể sử dụng - nó có vẻ trống hoặc gì đó. Tôi có thể sửa lỗi này bằng cách thay đổi cách tôi liên kết chương trình của mình, nhưng tôi không biết tại sao.
Khi tôi nhìn vào bên trong tệp nhị phân được tạo bằng cách sử dụng objdump
, dữ liệu cho biến chắc chắn là ở đó, vì vậy chỉ có một thứ gì đó bị hỏng với tham chiếu đến nó.
Here's a gist với cả tập lệnh liên kết và phần bảng biểu tượng khác nhau giữa hai tệp.
Điều làm tôi bối rối là cả hai bảng biểu tượng đều có cùng biểu tượng, chúng có cùng độ dài và chúng dường như chứa dữ liệu phù hợp. Sự khác biệt duy nhất mà tôi có thể thấy là chúng không theo thứ tự như nhau.
Cho đến nay tôi đã cố gắng
- kiểm tra vị trí bộ nhớ
SCAN_CODE_MAPPING
để đảm bảo nó có dữ liệu tôi mong đợi và chưa được xóa trắng - kiểm tra rằng tất cả những biểu tượng đều giống nhau
- kiểm tra xem tất cả nội dung có ký hiệu có cùng độ dài không
- xem
.data.rel.ro.local
để đảm bảo rằng nó có địa chỉ của dữ liệu
Một đầu mối có thể là cảnh báo này:
warning: uninitialized space declared in non-BSS section `.text': zeroing
mà tôi nhận được trong cả hai bị hỏng và các trường hợp chính xác.
Tôi nên thử gì tiếp theo?
Bỏ phiếu để đóng như gỡ rối giúp đỡ. –