может ли Java-объект вызвать нативную функцию в этой ситуации? - PullRequest
0 голосов
/ 27 октября 2018

Java может вызывать нативную функцию, используя JNI.Это означает, что я могу запустить JVM в моей программе на C ++ и с помощью JNI создавать Java-объект только с указателем.И в этом Java-объекте можно вызвать встроенную функцию для доступа к данным в запущенной программе на C ++.Он запускается успешно.

Но, если я просто запустил программу на C ++ и передал указатель одного объекта на программу Java.В Java, я могу использовать этот указатель для создания многих объектов для вызова нативной функции в C ++?Разница в том, что я не создаю Java-объект в JNI и просто получаю указатель на объект в C ++, затем в Java я вызываю нативную функцию для доступа к данным в C ++ с помощью JNI.Данные хранятся в работающей программе C ++.

Так возможно ли это?Может ли программа C ++ иметь некоторую защиту?Так я не могу получить доступ к его данным по указателю объекта?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Спасибо.Я обнаружил, что думал, что JNI в неправильной ситуацииЯ знаю, что может сделать JNI, но игнорирую что-то важное.

Я хочу задать вопрос: могу ли я преобразовать указатель объекта в C ++ в объект Java и вызвать его нативную функцию для доступа к данным объекта в C ++.Фактически мне нужно создать JVM в процессе C ++, чтобы преобразовать указатель в Java или просто вызвать нативную функцию в процессе Java.И нет никакого способа сделать это, когда они являются двумя процессами, что означает, что я запускаю процесс C ++ и передаю его указатель одного объекта другому, выполняющему процесс Java, затем я хочу получить доступ к данным в процессе C ++, вызывая встроенную функцию в процессе Java,

Один процесс имеет собственный ресурс памяти, а другой не может получить к нему доступ через собственный вызов функции (JNI).Процесс может связываться многими способами, такими как сокеты.

0 голосов
/ 27 октября 2018

Из Java вы можете вызывать только те функции C ++, которые были созданы для JNI.С другой стороны, любая функция JNI в динамической библиотеке C ++ может быть вызвана из Java, и вредоносная Java-программа может реконструировать ваш JNI и использовать его для использования уязвимости в коде C ++.

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