Встроенная сборка в С++ не работает?

Итак, в основном я написал функцию сборки, чтобы определить, присутствует ли определенный процесс во время выполнения. Я не совсем понимаю встроенную сборку до такой степени, что, хотя я обернул код сборки оболочкой asm, он все равно определяет внутренний код как код C... в основном это выглядит примерно так:

__inline bool isProcLoaded()
{
    _asm
    {
        mov ah, 0x48
        int     0x68 ; After compiling it breaks on this line, the 'int' is highlighted
        cmp ax ...
    }
}

В чем здесь проблема и как ее исправить?


person user3267146    schedule 21.03.2014    source источник
comment
Не совсем понятно, в чем у вас проблема? Не скомпилируется? Или выдает ошибку времени выполнения? (Проблема с подсветкой синтаксиса, когда редактор неверно интерпретирует int как ключевое слово c, похоже, не вызовет реальной проблемы)   -  person jcoder    schedule 21.03.2014


Ответы (1)


Вероятно, это связано с тем, что int — это инструкция прерывания, которая редко используется в пользовательском режиме. в настоящее время, потому что большинство прерываний являются привилегированными (связанными).

Без дополнительных подробностей я не могу сказать, чего вы пытаетесь достичь здесь, хотя после поиска в начале похоже на метод обнаружения отладчика SoftICE, и этот код довольно древний (DOS и ранняя эпоха Windows), поэтому кажется вполне разумным, что в современных ОС вы получаете исключение 0xC0000005 STATUS_ACCESS_VIOLATION.

person user2802841    schedule 21.03.2014
comment
Тем не менее, не должен ли он просто пропустить прерывание, поскольку он не вызывает напрямую 0x80? В любом случае, как я могу сделать так, чтобы он возвращал это другим способом и продолжал обрабатывать остальную часть моего кода? Будет ли работать последовательность Луна в этом случае? - person user3267146; 21.03.2014
comment
ОП - Я не думаю, что ты понимаешь, что делает int. Он делает 2 вещи. Он изменяет состояние процессора на привилегированное и переходит к вектору программного прерывания. Выполнение больше не находится под контролем текущего процесса. Теперь ОС решает, как дальше поступать. - person doron; 21.03.2014
comment
Итак, куда бы я ни указывал int оттуда, ОС решает, что делать дальше? В этом есть смысл. - person user3267146; 21.03.2014
comment
Немного обновил ответ. - person user2802841; 21.03.2014
comment
Инструкция int очень полезна для некоторых вещей - даже (!) в пространстве пользователя. Это потому, что вы можете вводить ловушки с его помощью и таким образом взаимодействовать с отладчиком. Согласен, это не совсем обычное дело, но это не является основанием для того, чтобы встроенный ассемблер не поддерживал его. - person FrankH.; 21.03.2014