2013-06-19 3 views
1

Я пытался кодировать базы ОС с помощью C++. Чтобы управлять прерываниями, мне пришлось написать несколько строк asm, которые используют внешний код C++, объявленный в asm с external name_of_the_function. Я поместил одну из этих функций в класс, но я не знаю, как получить доступ к методу класса из сборки (external Class::method не работает). Единственный способ, которым я нашел это, - создать функцию, которая вместо этого вызывает метод класса, но можно ли получить доступ непосредственно к методу из сборки? (при условии, что эти методы являются статическими)Доступ к методу класса из сборки

+0

Вы можете посмотреть * имя коверкая *: https://en.wikipedia.org/wiki/Name_mangling – templatetypedef

+0

Посмотрите на [призывающих конвенции] Agner противотуманными в (http://www.agner.org /optimize/calling_conventions.pdf). –

ответ

1
  1. Загляните в свой объектный файл на C++, чтобы найти искомое имя символа для функции, которую вы хотите вызвать.
  2. Заявить, что искомое имя функции external или global или любой другой синтаксис, необходимый для ассемблера в файле сборки.
  3. Назовите это так, как если бы вы использовали функцию C (вам может понадобиться указатель this, если это метод экземпляра).
+0

3. (помня, чтобы передать 'this' в качестве первого параметра для функции) – Massa

+2

@ Масса - я думаю, что мой ответ уже говорит об этом. Может быть, вы видите кешированную версию? Кроме того, если это статический (класс) метод, как говорит OP, там не подразумевается 'this', не так ли? –

+0

Большое спасибо, он решил мою проблему! – palra

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