2016-05-17 3 views
7

Как я могу назвать функции Windows API из двоичного кода Linux внутри подсистемы Windows для Linux (WSL)? Я почти уверен, что нет документального способа сделать это, но, тем не менее, может быть интересно попробовать.Вызвать Win32/NT-Native API из подсистемы Windows для Linux-процессов?

Я заинтересован в вызове функций Win32, или если это невозможно, по крайней мере, для Windows NT API (Nt *, Zw *). Собственные API-интерфейсы должны быть как минимум доступными, поскольку компонент, который запускает процессы Linux (lxss), зависит от этих API.

Может потребоваться создать пользовательскую функцию LoadLibrary для загрузки DLL-файлов Windows. Другая идея заключалась бы в поиске памяти процесса для известных частей функций ядра (то есть их точек входа в пользовательский режим).

Кто-нибудь экспериментировал с этим и хотел бы поделиться решением?

+1

Эта презентация - https://github.com/ionescu007/lxss/blob/master/The%20Linux%20kernel%20hidden%20inside%20windows%2010.pdf - предлагает (по крайней мере для меня), что процессы linux -called pico обработал, что у них нет ntdll, сопоставленных с их адресным пространством. Кроме того, все системные вызовы обрабатываются поставщиком процессов pico для WSL (я ожидаю, что они просто используют таблицу диспетчеризации системных служб, поэтому системные вызовы NT недоступны из пользовательского пространства). –

ответ

5

Одним словом, вы не можете.

Фактические процессы, в которых выполняются процессы Linux, не являются процессами Win32 и не могут загружать и выполнять код пользовательского режима Win32, и они не могут вызывать стандартные точки входа ядра Win32 NT.

Для получения дополнительной информации о инфраструктуре PicoProcess, используемой WSL, читайте this blog and/or watch the accompanying video.

Если вы хотите «вызвать» код Windows из кода, запущенного внутри WSL, вам может потребоваться использовать некоторую форму технологии вызова сокета/обмена сообщениями/RPC/REST, в которой etiher/оба конца отношений могут прослушивать и реагировать на сообщения, передаваемые через сеть/сокет/трубу.

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

  • Нет связанных вопросов^_^