2013-08-16 46 views
8

Tôi thấy rằng guarded_open_np chức năng được sử dụng bởi libsqlite3.dylib để mở tệp cơ sở dữ liệu. Tôi đã có một cái nhìn vào mã nguồn mở sqlite3, không có điều như vậy. Vì vậy, chắc chắn Apple đã sửa đổi nó để sử dụng guarded_open_np thay vì unix của open.Tham số của guarded_open_np

Tôi biết rằng guarded_open_np là một API riêng tư và tôi không tìm thấy tiêu đề cũng như tài liệu về nó. Tôi muốn làm gián đoạn (MSFunctionHook của Cydia) trên guarded_open_np, vì vậy tôi cần phải biết các tham số là gì, không chỉ là tên hàm.

tôi đảo ngược chế libsqlite3.dylib sử dụng IDA Pro, đây là cách nó được gọi là guarded_open_np:

sub_79c1c: 
push {r7, lr} 
mov r7, sp 
sub sp, #0x4 
mov r3, r1 
movw r1, #0xc57e 
movt r1, #0x0 
str r2, [sp, #0x4 + var_0] 
add r1, pc 
movs r2, #0xf 
blx imp___picsymbolstub4__guarded_open_np 
add sp, #0x4 
pop {r7, pc}  

Tuy nhiên, nó vẫn chưa rõ ràng những gì params nó có thể mất. Tôi đánh giá cao nhiều nếu có một số trang web chính thức đề cập đến guarded_open_np với tất cả các thông số của nó.

+3

phỏng đoán tốt nhất của tôi là có vẻ như UNIX mở (3): https://gist.github.com/CodaFi/7c73abd9dfb602dcc26e – CodaFi

+1

@Krypton bạn có thể móc điều này vào trình gỡ lỗi và kiểm tra nội dung của thanh ghi r0 ~ r3 (và nếu chúng trỏ đến bộ nhớ, nội dung của bộ nhớ) ngay trước câu lệnh blx? Các quy ước gọi thường sử dụng r0 cho đối số đầu tiên, r1 cho số thứ hai, vv – Ncat

Trả lời

2

Từ thông tin ở đây, tôi không tin rằng chúng tôi có thể đưa ra câu trả lời chắc chắn, mặc dù CodaFi là một gợi ý tốt.

Điều đó nói rằng, đây là một số tài liệu tham khảo có thể hữu ích trong việc đưa ra cho bạn những công cụ để tìm hiểu bản thân:

Đầu tiên, có thể bạn đã biết, nhưng tìm hiểu về thanh ghi và ngăn xếp. Để lắp ráp, gọi một chức năng bạn thường làm theo một cái gì đó gọi là Giao diện nhị phân ứng dụng (ABI), nó chỉ thiết lập các quy ước như các chức năng mong đợi đối số của chúng (đăng ký, ngăn xếp, vv). để thay đổi et cetera.

Vì đây là iOS, bạn nên xem Procedure Call Standard for ARM ArchitectureiOS ABI Function Call Guide.

Nhìn vào phần "Quy trình gọi thủ tục cơ bản" trong liên kết đầu tiên ở trên, bạn có thể biết rằng các cuộc gọi hàm mong đợi bốn đối số đầu tiên của chúng nằm trong thanh ghi r0 ~ r4 tương ứng.

Vì vậy, để điều tra của bạn, bạn có thể muốn tìm hiểu những gì trong các thanh ghi này ngay trước khi phân nhánh thành lệnh guarded_open_np. XCode có thể nhổ ra lắp ráp một tập tin cho bạn, và bạn sẽ có thể thiết lập các điểm ngắt trên nó; sau đó sử dụng lệnh register read trong llvm để hiển thị cho bạn tất cả nội dung đăng ký của bạn (lưu ý một số thanh ghi có thể chỉ chứa các vị trí bộ nhớ mà bạn sẽ muốn kiểm tra với các lệnh lldb memory read).

Để đào sâu hơn một chút vào bản cài đặt iOS, tôi khuyên bạn nên đăng bài trên blog 3 phần của Mike Ash "Tháo rời lắp ráp" 1, 23. Sau đó, bạn có thể thích bài đăng gần đây của mình trên ARM 64 bit updates. Đây là những nguồn tài nguyên không chính thức nhưng giúp bạn nắm bắt nhanh chóng với việc lắp ráp quét và biết chung những gì đang diễn ra ở đâu.

+0

Cảm ơn Wilson về các tài liệu và tài liệu tham khảo. Tôi đoán nó sẽ mất một thời gian để tiêu hóa các chất liệu mặc dù: D – Krypton

+0

@Krypton Cảm ơn tín dụng! Không thực sự mong đợi điều đó.Các bài đăng trên blog được đề cập ở trên thực tế là một nơi khởi đầu khá tốt (tham chiếu ABI và các công cụ khá dày đặc và không thực sự cho việc học tập). Tuy nhiên, nếu bạn thực sự muốn biết công cụ của bạn, thì câu chuyện của Randall Hyde, The Art of Assembly Language là một bài đọc rất được khuyến khích. – Ncat