Là một bài tập cho lớp bảo mật, tôi đang cố gắng sử dụng __asm__("jmp 0xbffff994");
trong mã của mình, nhưng khi tôi tháo rời mọi thứ trong gdb, hướng dẫn được đổi thành jmp 0xc8047e2a
. Bất kỳ ý tưởng nào và tại sao tôi có thể chuyển đến một địa chỉ cụ thể?x86 chuyển đến địa chỉ
Trả lời
Có thể vì đó là một bước nhảy đến địa chỉ tương đối và trình liên kết hoặc trình tải đã di chuyển mã của bạn. Hãy thử đặt địa chỉ vào một biến, và sau đó làm:
jmp dword [var]
hoặc cách khác:
push 0xbffff994
ret
* rằng * là câu trả lời đúng, cũng lưu ý rằng: "mov eax, 0x11223344; jmp eax"; cũng sẽ hoạt động và có khả năng là một bước tiến nhất. –
rất đúng, nhưng anh ta có thể đang sử dụng fastcall (tôi không chắc chắn về ý nghĩa của 0xbffff994). – Mark
Kết hợp PUSH RET hoạt động! Cảm ơn bạn! – Martin
Daniel Giải thích lý do tại sao bước nhảy của bạn không giống với chương trình bạn đã lập trình. Nó phải làm với các tập tin đối tượng và liên kết.
nếu bạn muốn chuyển đến một địa chỉ cụ thể, tốt nhất bạn nên vá bước nhảy bằng Trình gỡ lỗi hoặc Bộ tách rời.
Trên hệ thống của tôi (gcc phiên bản 4.2.4, Ubuntu) điều này có vẻ tốt trên các disassmbley (cái nhìn sâu sắc) :
int main() { asm("jmp 0xbffff994"); return 0; };
kết quả của disassmbley (cái nhìn sâu sắc):
0x8048344 : lea 0x4(%esp),%ecx - 0x8048348 : and $0xfffffff0,%esp - 0x804834b : pushl -0x4(%ecx) - 0x804834e : push %ebp - 0x804834f : mov %esp,%ebp - 0x8048351 : push %ecx - 0x8048352 : jmp 0xbffff994 - 0x8048357 : mov $0x0,%eax - 0x804835c : pop %ecx - 0x804835d : pop %ebp - 0x804835e : lea -0x4(%ecx),%esp - 0x8048361 : ret
Tôi đoán rằng trình tách rời đó đang hiển thị độ lệch của jmp và không phải là mục tiêu thực tế của nó. (lệnh jmp có giá trị offset tương đối so với eip khi bạn cung cấp cho nó một toán hạng trực tiếp 32 bit). –
Tại sao bạn đoán vậy? có cách nào để kiểm tra nó không? nó đang chạy như một giao diện đồ họa với GDB bên dưới. –
Hoặc có thể là không có di dời. Tuy nhiên, nếu bạn đổ opcodes với assembly, bạn sẽ có thể thấy offset. – Mark
Thật khó để xác định địa chỉ chính xác khi biên dịch, bạn đã thử sử dụng nhãn chưa? Nó là phổ biến hơn nhiều để sử dụng chúng với jmp.
dụ:
start:
jmp exit
exit:
ret
tôi sẽ khuyên bạn sử dụng một trình soạn thảo hex và chỉ cần thay đổi giá trị nếu nó chỉ là một điều một lúc.
- 1. x86/x64 Thêm Chuyển địa chỉ
- 2. Chuyển đến địa chỉ byte trong vim?
- 3. Nhận địa chỉ hướng dẫn hiện tại cho x86
- 4. Chuyển hướng địa chỉ blog cũ đến địa chỉ blog mới vĩnh viễn trong blogger
- 5. x86 bắt đầu thực thi tại địa chỉ nào?
- 6. Có thể bẫy ghi địa chỉ (x86 - linux)
- 7. Chuyển đổi [địa chỉ NSNetservice] để ip địa chỉ chuỗi
- 8. Phím Gitosis và ssh - địa chỉ email có liên quan đến địa chỉ email git không?
- 9. Cách gửi email đến nhiều địa chỉ bằng System.Net.Mail
- 10. Tại sao mã phải được căn chỉnh với ranh giới địa chỉ trên x86?
- 11. Porting compiler từ x86 Assembly đến LLVM
- 12. Valgrind có nghĩa là gì bởi "chuyển đến địa chỉ không hợp lệ" ở đây?
- 13. Python đang chuyển địa chỉ con trỏ 32 bit đến các hàm C
- 14. Grails chuyển hướng đến địa chỉ sai khi sử dụng app.context?
- 15. "EU" trong kiến trúc x86 là gì? (tính toán địa chỉ hiệu quả?)
- 16. Cách sử dụng hằng số địa chỉ trong cấu trúc nội tuyến GCC x86
- 17. Linux hỗ trợ nhiều hơn 512GB dải địa chỉ ảo trong x86-64 như thế nào?
- 18. Phân đoạn nào được sử dụng theo mặc định trong x86 gián tiếp địa chỉ?
- 19. Visual Studio 2012 bản địa C++ DLL biên dịch x86
- 20. Chuyển đổi địa chỉ CIDR thành mặt nạ mạng con và địa chỉ mạng
- 21. Liên kết đến một địa chỉ lớn nhận biết DLL
- 22. "Địa chỉ ảo tương đối", liên quan đến cái gì?
- 23. Con trỏ đến một địa chỉ cố định cụ thể
- 24. expressjs Bind đến một địa chỉ IP cụ thể
- 25. Nghe đến một địa chỉ IP khác nhau
- 26. cách chuyển hướng miền theo địa chỉ IP quốc gia
- 27. Thêm địa chỉ liên kết địa chỉ
- 28. Biểu thức chuyển đến chỉ thị
- 29. .htaccess chuyển hướng mà không thay đổi thanh địa chỉ
- 30. Chuyển hướng bash stdout/stderr đến hai địa điểm?
Tại sao bạn cần phải chuyển đến địa chỉ thô? Tôi đang có một thời gian khó hiểu bất kỳ việc sử dụng (không bất chính) có thể cho điều đó. – kquinn
Bạn sử dụng hệ thống nào? –
@kquinn bất kể câu hỏi của anh ta đã được hỏi, hãy cố gắng trả lời nó. – samoz