2015-11-23 2 views
-1

Я хотел бы обнаружить контрольные точки оборудования. Я могу прочитать значение регистров с помощью:Чтение регистров отладки на linux

unsigned sp; 
__asm __volatile("movl %%esp, %0" : "=r" (sp)); 
return sp; 

Попытки прочитать dr0 на 64 машин, я получаю Error: unsupported instruction 'mov'. Мне удалось скомпилировать с -m32, но при попытке запуска я получаю ошибку сегментации.

Как проверить регистры отладки? Меня интересуют как 32, так и 64-разрядные решения.

+0

Почему это запрещено? Пожалуйста, объясни. – robert

+0

Вы проигнорированы, потому что вы не показали нам неисправный код. Как мы должны сообщать вам, что вы сделали неправильно, если не показываете нам, что вы сделали? – fuz

+0

@FUZxxl, неисправный код выше, просто замените esp на dr0. – robert

ответ

1

Вы должны использовать 64 битный регистр в 64-битном режиме, поэтому он не компилируется (предположительно, так как вы не показали фактический код, который вы пытались ...)

В любом случае, вы не может считывать регистры отладки в пользовательском режиме. Вы должны сказать, почему вам нужен доступ к ним, иначе это проблема XY. Мое предположение заключается в том, что вы можете быть заинтересованы в API ptrace.

+0

Отредактировано, я хотел бы определить, установлены ли контрольные точки оборудования. И есть все, я изменил 'esp' на' dr0' и попытался напечатать значение. – robert

+0

@ franz1 Я не думаю, что вы можете сделать это в Linux. Доступ к регистрам отладки - это привилегированная операция, и вы не позволяете этой операционной системе. Вместо этого используйте API 'ptrace()', чтобы узнать, отлаживается ли вы. – fuz

+0

Также обратите внимание, что вызов 'ptrace' не удастся, если кто-то еще уже подключен, что уже является индикатором. И если отладчик достаточно умен, чтобы скрыть себя, он также сделает это для регистров отладки. – Jester

Смежные вопросы