MCPcopy Create free account
hub / github.com/HyperDbg/HyperDbg / Push

Function Push

hyperdbg/script-engine/code/common.c:440–494  ·  view source on GitHub ↗

* @brief Adds Token to the last empty position of TokenList * * @param TokenList the token list to push into * @param Token the token to add * @return PSCRIPT_ENGINE_TOKEN_LIST */

Source from the content-addressed store, hash-verified

438 * @return PSCRIPT_ENGINE_TOKEN_LIST
439 */
440PSCRIPT_ENGINE_TOKEN_LIST
441Push(PSCRIPT_ENGINE_TOKEN_LIST TokenList, PSCRIPT_ENGINE_TOKEN Token)
442{
443 //
444 // Calculate address to write new token
445 //
446 uintptr_t Head = (uintptr_t)TokenList->Head;
447 uintptr_t Pointer = (uintptr_t)TokenList->Pointer;
448 PSCRIPT_ENGINE_TOKEN * WriteAddr = (PSCRIPT_ENGINE_TOKEN *)(Head + Pointer * sizeof(PSCRIPT_ENGINE_TOKEN));
449
450 //
451 // Write Token to appropriate address in TokenList
452 //
453 *WriteAddr = Token;
454
455 //
456 // Update Pointer
457 //
458 TokenList->Pointer++;
459
460 //
461 // Handle overflow
462 //
463 if (Pointer == TokenList->Size - 1)
464 {
465 //
466 // Allocate a new buffer for string list with doubled length
467 //
468 PSCRIPT_ENGINE_TOKEN * NewHead = (PSCRIPT_ENGINE_TOKEN *)malloc(2 * TokenList->Size * sizeof(PSCRIPT_ENGINE_TOKEN));
469
470 if (NewHead == NULL)
471 {
472 printf("err, could not allocate buffer");
473 return NULL;
474 }
475
476 //
477 // Copy old buffer to new buffer
478 //
479 memcpy(NewHead, TokenList->Head, TokenList->Size * sizeof(PSCRIPT_ENGINE_TOKEN));
480
481 //
482 // Free old buffer
483 //
484 free(TokenList->Head);
485
486 //
487 // Update Head and size of TokenList
488 //
489 TokenList->Size = TokenList->Size * 2;
490 TokenList->Head = NewHead;
491 }
492
493 return TokenList;
494}
495/**
496 * @brief Removes last Token of a TokenList and returns it
497 *

Callers 7

ScriptEngineParseFunction · 0.85
CodeGenFunction · 0.85
NewGlobalIdentifierFunction · 0.85
NewLocalIdentifierFunction · 0.85
HandleTypeFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected