Как вызвать определенную функцию EXE в Linux/Mac

Я уверен, что это возможно, но я хотел бы вызвать функцию, которая определена в exe-файле на Linux/Mac:

0x421ff0 @@my_func_doing_stuff@Initialize 4

По сути, я хотел бы добавить поддержку командной строки, которая не реализована, а пользовательский интерфейс представляет собой бесполезное перетаскивание.

Примечание. У меня нет доступа к источнику файла.

Я играл с вином, 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 для вызова конкретных функций.

Есть ли существующие решения?


person kenorb    schedule 17.10.2012    source источник


Ответы (1)


Вы можете использовать winelib для загрузки и связывания с двоичным файлом (поскольку вам нужно вино, чтобы предоставить удобный ABI), но имейте в виду, что это эффективно превращает ваше приложение в приложение Wine.

person Ignacio Vazquez-Abrams    schedule 17.10.2012
comment
Спасибо за ваш ответ, я попробую winelib и сообщу вам, сработало ли это. - person kenorb; 18.10.2012