MCPcopy Create free account
hub / github.com/alliedmodders/sourcemod / CheckLinuxSigOffset

Function CheckLinuxSigOffset

tools/gdc-psyfork/gdc.cpp:448–520  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

446 }
447}
448void CheckLinuxSigOffset(char* name, const char* symbol, void * handle)
449{
450 void *ptr = GetLinuxSigPtr(handle, symbol);
451 if(!ptr)
452 {
453 return;
454 }
455 const char* sigOffsetKey = NULL;
456 const char* sigOffsetByte = NULL;
457 int sigOffset = -1;
458 char sigOffsetName[128];
459 char sigByteName[128];
460
461 snprintf(sigOffsetName, sizeof(sigOffsetName), "%s_Offset", name);
462 snprintf(sigByteName, sizeof(sigByteName), "%s_Byte_Lin", name);
463
464 sigOffsetKey = symbols.GetKeyValue((const char *)sigOffsetName);
465
466 if(sigOffsetKey == NULL)
467 {
468
469 //Maybe it has multiple?
470 for(unsigned int i = 1; i <= 4; i++)
471 {
472 snprintf(sigOffsetName, sizeof(sigOffsetName), "%s_Offset%i", name, i);
473 snprintf(sigByteName, sizeof(sigByteName), "%s_Byte_Lin%i", name, i);
474 sigOffsetKey = symbols.GetKeyValue((const char *)sigOffsetName);
475
476 if(sigOffsetKey == NULL)
477 {
478 break;
479 }
480
481 sigOffset = GetOffset(sigOffsetKey, false);
482 sigOffsetByte = symbols.GetKeyValue((const char *)sigByteName);
483
484 if(sigOffset != -1 && sigOffsetByte != NULL)//Got the offset in the function
485 {
486 uint8_t iByte = strtoul(sigOffsetByte, NULL, 16);
487 uint8_t iCompare = *(uint8_t *)((intptr_t)ptr + sigOffset);
488
489 if(iByte == iCompare)
490 {
491 printf(" l: %s -> %s (%4d) \\x%02X == \\x%02X GOOD\n", name, sigOffsetKey, sigOffset, iCompare, iByte);
492 }
493 else
494 {
495 printf("! l: %s -> %s (%4d) \\x%02X != \\x%02X BAD\n", name, sigOffsetKey, sigOffset, iCompare, iByte);
496 }
497 }
498 }
499 }
500 else
501 {
502 sigOffset = GetOffset(sigOffsetKey, false);
503 sigOffsetByte = symbols.GetKeyValue((const char *)sigByteName);
504
505 if(sigOffset != -1 && sigOffsetByte != NULL)//Got the offset in the function

Callers 1

mainFunction · 0.85

Calls 3

GetLinuxSigPtrFunction · 0.85
GetOffsetFunction · 0.85
GetKeyValueMethod · 0.45

Tested by

no test coverage detected