Commit Graph

5 Commits

Author SHA1 Message Date
Davide Beatrici
1a95ad8ad1 mumble_plugin_main.h: include <cstring> for memset()
The MinGW builds failed with:

In file included from gtasa.cpp:6:0:
../mumble_plugin_main.h: In instantiation of 'T peekProc(const procptr_t&) [with T = unsigned char; procptr_t = long long unsigned int]':
gtasa.cpp:25:59:   required from here
../mumble_plugin_main.h:47:9: error: 'memset' was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
   memset(&ret, 0, sizeof(ret));
         ^
In file included from /usr/lib/mxe/usr/x86_64-w64-mingw32.static/include/guiddef.h:154:0,
                 from /usr/lib/mxe/usr/x86_64-w64-mingw32.static/include/winnt.h:635,
                 from /usr/lib/mxe/usr/x86_64-w64-mingw32.static/include/minwindef.h:163,
                 from /usr/lib/mxe/usr/x86_64-w64-mingw32.static/include/windef.h:8,
                 from /usr/lib/mxe/usr/x86_64-w64-mingw32.static/include/windows.h:69,
                 from ./../mumble_plugin_win32.h:21,
                 from ../mumble_plugin_main.h:95,
                 from gtasa.cpp:6:
/usr/lib/mxe/usr/x86_64-w64-mingw32.static/include/string.h:53:18: note: 'void* memset(void*, int, size_t)' declared here, later in the translation unit
   void * __cdecl memset(void *_Dst,int _Val,size_t _Size);
                  ^
2019-08-28 09:28:53 +02:00
Davide Beatrici
6fb885c451 mumble_plugin_linux.h: detect process architecture by reading the process' memory instead of its binary
Aside from being faster, it also requires less code.

This commit also changes the way architecture is detected for Win32 processes.
Previously, we relied on the Wine's preloader binary's architecture because we read its ELF header; now we read the NT header(s) by calling isWin32Process64Bit() (implemented in 86154c8234).
2019-08-17 00:31:18 +02:00
Davide Beatrici
86154c8234 plugins: detect Win32 process architecture by reading NT header(s)
This is better than our current method because:
1. We don't need an extra handle (IsWow64Process() requires PROCESS_QUERY_INFORMATION or PROCESS_QUERY_LIMITED_INFORMATION).
2. It's more reliable: our current method consists in checking the result of IsWow64Process() (true if the process is 32 bit on 64 bit Windows) and the size of void * (4 bytes if 32 bit, 8 bytes if 64 bit).
It works correctly with a 32 bit plugin on 32 bit Windows and with a 64 bit plugin on 64 bit Windows; it doesn't work correctly when the plugin is 32 bit on 64 bit Windows: 64 bit processes are detected as 32 bit.
3. We can use the same method on Linux (the NT image is loaded in memory by Wine).
2019-08-17 00:30:23 +02:00
Davide Beatrici
9875c59b7a plugins: use new header 2019-08-08 23:51:13 +02:00
Davide Beatrici
e8afc3872a plugins: move common functions and variables from OS-specific headers to mumble_plugin_main.h
This is in preparation for the new Source Engine plugin which will add a few common functions.

This commit also improves the functions arguments so that they are passed by reference and marked as const (when possible).

A new data type called procid_t is created, intended to be a replacement for pid_t (Linux) and DWORD (Windows).
2019-08-08 23:51:13 +02:00