mirror of
https://github.com/decompals/wibo.git
synced 2025-12-13 23:26:17 +00:00
Everything needed to run simple Rust programs (#40)
* Everything needed to run simple Rust programs * Add IsDBCSLeadByte implementation * Address PR comments
This commit is contained in:
91
common.h
91
common.h
@@ -1,10 +1,11 @@
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <cassert>
|
||||
#include <cstdint>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <assert.h>
|
||||
|
||||
// On Windows, the incoming stack is aligned to a 4 byte boundary.
|
||||
// force_align_arg_pointer will realign the stack to match GCC's 16 byte alignment.
|
||||
@@ -12,25 +13,83 @@
|
||||
#define WIN_FUNC WIN_ENTRY __attribute__((stdcall))
|
||||
#define DEBUG_LOG(...) wibo::debug_log(__VA_ARGS__)
|
||||
|
||||
namespace user32 {
|
||||
int WIN_FUNC MessageBoxA(void *hwnd, const char *lpText, const char *lpCaption, unsigned int uType);
|
||||
}
|
||||
typedef void *HANDLE;
|
||||
typedef void *HMODULE;
|
||||
typedef void *PVOID;
|
||||
typedef void *LPVOID;
|
||||
typedef void *FARPROC;
|
||||
typedef uint32_t DWORD;
|
||||
typedef DWORD *PDWORD;
|
||||
typedef DWORD *LPDWORD;
|
||||
typedef int32_t LONG;
|
||||
typedef LONG *PLONG;
|
||||
typedef uint32_t ULONG;
|
||||
typedef ULONG *PULONG;
|
||||
typedef int64_t LARGE_INTEGER;
|
||||
typedef LARGE_INTEGER *PLARGE_INTEGER;
|
||||
typedef uintptr_t ULONG_PTR;
|
||||
typedef char *LPSTR;
|
||||
typedef const char *LPCSTR;
|
||||
typedef uint16_t *LPWSTR;
|
||||
typedef const uint16_t *LPCWSTR;
|
||||
typedef int BOOL;
|
||||
typedef BOOL *PBOOL;
|
||||
typedef unsigned char UCHAR;
|
||||
typedef UCHAR *PUCHAR;
|
||||
typedef size_t SIZE_T;
|
||||
typedef SIZE_T *PSIZE_T;
|
||||
typedef unsigned char BYTE;
|
||||
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
#define ERROR_SUCCESS 0
|
||||
#define ERROR_FILE_NOT_FOUND 2
|
||||
#define ERROR_PATH_NOT_FOUND 3
|
||||
#define ERROR_ACCESS_DENIED 5
|
||||
#define ERROR_INVALID_HANDLE 6
|
||||
#define ERROR_READ_FAULT 30
|
||||
#define ERROR_HANDLE_EOF 38
|
||||
#define ERROR_NOT_SUPPORTED 50
|
||||
#define ERROR_INVALID_PARAMETER 87
|
||||
#define ERROR_NEGATIVE_SEEK 131
|
||||
#define ERROR_ALREADY_EXISTS 183
|
||||
|
||||
#define INVALID_SET_FILE_POINTER ((DWORD)-1)
|
||||
#define INVALID_HANDLE_VALUE ((HANDLE)-1)
|
||||
|
||||
typedef int NTSTATUS;
|
||||
#define STATUS_SUCCESS ((NTSTATUS)0x00000000)
|
||||
#define STATUS_INVALID_HANDLE ((NTSTATUS)0xC0000008)
|
||||
#define STATUS_END_OF_FILE ((NTSTATUS)0xC0000011)
|
||||
#define STATUS_NOT_SUPPORTED ((NTSTATUS)0xC00000BB)
|
||||
#define STATUS_UNEXPECTED_IO_ERROR ((NTSTATUS)0xC00000E9)
|
||||
|
||||
typedef int HRESULT;
|
||||
#define S_OK ((HRESULT)0x00000000)
|
||||
|
||||
namespace wibo {
|
||||
extern uint32_t lastError;
|
||||
extern char **argv;
|
||||
extern int argc;
|
||||
extern char *commandLine;
|
||||
extern bool debugEnabled;
|
||||
|
||||
void debug_log(const char *fmt, ...);
|
||||
|
||||
void *resolveVersion(const char *name);
|
||||
void *resolveKernel32(const char *name);
|
||||
void *resolveUser32(const char *name);
|
||||
void *resolveOle32(const char *name);
|
||||
void *resolveAdvApi32(const char *name);
|
||||
void *resolveLmgr(uint16_t ordinal);
|
||||
void *resolveFuncByName(const char *dllName, const char *funcName);
|
||||
void *resolveFuncByOrdinal(const char *dllName, uint16_t ordinal);
|
||||
using ResolveByName = void *(*)(const char *);
|
||||
using ResolveByOrdinal = void *(*)(uint16_t);
|
||||
struct Module {
|
||||
const char** names;
|
||||
ResolveByName byName;
|
||||
ResolveByOrdinal byOrdinal;
|
||||
};
|
||||
extern const Module *modules[];
|
||||
|
||||
HMODULE loadModule(const char *name);
|
||||
void freeModule(HMODULE module);
|
||||
void *resolveFuncByName(HMODULE module, const char *funcName);
|
||||
void *resolveFuncByOrdinal(HMODULE module, uint16_t ordinal);
|
||||
|
||||
struct Executable {
|
||||
Executable();
|
||||
|
||||
Reference in New Issue
Block a user