Merge pull request #1 from peace-maker/csgo_getspew
Fix CS:GO GetSpew support
This commit is contained in:
		
						commit
						643e1c7e47
					
				@ -76,4 +76,27 @@
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"csgo"
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"Keys"
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"UseFastcall"	"yes"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							"Signatures"
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"GetSpew"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"library" "engine"
 | 
				
			||||||
 | 
									"linux" "\x55\x89\xE5\x57\x56\x53\x83\xEC\x2C\x8B\x5D\x08\xE8\x2A\x2A\x2A\x2A\x89\xC2\xA1\x2A\x2A\x2A\x2A"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								"GetSpewFastcall"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"library" "engine"
 | 
				
			||||||
 | 
									"windows" "\x55\x8B\xEC\x51\x53\x56\x57\x8B\xFA\x8B\xD9"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -45,6 +45,10 @@ IGameConfig *gameconfig;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
typedef void (*GetSpew_t)(char *buffer, unsigned int length);
 | 
					typedef void (*GetSpew_t)(char *buffer, unsigned int length);
 | 
				
			||||||
GetSpew_t GetSpew;
 | 
					GetSpew_t GetSpew;
 | 
				
			||||||
 | 
					#if defined _WINDOWS
 | 
				
			||||||
 | 
					typedef void(__fastcall *GetSpewFastcall_t)(char *buffer, unsigned int length);
 | 
				
			||||||
 | 
					GetSpewFastcall_t GetSpewFastcall;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
char spewBuffer[65536]; // Hi.
 | 
					char spewBuffer[65536]; // Hi.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -131,6 +135,7 @@ static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (GetSpew) {
 | 
						if (GetSpew) {
 | 
				
			||||||
		GetSpew(spewBuffer, sizeof(spewBuffer));
 | 
							GetSpew(spewBuffer, sizeof(spewBuffer));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (my_strlen(spewBuffer) > 0) {
 | 
							if (my_strlen(spewBuffer) > 0) {
 | 
				
			||||||
			sys_write(extra, "-------- CONSOLE HISTORY BEGIN --------\n", 40);
 | 
								sys_write(extra, "-------- CONSOLE HISTORY BEGIN --------\n", 40);
 | 
				
			||||||
			sys_write(extra, spewBuffer, my_strlen(spewBuffer));
 | 
								sys_write(extra, spewBuffer, my_strlen(spewBuffer));
 | 
				
			||||||
@ -286,8 +291,13 @@ static bool dumpCallback(const wchar_t* dump_path,
 | 
				
			|||||||
	fprintf(extra, "%s", steamInf);
 | 
						fprintf(extra, "%s", steamInf);
 | 
				
			||||||
	fprintf(extra, "\n-------- CONFIG END --------\n");
 | 
						fprintf(extra, "\n-------- CONFIG END --------\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (GetSpew || GetSpewFastcall) {
 | 
				
			||||||
		if (GetSpew) {
 | 
							if (GetSpew) {
 | 
				
			||||||
			GetSpew(spewBuffer, sizeof(spewBuffer));
 | 
								GetSpew(spewBuffer, sizeof(spewBuffer));
 | 
				
			||||||
 | 
							} else if (GetSpewFastcall) {
 | 
				
			||||||
 | 
								GetSpewFastcall(spewBuffer, sizeof(spewBuffer));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (strlen(spewBuffer) > 0) {
 | 
							if (strlen(spewBuffer) > 0) {
 | 
				
			||||||
			fprintf(extra, "-------- CONSOLE HISTORY BEGIN --------\n%s-------- CONSOLE HISTORY END --------\n", spewBuffer);
 | 
								fprintf(extra, "-------- CONSOLE HISTORY BEGIN --------\n%s-------- CONSOLE HISTORY END --------\n", spewBuffer);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -468,15 +478,43 @@ bool Accelerator::SDK_OnLoad(char *error, size_t maxlength, bool late)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	threader->MakeThread(&uploadThread);
 | 
						threader->MakeThread(&uploadThread);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						do {
 | 
				
			||||||
		char gameconfigError[256];
 | 
							char gameconfigError[256];
 | 
				
			||||||
		if (!gameconfs->LoadGameConfigFile("accelerator.games", &gameconfig, gameconfigError, sizeof(gameconfigError))) {
 | 
							if (!gameconfs->LoadGameConfigFile("accelerator.games", &gameconfig, gameconfigError, sizeof(gameconfigError))) {
 | 
				
			||||||
			smutils->LogMessage(myself, "WARNING: Failed to load gamedata file, console output and command line will not be included in crash reports: %s", gameconfigError);
 | 
								smutils->LogMessage(myself, "WARNING: Failed to load gamedata file, console output and command line will not be included in crash reports: %s", gameconfigError);
 | 
				
			||||||
	} else if (!gameconfig->GetMemSig("GetSpew", (void **)&GetSpew)) {
 | 
								break;
 | 
				
			||||||
		smutils->LogMessage(myself, "WARNING: GetSpew not found in gamedata, console output will not be included in crash reports.");
 | 
					 | 
				
			||||||
	} else if (!GetSpew) {
 | 
					 | 
				
			||||||
		smutils->LogMessage(myself, "WARNING: Sigscan for GetSpew failed, console output will not be included in crash reports.");
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							bool useFastcall = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined _WINDOWS
 | 
				
			||||||
 | 
							const char *fastcall = gameconfig->GetKeyValue("UseFastcall");
 | 
				
			||||||
 | 
							if (fastcall && strcmp(fastcall, "yes") == 0) {
 | 
				
			||||||
 | 
								useFastcall = true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (useFastcall && !gameconfig->GetMemSig("GetSpewFastcall", (void **)&GetSpewFastcall)) {
 | 
				
			||||||
 | 
								smutils->LogMessage(myself, "WARNING: GetSpewFastcall not found in gamedata, console output will not be included in crash reports.");
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!useFastcall && !gameconfig->GetMemSig("GetSpew", (void **)&GetSpew)) {
 | 
				
			||||||
 | 
								smutils->LogMessage(myself, "WARNING: GetSpew not found in gamedata, console output will not be included in crash reports.");
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!GetSpew
 | 
				
			||||||
 | 
					#if defined _WINDOWS
 | 
				
			||||||
 | 
								&& !GetSpewFastcall
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
							) {
 | 
				
			||||||
 | 
								smutils->LogMessage(myself, "WARNING: Sigscan for GetSpew failed, console output will not be included in crash reports.");
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} while(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined _LINUX
 | 
					#if defined _LINUX
 | 
				
			||||||
	google_breakpad::MinidumpDescriptor descriptor(dumpStoragePath);
 | 
						google_breakpad::MinidumpDescriptor descriptor(dumpStoragePath);
 | 
				
			||||||
	handler = new google_breakpad::ExceptionHandler(descriptor, NULL, dumpCallback, NULL, true, -1);
 | 
						handler = new google_breakpad::ExceptionHandler(descriptor, NULL, dumpCallback, NULL, true, -1);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user