Как я могу получить значение IP
зарегистрироваться в моей программе C
? например, для получения значений AX
и BX
регистров у нас есть псевдо переменные _AX and _BX
. Есть ли какая-либо псевдо переменная для IP
? или есть какой-либо другой метод? Примечание: Мне нужно значение IP
, потому что он хранит адрес смещения следующей команды, которая должна быть выполнена?Как получить значение регистра IP?
ответ
Вы не можете сделать это на простом C, так как C не имеет понятия регистров процессора. В зависимости от того, какой компилятор вы используете, вам необходимо либо использовать:
- Собственный компилятор;
- Внутренняя сборка; или
- Внешняя сборка рутина
Проверьте документацию вашего компилятора, чтобы увидеть, если есть внутренняя доступны. Предполагая, что их нет, сборка какого-то типа будет вашим единственным вариантом. x86 не имеет инструкции для прямого чтения регистра IP. Вместо этого вам нужно будет использовать что-то вроде инструкции call
(которая хранит следующий IP-адрес в стеке), чтобы получить от нее.
Вот один из способов, чтобы получить IP-адрес на x86 (AT & T синтаксис):
.globl get_ip
get_ip:
mov 0(%sp), %ax
ret
Тогда в вас C код, вы можете сделать это:
uint16_t get_ip();
...
uint16_t ip = get_ip();
Если ваш компилятор поддерживает встроенный сборки, то вы можете использовать это для записи функции get_ip
внутри исходного кода, вместо того, чтобы иметь отдельный исходный файл сборки. Обратитесь к документации вашего компилятора по синтаксису встроенной сборки, если она доступна.
Выше, конечно, предполагается, что вы работаете в 16-разрядной сборке, которую я предполагаю, поскольку вы упомянули регистры AX, BX и IP в своем вопросе. Но если вы хотите, чтобы это работало для 32-битного кода, то, конечно, вам нужно переименовать регистры в %esp
, %eax
и %eip
, а get_eip()
затем вернет uint32_t
вместо uint16_t
.
- 1. Отображение содержимого регистра IP
- 2. Значение регистра 1.4.12
- 3. Определить значение регистра
- 4. Как я могу получить значение x86-64 сегментного регистра fs?
- 5. Как получить исходное значение в помощниках регистра руля?
- 6. Как получить текущее значение регистра ПК на арке MIPS?
- 7. Значение формы регистра Codeigniter как сегмент URL
- 8. Как установить значение регистра для включения прерывания?
- 9. Typoscript: Показать значение регистра как текст
- 10. Как изменить значение регистра eflags в GDB?
- 11. Как напечатать значение регистра в сборке NASM
- 12. DS-5 - Как просмотреть значение регистра NEON?
- 13. Переместить значение регистра в массив
- 14. анзибль: Проблема доступа Значение регистра
- 15. Как получить IP-адрес?
- 16. Как получить znode ip
- 17. Как получить * интернет * IP?
- 18. Как получить IP-адрес?
- 19. JavaScript: Как получить IP-адрес IP-адреса?
- 20. Получить верхнюю половину регистра EAX
- 21. Как получить пятое поле второго регистра таблицы?
- 22. Как получить адрес регистра: ARM Cortex A8?
- 23. gdb - получить переменное имя регистра
- 24. Как получить IP-адрес клиента?
- 25. JSON_Spirit: как получить значение
- 26. Переполнение регистра
- 27. Использовать значение регистра в качестве шаблона поиска
- 28. MIPS получить адрес памяти из регистра
- 29. MIPS: значение регистра печати в консоли
- 30. печать значение регистра в Mips сборке
+1 для приятного ответа – pradipta