Я уверен, что это возможно, но я бы хотел вызвать функцию, которая определена в exe-файле в Linux / Mac:
0x421ff0 @@my_func_doing_stuff@Initialize 4
В основном я хотел бы добавить поддержку командной строки, которая не реализована, и пользовательский интерфейс является своего рода перетаскиванием&капля, которая бесполезна.
Примечание: у меня нет доступа к источнику файла.
Я играл с wine, objdump, uncc (пытаясь снова преобразовать его в C) и Python, используя pefile, SWIG и ctypes:
#!/usr/bin/python
from ctypes import *
import pefile, sys
pe = pefile.PE('my_file.exe')
print pe.dump_info()
my_exe = cdll.LoadLibrary('./my_file.exe')
но без успеха.
Ошибка:
OSError: ./my_file.exe: invalid ELF header
напомнил мне, что я не могу вызвать ни одну из функций Windows под Linux без эмуляции?
Поэтому я ищу другие решения. Вероятно, это может быть сделано как-то путем эмуляции или отладки под вином. Но я не уверен, есть ли какой-либо API для вызова определенных функций.
Существуют ли уже существующие решения?
Вы можете используйте winelib для загрузки и связывания с бинарным (так как вам нужен wine для обеспечения пригодного для использования ABI), но имейте в виду, что это эффективно превращает ваше приложение в приложение Wine.
Других решений пока нет …