складывать данные между языками - PullRequest
1 голос
/ 01 ноября 2010

Допустим, например, что я помещаю большой объем данных в стек, используя некоторый ассемблерный код. Мой вопрос заключается в том, можно ли манипулировать этими данными на языке, таком как c ++, передавая адрес указателя стека программе c ++ (или каким-либо другим способом)? Если так, как c ++ будет обрабатывать эти данные? Смысл, как бы я определить типы данных в C ++?

Ответы [ 2 ]

4 голосов
/ 01 ноября 2010

Да, вы можете сделать это, конечно, при условии, что вы правильно используете соглашение о вызовах, чтобы данные были полностью очищены от любых областей стека, которые код C ++ использует в качестве стека.Память стека - это просто память, и что касается кода, получающего этот указатель, то нет никакой разницы между помещением некоторых значений в стек или перемещением указателя стека (т.е. созданием массива / структуры в стеке) и последующей записью значенийв пространство, которое вы создали, или просто динамически выделяя некоторую память и помещая значения. Ваши инструкции по вставке ассемблера помещают значения туда в какой-то конкретный макет, и все.,Например, в x86 два 32-битных int значения рядом точно такие же , что и 64-битное long long значение.Вот почему соглашения о вызовах определяют расположение параметров в стеке и требуют, чтобы вызывающий и вызываемый оба знали (и соглашались) порядок и типы параметров.

Конечно, вы можете предоставить дополнительную информацию, которая позволяетвызываемый для разработки типов данных.Например, первый параметр printf является (указателем) строки формата, и, анализируя строку формата, вызываемый абонент знает, какие типы оставшихся параметров есть для этого конкретного вызова, а затем может прочитать их, используя varargs.макросы.

2 голосов
/ 01 ноября 2010

Я полагаю, что все это также должно быть запущено в одном и том же процессе. Но не могли бы вы просто определить структуру в c ++, чтобы определить тип данных, и добавить заголовок к информации, которую вы помещаете в стек, указав, как эти данные расположены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...