2009-10-27 46 views
5

Theo Linux man page for mprotect chức năng có 3 luận cứ:chức năng mprotect gọi với 5 đối số

int mprotect(const void *addr, size_t len, int prot); 

nhưng khi chạy ltrace trên một chương trình mà tôi đang phân tích tôi thấy mprotect đó được gọi là như thế này:

mprotect(0x8049000, 4096, 3, 1, 0xb7e057ac)  = 0 

đối số thứ 4 và thứ 5 là gì?

Chỉnh sửa: Sử dụng phiên bản ltrace 0.5. và kernel 2.6.24-24-generic

nhờ

+0

Làm thế nào về thứ năm một? – Cascabel

+0

xin lỗi, trong khi quét các đối số tôi đã bỏ lỡ số thứ tư;) – woolagaroo

+0

Phiên bản nào của đường viền. Phiên bản hạt nhân Linux nào? – Puppe

Trả lời

7

Năm là số lập luận rằng ltrace sẽ in nếu nó không thể tìm thấy các mô tả về chức năng trong tập tin cấu hình. (/etc/ltrace.conf theo mặc định, tôi nghĩ).

Trên hệ thống của tôi, tôi có thể thấy hành vi tương tự và không tìm thấy bản vá lỗi ở đó, chỉ có SYS_mprotect.

Nếu bạn muốn có một cái nhìn thứ hai của nguồn ltrace, nơi quan tâm là output.c, điều kiện sau "func = name2func (function_name);" - in 5 args trong trường hợp không tìm thấy siêu thông tin cho tên hàm (và trong trường hợp đó tra cứu tuyến tính bên trong tên2func trả về NULL).

Vì vậy, hướng dẫn là chính xác, nó ltrace đó là "sai" (trích lời "sai" vì về mặt kỹ thuật mã làm việc như nó nên, mặc dù có lẽ là defs trong cấu hình cần được cố định)

+0

Những ngày này có vẻ như là 'ret-> num_params = 4;' trong 'build_default_prototype'. Cảm ơn nhận xét này, mặc dù, nó đã giúp tôi tìm hiểu làm thế nào ltrace xác định # args từ một chức năng không rõ. Tôi hy vọng nó sẽ là một số thuật toán ma thuật. – wump

Các vấn đề liên quan