You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.0 KiB

3 years ago
/*
Keystone Assembler Engine bindings for VB6
Contributed by FireEye FLARE Team
Author: David Zimmer <david.zimmer@fireeye.com>, <dzzie@yahoo.com>
License: Apache
Copyright: FireEye 2017
This dll is a small stdcall shim so VB6 can access the keystone API
*/
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <keystone/keystone.h>
#pragma comment(lib, "keystone.lib")
#define EXPORT comment(linker, "/EXPORT:"__FUNCTION__"="__FUNCDNAME__)
/* - I will enable this once it makes it into the stable binary release...not tested yet..
typedef bool (__stdcall *vb_sym_resolver)(const char *symbol, uint64_t *value);
vb_sym_resolver vbResolver = NULL;
bool c_sym_resolver(const char *symbol, uint64_t *value){
if((int)vbResolver == 0) return false;
return vbResolver(symbol, value);
}
void __stdcall setResolver(ks_engine *ks, unsigned int lpfnVBResolver){
#pragma EXPORT
vbResolver = (vb_sym_resolver)lpfnVBResolver;
ks_option(ks, KS_OPT_SYM_RESOLVER, (size_t)c_sym_resolver);
}
*/
unsigned int __stdcall vs_version(unsigned int *major, unsigned int *minor){
#pragma EXPORT
return ks_version(major,minor);
}
bool __stdcall vs_arch_supported(ks_arch arch){
#pragma EXPORT
return ks_arch_supported(arch);
}
ks_err __stdcall vs_open(ks_arch arch, int mode, ks_engine **ks){
#pragma EXPORT
return ks_open(arch, mode,ks);
}
ks_err __stdcall vs_close(ks_engine *ks){
#pragma EXPORT
return ks_close(ks);
}
ks_err __stdcall vs_errno(ks_engine *ks){
#pragma EXPORT
return ks_errno(ks);
}
const char* __stdcall vs_strerror(ks_err code){
#pragma EXPORT
return ks_strerror(code);
}
ks_err __stdcall vs_option(ks_engine *ks, ks_opt_type type, size_t value){
#pragma EXPORT
return ks_option(ks,type, value);
}
int __stdcall vs_asm(ks_engine *ks, const char *string, uint64_t address, unsigned char **encoding, size_t *encoding_size, size_t *stat_count){
#pragma EXPORT
return ks_asm(ks,string,address,encoding,encoding_size,stat_count);
}
void __stdcall vs_free(unsigned char *p){
#pragma EXPORT
return ks_free(p);
}