Skip to content

Instantly share code, notes, and snippets.

@Himmler
Created January 28, 2019 16:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Himmler/fb6390e16e93550c1c94bd882105f5d7 to your computer and use it in GitHub Desktop.
Save Himmler/fb6390e16e93550c1c94bd882105f5d7 to your computer and use it in GitHub Desktop.
c
#define _CRT_SECURE_NO_WARNINGS
#include "windows.h"
unsigned int i;
char buf[256][MAX_PATH];
FARPROC procs[93];
LPCSTR import_names[] =
{
"dict_real_word",
"dict_wordid",
"fsg_set_add",
"fsg_set_get_fsg",
"fsg_set_iter",
"fsg_set_iter_free",
"fsg_set_iter_fsg",
"fsg_set_iter_next",
"fsg_set_remove",
"fsg_set_remove_byname",
"fsg_set_select",
"ps_add_word",
"ps_args",
"ps_decode_raw",
"ps_decode_senscr",
"ps_end_utt",
"ps_free",
"ps_get_all_time",
"ps_get_config",
"ps_get_fe",
"ps_get_feat",
"ps_get_fsgset",
"ps_get_hyp",
"ps_get_hyp_final",
"ps_get_jsgf_rule_text",
"ps_get_jsgf_toplevel_rule_names",
"ps_get_lattice",
"ps_get_lmset",
"ps_get_logmath",
"ps_get_n_frames",
"ps_get_prob",
"ps_get_utt_time",
"ps_get_uttid",
"ps_init",
"ps_latlink_baseword",
"ps_latlink_iter_free",
"ps_latlink_iter_link",
"ps_latlink_iter_next",
"ps_latlink_nodes",
"ps_latlink_pred",
"ps_latlink_prob",
"ps_latlink_times",
"ps_latlink_word",
"ps_latnode_baseword",
"ps_latnode_entries",
"ps_latnode_exits",
"ps_latnode_iter",
"ps_latnode_iter_free",
"ps_latnode_iter_next",
"ps_latnode_iter_node",
"ps_latnode_prob",
"ps_latnode_times",
"ps_latnode_word",
"ps_lattice_bestpath",
"ps_lattice_free",
"ps_lattice_get_logmath",
"ps_lattice_link",
"ps_lattice_n_frames",
"ps_lattice_posterior",
"ps_lattice_posterior_prune",
"ps_lattice_read",
"ps_lattice_retain",
"ps_lattice_reverse_edges",
"ps_lattice_reverse_next",
"ps_lattice_traverse_edges",
"ps_lattice_traverse_next",
"ps_lattice_write",
"ps_lattice_write_htk",
"ps_load_dict",
"ps_mllr_free",
"ps_mllr_read",
"ps_mllr_retain",
"ps_nbest",
"ps_nbest_free",
"ps_nbest_hyp",
"ps_nbest_next",
"ps_nbest_seg",
"ps_process_cep",
"ps_process_raw",
"ps_reinit",
"ps_retain",
"ps_save_dict",
"ps_seg_frames",
"ps_seg_free",
"ps_seg_iter",
"ps_seg_next",
"ps_seg_prob",
"ps_seg_word",
"ps_set_fsg_from_rule_list",
"ps_start_utt",
"ps_update_fsgset",
"ps_update_lmset",
"ps_update_mllr"
};
void find_key()
{
if(!i)
{
for (i = 0; i < 256; i++)
if (buf[i][0])
if (GetAsyncKeyState(i) >> 1)
{
i = (int)&buf[i][0];
//__asm mov eax, i;
return;
}
if (i == 256)
i = 0;
}
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
HINSTANCE hinst_dll;
if (fdwReason == DLL_PROCESS_ATTACH)
{
hinst_dll = LoadLibraryA("pocketsphinx_orig.dll");
if (!hinst_dll)
return 0;
for (i = 0; i < 93; i++)
procs[i] = GetProcAddress(hinst_dll, import_names[i]);
for (i = 0; i < 256; i++)
{
_itoa(i, &buf[i][0], 10);
GetPrivateProfileStringA("main", &buf[i][0], 0, &buf[i][0], MAX_PATH, ".\\settings.ini");
}
i = 0;
}
else if (fdwReason == DLL_PROCESS_DETACH)
FreeLibrary(hinst_dll);
return 1;
}
_declspec(naked) void _dict_real_word()
{
__asm jmp dword ptr [procs + 0 * 4];
}
_declspec(naked) void _dict_wordid()
{
__asm jmp dword ptr [procs + 1 * 4];
}
_declspec(naked) void _fsg_set_add()
{
__asm jmp dword ptr [procs + 2 * 4];
}
_declspec(naked) void _fsg_set_get_fsg()
{
__asm jmp dword ptr [procs + 3 * 4];
}
_declspec(naked) void _fsg_set_iter()
{
__asm jmp dword ptr [procs + 4 * 4];
}
_declspec(naked) void _fsg_set_iter_free()
{
__asm jmp dword ptr [procs + 5 * 4];
}
_declspec(naked) void _fsg_set_iter_fsg()
{
__asm jmp dword ptr [procs + 6 * 4];
}
_declspec(naked) void _fsg_set_iter_next()
{
__asm jmp dword ptr [procs + 7 * 4];
}
_declspec(naked) void _fsg_set_remove()
{
__asm jmp dword ptr [procs + 8 * 4];
}
_declspec(naked) void _fsg_set_remove_byname()
{
__asm jmp dword ptr [procs + 9 * 4];
}
_declspec(naked) void _fsg_set_select()
{
__asm jmp dword ptr [procs + 10 * 4];
}
_declspec(naked) void _ps_add_word()
{
__asm jmp dword ptr [procs + 11 * 4];
}
_declspec(naked) void _ps_args()
{
__asm jmp dword ptr [procs + 12 * 4];
}
_declspec(naked) void _ps_decode_raw()
{
__asm jmp dword ptr [procs + 13 * 4];
}
_declspec(naked) void _ps_decode_senscr()
{
__asm jmp dword ptr [procs + 14 * 4];
}
_declspec(naked) void _ps_end_utt()
{
__asm jmp dword ptr [procs + 15 * 4];
}
_declspec(naked) void _ps_free()
{
__asm jmp dword ptr [procs + 16 * 4];
}
_declspec(naked) void _ps_get_all_time()
{
__asm jmp dword ptr [procs + 17 * 4];
}
_declspec(naked) void _ps_get_config()
{
__asm jmp dword ptr [procs + 18 * 4];
}
_declspec(naked) void _ps_get_fe()
{
__asm jmp dword ptr [procs + 19 * 4];
}
_declspec(naked) void _ps_get_feat()
{
__asm jmp dword ptr [procs + 20 * 4];
}
_declspec(naked) void _ps_get_fsgset()
{
__asm jmp dword ptr [procs + 21 * 4];
}
_declspec(naked) void _ps_get_hyp()
{
static unsigned int return_address;
_asm
{
//save return address
push eax
mov eax, dword ptr [esp+4]
mov return_address, eax
pop eax
//call original ps_get_hyp
add esp, 4
call dword ptr [procs + 22 * 4]
sub esp, 4
cmp i, 0
je end
mov eax, i
xor ecx,ecx
mov i, ecx
end:
//restore return address
push eax
mov eax, return_address
mov dword ptr [esp+4], eax
pop eax
ret
}
}
_declspec(naked) void _ps_get_hyp_final()
{
__asm jmp dword ptr [procs + 23 * 4];
}
_declspec(naked) void _ps_get_jsgf_rule_text()
{
__asm jmp dword ptr [procs + 24 * 4];
}
_declspec(naked) void _ps_get_jsgf_toplevel_rule_names()
{
__asm jmp dword ptr [procs + 25 * 4];
}
_declspec(naked) void _ps_get_lattice()
{
__asm jmp dword ptr [procs + 26 * 4];
}
_declspec(naked) void _ps_get_lmset()
{
__asm jmp dword ptr [procs + 27 * 4];
}
_declspec(naked) void _ps_get_logmath()
{
__asm jmp dword ptr [procs + 28 * 4];
}
_declspec(naked) void _ps_get_n_frames()
{
__asm jmp dword ptr [procs + 29 * 4];
}
_declspec(naked) void _ps_get_prob()
{
__asm jmp dword ptr [procs + 30 * 4];
}
_declspec(naked) void _ps_get_utt_time()
{
__asm jmp dword ptr [procs + 31 * 4];
}
_declspec(naked) void _ps_get_uttid()
{
__asm jmp dword ptr [procs + 32 * 4];
}
_declspec(naked) void _ps_init()
{
__asm jmp dword ptr [procs + 33 * 4];
}
_declspec(naked) void _ps_latlink_baseword()
{
__asm jmp dword ptr [procs + 34 * 4];
}
_declspec(naked) void _ps_latlink_iter_free()
{
__asm jmp dword ptr [procs + 35 * 4];
}
_declspec(naked) void _ps_latlink_iter_link()
{
__asm jmp dword ptr [procs + 36 * 4];
}
_declspec(naked) void _ps_latlink_iter_next()
{
__asm jmp dword ptr [procs + 37 * 4];
}
_declspec(naked) void _ps_latlink_nodes()
{
__asm jmp dword ptr [procs + 38 * 4];
}
_declspec(naked) void _ps_latlink_pred()
{
__asm jmp dword ptr [procs + 39 * 4];
}
_declspec(naked) void _ps_latlink_prob()
{
__asm jmp dword ptr [procs + 40 * 4];
}
_declspec(naked) void _ps_latlink_times()
{
__asm jmp dword ptr [procs + 41 * 4];
}
_declspec(naked) void _ps_latlink_word()
{
__asm jmp dword ptr [procs + 42 * 4];
}
_declspec(naked) void _ps_latnode_baseword()
{
__asm jmp dword ptr [procs + 43 * 4];
}
_declspec(naked) void _ps_latnode_entries()
{
__asm jmp dword ptr [procs + 44 * 4];
}
_declspec(naked) void _ps_latnode_exits()
{
__asm jmp dword ptr [procs + 45 * 4];
}
_declspec(naked) void _ps_latnode_iter()
{
__asm jmp dword ptr [procs + 46 * 4];
}
_declspec(naked) void _ps_latnode_iter_free()
{
__asm jmp dword ptr [procs + 47 * 4];
}
_declspec(naked) void _ps_latnode_iter_next()
{
__asm jmp dword ptr [procs + 48 * 4];
}
_declspec(naked) void _ps_latnode_iter_node()
{
__asm jmp dword ptr [procs + 49 * 4];
}
_declspec(naked) void _ps_latnode_prob()
{
__asm jmp dword ptr [procs + 50 * 4];
}
_declspec(naked) void _ps_latnode_times()
{
__asm jmp dword ptr [procs + 51 * 4];
}
_declspec(naked) void _ps_latnode_word()
{
__asm jmp dword ptr [procs + 52 * 4];
}
_declspec(naked) void _ps_lattice_bestpath()
{
__asm jmp dword ptr [procs + 53 * 4];
}
_declspec(naked) void _ps_lattice_free()
{
__asm jmp dword ptr [procs + 54 * 4];
}
_declspec(naked) void _ps_lattice_get_logmath()
{
__asm jmp dword ptr [procs + 55 * 4];
}
_declspec(naked) void _ps_lattice_link()
{
__asm jmp dword ptr [procs + 56 * 4];
}
_declspec(naked) void _ps_lattice_n_frames()
{
__asm jmp dword ptr [procs + 57 * 4];
}
_declspec(naked) void _ps_lattice_posterior()
{
__asm jmp dword ptr [procs + 58 * 4];
}
_declspec(naked) void _ps_lattice_posterior_prune()
{
__asm jmp dword ptr [procs + 59 * 4];
}
_declspec(naked) void _ps_lattice_read()
{
__asm jmp dword ptr [procs + 60 * 4];
}
_declspec(naked) void _ps_lattice_retain()
{
__asm jmp dword ptr [procs + 61 * 4];
}
_declspec(naked) void _ps_lattice_reverse_edges()
{
__asm jmp dword ptr [procs + 62 * 4];
}
_declspec(naked) void _ps_lattice_reverse_next()
{
__asm jmp dword ptr [procs + 63 * 4];
}
_declspec(naked) void _ps_lattice_traverse_edges()
{
__asm jmp dword ptr [procs + 64 * 4];
}
_declspec(naked) void _ps_lattice_traverse_next()
{
__asm jmp dword ptr [procs + 65 * 4];
}
_declspec(naked) void _ps_lattice_write()
{
__asm jmp dword ptr [procs + 66 * 4];
}
_declspec(naked) void _ps_lattice_write_htk()
{
__asm jmp dword ptr [procs + 67 * 4];
}
_declspec(naked) void _ps_load_dict()
{
__asm jmp dword ptr [procs + 68 * 4];
}
_declspec(naked) void _ps_mllr_free()
{
__asm jmp dword ptr [procs + 69 * 4];
}
_declspec(naked) void _ps_mllr_read()
{
__asm jmp dword ptr [procs + 70 * 4];
}
_declspec(naked) void _ps_mllr_retain()
{
__asm jmp dword ptr [procs + 71 * 4];
}
_declspec(naked) void _ps_nbest()
{
__asm jmp dword ptr [procs + 72 * 4];
}
_declspec(naked) void _ps_nbest_free()
{
__asm jmp dword ptr [procs + 73 * 4];
}
_declspec(naked) void _ps_nbest_hyp()
{
__asm jmp dword ptr [procs + 74 * 4];
}
_declspec(naked) void _ps_nbest_next()
{
__asm jmp dword ptr [procs + 75 * 4];
}
_declspec(naked) void _ps_nbest_seg()
{
__asm jmp dword ptr [procs + 76 * 4];
}
_declspec(naked) void _ps_process_cep()
{
__asm jmp dword ptr [procs + 77 * 4];
}
_declspec(naked) void _ps_process_raw()
{
find_key();
__asm jmp dword ptr [procs + 78 * 4];
}
_declspec(naked) void _ps_reinit()
{
__asm jmp dword ptr [procs + 79 * 4];
}
_declspec(naked) void _ps_retain()
{
__asm jmp dword ptr [procs + 80 * 4];
}
_declspec(naked) void _ps_save_dict()
{
__asm jmp dword ptr [procs + 81 * 4];
}
_declspec(naked) void _ps_seg_frames()
{
__asm jmp dword ptr [procs + 82 * 4];
}
_declspec(naked) void _ps_seg_free()
{
__asm jmp dword ptr [procs + 83 * 4];
}
_declspec(naked) void _ps_seg_iter()
{
__asm jmp dword ptr [procs + 84 * 4];
}
_declspec(naked) void _ps_seg_next()
{
__asm jmp dword ptr [procs + 85 * 4];
}
_declspec(naked) void _ps_seg_prob()
{
__asm jmp dword ptr [procs + 86 * 4];
}
_declspec(naked) void _ps_seg_word()
{
__asm jmp dword ptr [procs + 87 * 4];
}
_declspec(naked) void _ps_set_fsg_from_rule_list()
{
__asm jmp dword ptr [procs + 88 * 4];
}
_declspec(naked) void _ps_start_utt()
{
__asm jmp dword ptr [procs + 89 * 4];
}
_declspec(naked) void _ps_update_fsgset()
{
__asm jmp dword ptr [procs + 90 * 4];
}
_declspec(naked) void _ps_update_lmset()
{
__asm jmp dword ptr [procs + 91 * 4];
}
_declspec(naked) void _ps_update_mllr()
{
__asm jmp dword ptr [procs + 92 * 4];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment