Комментарии 4
Неплохо!
Конечно, лучше всё таки посмотреть количество принимаемых аргументов с помощью какого-нибудь декомпилятора типа иды, и написать через LoadLibrary/GetProcAddress, дёргая функции оригинальной дллки, передавая им то же самое, но не заморачиваясь со стеком. Заодно декомпилятор скажет cdecl там, stdcall, или какой-нибудь fastcall.
Конечно, лучше всё таки посмотреть количество принимаемых аргументов с помощью какого-нибудь декомпилятора типа иды, и написать через LoadLibrary/GetProcAddress, дёргая функции оригинальной дллки, передавая им то же самое, но не заморачиваясь со стеком. Заодно декомпилятор скажет cdecl там, stdcall, или какой-нибудь fastcall.
Продумывал такой вариант, однако не всегда можно автоматически определить тип функции и её параметры. Если она экспортируется в виде "?func1@a@@AAEXH@Z" — тогда да. А если экспортируется так же, как в получившемся у меня бинарнике — то, насколько я знаю, только вручную, анализируя ассемблер и поведение стека.
В моём враппере 93 функции, из них залезть потребовалось только в 2. То есть 91 функцию мне пришлось бы разбирать вхолостую.
В моём враппере 93 функции, из них залезть потребовалось только в 2. То есть 91 функцию мне пришлось бы разбирать вхолостую.
Декомпилятор способен определить количество входных аргументов вполне без проблем. Они теперь умные, особенно у IDA.
В интернете найти всё необходимое очень просто, а для того, чтобы воспользоваться, особенно если есть понимание что такое ассемблерный код, вообще много мозгов не потребуется)
Есть способ проще:
github.com/cmusphinx/pocketsphinx/blob/master/src/libpocketsphinx/pocketsphinx.c
github.com/cmusphinx/pocketsphinx/blob/master/src/libpocketsphinx/pocketsphinx.c
int
ps_process_raw(ps_decoder_t *ps,
int16 const *data,
size_t n_samples,
int no_search,
int full_utt)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Модификация к игре на основе dll-wrapper'a