Chcę uzyskać aktualną wartość rejestru EIP z językiem asemblerowym. Czy to jest możliwe?Jak sprawdzić wartość EIP przy użyciu asemblera?
Odpowiedz
Zakładając 32-bit x86, należy wykonać następującą funkcję:
get_eip: mov eax, [esp]
ret
Następnie, aby uzyskać wartość EIP w EAX, po prostu:
call get_eip
call foo
foo:
pop eax ; address of foo
To podejście ma subtelny problem. Nowoczesne procesory próbują przewidzieć adresy zwrotne - połączenie, które nie jest sparowane z powrotem, powoduje przepełnienie prognozy. Zobacz http://blogs.msdn.com/b/oldnewthing/archive/2004/12/16/317157.aspx – user200783
@Paul Baker zazwyczaj nie jest to krytyczny problem. Na przykład 'call @f/db '123', 0/@@:' jest powszechną praktyką – Abyx
call foo, pop eax, push eax, ret –
Na x86-64 (w przeciwieństwie do 32-bitowego x86), adresowanie korelacyjne (RIP
jest 64-bitowym odpowiednikiem EIP
). Tak w kodzie 64-bitowym, można po prostu zrobić
lea rax, [rip]
przenieść bieżącą zawartość RIP
do RAX
(można użyć lea
ale nie mov
do tego).
Doskonały komentarz. Usunąłem moją niepoprawną odpowiedź. Komentarze nie powinny być publikowane jako odpowiedzi. –
Hmmm, to nie działa w bloku '__asm {}' VC++ 2015. :(Pobierz komunikat o błędzie C2415: nieprawidłowy typ argumentu operacji. – Adrian
- 1. Jak sprawdzić # linii przy użyciu jQuery
- 2. Nieprawidłowa rejestracja eip?
- 3. Jak uzyskać wartość div przy użyciu javascript
- 4. Jak uzyskać wartość atrybutu przy użyciu XPath
- 5. Excel: Jak sprawdzić, czy komórka jest pusta przy użyciu VBA?
- 6. Jak sprawdzić, czy plik nadal istnieje przy użyciu deskryptora pliku
- 7. AWS - Uzyskiwanie dostępu do instancji w prywatnej podsieci przy użyciu EIP
- 8. Jak mogę pomnożyć dwa 64-bitowe numery przy użyciu języka asemblera x86?
- 9. Jak sprawdzić, czy wartość właściwości jest tylko do odczytu przy użyciu extendscript?
- 10. Jak sprawdzić pustą wartość attr() w jquery?
- 11. Uzyskaj wartość zawartości div przy użyciu jquery
- 12. Mathematica: Wyciąg wartość liczbową przy użyciu Rozwiąż
- 13. Jak sprawdzić adres URL dla 404 przy użyciu Selenium WebDriver?
- 14. Jak sprawdzić łańcuch jako DateTime przy użyciu FluentValidation
- 15. Jak sprawdzić, czy plik jest zaszyfrowany przy użyciu AES (Rijndael)?
- 16. jak sprawdzić, czy plik jest wybrany przy użyciu javascript?
- 17. Jak mogę sprawdzić błędy w operacjach CRUD przy użyciu GORM?
- 18. Jak sprawdzić wymiary wszystkich obrazów w katalogu przy użyciu Pythona?
- 19. jak sprawdzić, czy 2 pliki są równe przy użyciu .NET?
- 20. Jak sprawdzić poprawność mnożenia wybierz przy użyciu Zend Framework 2
- 21. Jak sprawdzić scalalność oddziałów przy użyciu gitub api
- 22. Jak sprawdzić poprawność adresu URL w jquery przy użyciu Regex?
- 23. Jak sprawdzić zmiany w formularzu w Angular 2 przy użyciu
- 24. Jak sprawdzić, czy element istnieje w DOM przy użyciu jQuery?
- 25. Jak sprawdzić wersję programu SQL Server przy użyciu Powershell?
- 26. Jak sprawdzić, czy istnieje dokument couchdb przy użyciu pythona
- 27. Jak sprawdzić, czy katalog istnieje przy użyciu C++ i WinAPI
- 28. Jak sprawdzić równość przy użyciu Iskry Dataframe bez zapytania SQL?
- 29. Jak sprawdzić, czy kolejka JMS istnieje przy użyciu języka Java?
- 30. Jak sprawdzić zwracaną wartość funkcji w GDB?
To jest niesamowite: D – Mehrdad
Chciałbym móc to zrobić bez etykiet i bajtów zliczających – Dmitry