This function is of critical importance for the Source Engine plugin, let me elaborate on why. Most games consist in an executable and maybe one or more libraries, but they don't have particular exported symbols we can use to easily access (existing) resources inside the process, which means we have to rely on hardcoded offsets and hex pattern scanning. Source Engine games are special: the executable is nothing more than a manager that takes care of loading the core libraries, which are engine(.dll|.so) and client(.dll|.so) (or server(.dll|.so) in the case of a dedicated server). Those libraries have a common exported symbol, which is CreateInterface(). The function takes the interface's name as argument (char *), creates the interface object if it doesn't exist yet and returns a pointer (void *) to it. The interfaces objects are stored in a list called s_pInterfaceList, which is usually an exported symbol on Linux. getExportedSymbol() allows us to get the address to CreateInterface() (different for each loaded library) inside the process and read the function's assembly code in order to reach s_pInterfaceList. If s_pInterfaceList is exported we can get its address with getExportedSymbol(), without the need of CreateInterface(). |
||
|---|---|---|
| .ci | ||
| .github | ||
| .tx | ||
| 3rdparty | ||
| 3rdPartyLicenses | ||
| cmake | ||
| docs | ||
| g15helper | ||
| icons | ||
| installer | ||
| macx | ||
| man | ||
| overlay | ||
| overlay_gl | ||
| overlay_winx64 | ||
| plugins | ||
| samples | ||
| screenshots | ||
| scripts | ||
| src | ||
| themes | ||
| .cirrus.yml | ||
| .clang-format | ||
| .gitignore | ||
| .gitmodules | ||
| .mailmap | ||
| .travis.yml | ||
| AUTHORS | ||
| CHANGES | ||
| CMakeLists.txt | ||
| COMMIT_GUIDELINES.md | ||
| Dockerfile | ||
| Doxyfile | ||
| INSTALL | ||
| LICENSE | ||
| LICENSE.header | ||
| README.md | ||
| SECURITY.md | ||
| sonar-project.properties | ||
Mumble - Open Source voice-chat software
Mumble is an Open Source, low-latency and high-quality voice-chat program written on top of Qt and Opus.
There are two modules in Mumble; the client (mumble) and the server (murmur). The client works on Win32/64, Linux and Mac OS X, while the server should work on anything Qt can be installed on.
Note that when we say Win32, we mean Windows XP or newer.
The documentation of the project can be found on the wiki. The FAQ can also be found there.
Reporting issues
If you want to report a bug or create a feature-request, you can open a new issue (after you have checked that there is none already) on GitHub.
Windows
Running Mumble
After installation, you should have a new Mumble folder in your Start Menu, from which you can start Mumble.
Running Murmur
Doubleclick the Murmur icon to start murmur. There will be a small icon on your taskbar from which you can view the log.
To set the superuser password, run murmur with the parameters -supw <password>.
MacOS
Running Mumble
To install Mumble, drag the application from the downloaded
disk image into your /Applications folder.
Running Murmur
Murmur is distributed separately from the Mumble client on MacOS. It is called Static OS X Server and can be downloaded from the main webpage.
Once downloaded it can be run in the same way as on any other Unix-like system. For more information please see the "Running Murmur" in the Linux/Unix section below.
Linux/Unix
Running Mumble
If you have installed Mumble through your distributon's package repostory, you should be able to find Mumble in your start menu. No additional steps necessary.
Running Murmur
Murmur should be run from the command line, so start a shell (command prompt) and go to wherever you installed Mumble. Run murmur as
murmurd [-supw <password>] [-ini <inifile>] [-fg] [v]
-supw Set a new password for the user SuperUser, which is hardcoded to
bypass ACLs. Keep this password safe. Until you set a password,
the SuperUser is disabled. If you use this option, murmur will
set the password in the database and then exit.
-ini Use an inifile other than murmur.ini, use this to run several instances
of murmur from the same directory. Make sure each instance is using
a separate database.
-fg Run in the foreground, logging to standard output.
-v More verbose logging.
OpenGL Overlay
The OpenGL overlay works by intercepting the call to switch buffers, and just before the buffer switch, we draw our nice GUI.
To load a game with the overlay enabled, start the game like this: LD_PRELOAD=/path/to/libmumble.so.1.1 gamename
If you have Mumble installed through the binary packages, this can be done by simply typing: mumble-overlay gamename
Global Keyboard Events
On Linux, Mumble supports reading the kernel input devices. To use this,
make sure mumble can open /dev/input/event* for reading. To test it out,
that should only require:
sudo chmod a+r /dev/input/event*
However, be aware that this will most likely only last until the next reboot (at which point devfs is recreated) and you also allow any program run by any user to monitor the physical keyboard.
Without this, Mumble will continuously poll the mouse and keyboard state for changes, which will use a tiny bit of processing power.
